Skip to content

Commit

Permalink
Add ScyllaDB to crud-bench benchmark
Browse files Browse the repository at this point in the history
  • Loading branch information
tobiemh committed Oct 1, 2024
1 parent cab8d00 commit cd8aa13
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 4 deletions.
4 changes: 3 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,14 @@ license = "Apache-2.0"
readme = "README.md"

[features]
default = ["keydb", "redis", "redb", "rocksdb", "postgres", "mongodb", "surrealkv", "surrealdb"]
default = ["keydb", "redis", "redb", "rocksdb", "postgres", "mongodb", "scylladb", "surrealkv", "surrealdb"]
keydb = ["dep:redis"]
mongodb = ["dep:mongodb"]
postgres = ["dep:tokio-postgres"]
redb = ["dep:redb"]
redis = ["dep:redis"]
rocksdb = ["dep:rocksdb"]
scylladb = ["dep:scylla"]
speedb = ["dep:speedb"]
surrealdb = ["dep:surrealdb"]
surrealkv = ["dep:surrealkv"]
Expand All @@ -37,6 +38,7 @@ rand = { version = "0.8.5", features = ["small_rng"] }
redb = { version = "2.1.3", optional = true }
redis = { version = "0.24.0", features = ["tokio-comp"], optional = true }
rocksdb = { git = "https://github.com/surrealdb/rust-rocksdb", features = ["lz4", "snappy"], optional = true }
scylla = { version = "0.14.0", optional = true }
serde = { version = "1.0.210", features = ["derive"] }
speedb = { version = "0.0.5", features = ["lz4", "snappy"], optional = true }
surrealdb = { version = "2.0.1", optional = true }
Expand Down
10 changes: 10 additions & 0 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use crate::benchmark::{Benchmark, BenchmarkResult};
use crate::docker::DockerContainer;
use crate::docker::DockerParams;
use crate::dry::DryClientProvider;

#[cfg(feature = "keydb")]
use crate::keydb::KeydbClientProvider;
#[cfg(feature = "mongodb")]
Expand All @@ -14,6 +15,8 @@ use crate::redb::ReDBClientProvider;
use crate::redis::RedisClientProvider;
#[cfg(feature = "rocksdb")]
use crate::rocksdb::RocksDBClientProvider;
#[cfg(feature = "scylladb")]
use crate::scylladb::ScyllaDBClientProvider;
#[cfg(feature = "speedb")]
use crate::speedb::SpeeDBClientProvider;
#[cfg(feature = "surrealdb")]
Expand All @@ -34,6 +37,7 @@ mod postgres;
mod redb;
mod redis;
mod rocksdb;
mod scylladb;
mod speedb;
mod surrealdb;
mod surrealkv;
Expand Down Expand Up @@ -85,6 +89,8 @@ pub(crate) enum Database {
SurrealdbRocksdb,
#[cfg(feature = "surrealdb")]
SurrealdbSurrealkv,
#[cfg(feature = "scylladb")]
Scylladb,
#[cfg(feature = "mongodb")]
Mongodb,
#[cfg(feature = "postgres")]
Expand Down Expand Up @@ -115,6 +121,8 @@ impl Database {
Database::SurrealdbRocksdb => surrealdb::SURREALDB_ROCKSDB_DOCKER_PARAMS,
#[cfg(feature = "surrealdb")]
Database::SurrealdbSurrealkv => surrealdb::SURREALDB_SURREALKV_DOCKER_PARAMS,
#[cfg(feature = "scylladb")]
Database::Scylladb => scylladb::SCYLLADB_DOCKER_PARAMS,
#[cfg(feature = "mongodb")]
Database::Mongodb => mongodb::MONGODB_DOCKER_PARAMS,
#[cfg(feature = "postgres")]
Expand Down Expand Up @@ -148,6 +156,8 @@ impl Database {
Database::SurrealdbRocksdb => benchmark.run(SurrealDBClientProvider::default()).await,
#[cfg(feature = "surrealdb")]
Database::SurrealdbSurrealkv => benchmark.run(SurrealDBClientProvider::default()).await,
#[cfg(feature = "scylladb")]
Database::Scylladb => benchmark.run(ScyllaDBClientProvider::default()).await,
#[cfg(feature = "mongodb")]
Database::Mongodb => benchmark.run(MongoDBClientProvider::default()).await,
#[cfg(feature = "postgres")]
Expand Down
6 changes: 3 additions & 3 deletions src/postgres.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,9 @@ impl BenchmarkClient for PostgresClient {
.batch_execute(
"
CREATE TABLE record (
id SERIAL PRIMARY KEY,
text TEXT NOT NULL,
integer INTEGER NOT NULL
id SERIAL PRIMARY KEY,
text TEXT NOT NULL,
integer INTEGER NOT NULL
)
",
)
Expand Down
94 changes: 94 additions & 0 deletions src/scylladb.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
#![cfg(feature = "scylladb")]

use anyhow::Result;
use scylla::{Session, SessionBuilder};

use crate::benchmark::{BenchmarkClient, BenchmarkEngine, Record};
use crate::docker::DockerParams;

pub(crate) const SCYLLADB_DOCKER_PARAMS: DockerParams = DockerParams {
image: "scylladb/scylla",
pre_args: "-p 9042:9042",
post_args: "",
};

#[derive(Default)]
pub(crate) struct ScyllaDBClientProvider {}

impl BenchmarkEngine<ScylladbClient> for ScyllaDBClientProvider {
async fn create_client(&self, endpoint: Option<String>) -> Result<ScylladbClient> {
let node = endpoint.unwrap_or("127.0.0.1:9042".to_owned());
let session = SessionBuilder::new().known_node(node).build().await?;
Ok(ScylladbClient {
session,
})
}
}

pub(crate) struct ScylladbClient {
session: Session,
}

impl BenchmarkClient for ScylladbClient {
async fn startup(&mut self) -> Result<()> {
self.session
.query_unpaged(
"
CREATE KEYSPACE bench
WITH replication = { 'class': 'SimpleStrategy', 'replication_factor' : 1 }
AND durable_writes = true
",
(),
)
.await?;
self.session
.query_unpaged(
"
CREATE TABLE bench.record (
id int PRIMARY KEY,
text text,
integer int
)
",
(),
)
.await?;
Ok(())
}

async fn create(&mut self, key: i32, record: &Record) -> Result<()> {
self.session
.query_unpaged(
"INSERT INTO bench.record (id, text, integer) VALUES (?, ?, ?)",
(&key, &record.text, &record.integer),
)
.await?;
Ok(())
}

async fn read(&mut self, key: i32) -> Result<()> {
let res = self
.session
.query_unpaged("SELECT id, text, integer FROM bench.record WHERE id=?", (&key,))
.await?;
assert_eq!(res.rows_num()?, 1);
Ok(())
}

#[allow(dependency_on_unit_never_type_fallback)]
async fn update(&mut self, key: i32, record: &Record) -> Result<()> {
self.session
.query_unpaged(
"UPDATE bench.record SET text=?, integer=? WHERE id=?",
(&record.text, &record.integer, &key),
)
.await?;
Ok(())
}

#[allow(dependency_on_unit_never_type_fallback)]
async fn delete(&mut self, key: i32) -> Result<()> {
self.session.query_unpaged("DELETE FROM bench.record WHERE id=?", (&key,)).await?;
Ok(())
}
}

0 comments on commit cd8aa13

Please sign in to comment.