diff --git a/Cargo.toml b/Cargo.toml index 2128560..10a2b56 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2024" [dependencies] -mace-kv = { git = "https://github.com/abbycin/mace" } +mace-kv = "0.0.23" clap = { version = "4.5.48", features = ["derive"] } rand = "0.9.2" log = "0.4.22" diff --git a/README.md b/README.md index 57fa6da..09bbfc6 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,18 @@ # mace 0.0.22 vs rocksdb 10.4.2 -## insert performance (sequential) -![mace_insert](./scripts/mace_insert.png) +## sequential insert +![mace__sequential_insert](./scripts/mace_sequential_insert.png) -![rocksdb_insert](./scripts/rocksdb_insert.png) +![rocksdb_sequential_insert](./scripts/rocksdb_sequential_insert.png) + +## random insert +![mace_random_insert](./scripts/mace_random_insert.png) + +![rocksdb_random_insert](./scripts/rocksdb_random_insert.png) --- -## random get performance (warm get) +## random get (warm get) ![mace_get](./scripts/mace_get.png) @@ -21,7 +26,7 @@ ![rockdb_mixed](./scripts/rocksdb_mixed.png) -# sequential scan perfomance (warm scan) +# sequential scan (warm scan) ![mace_scan](./scripts/mace_scan.png) diff --git a/rocksdb/main.cpp b/rocksdb/main.cpp index 75a0be2..928dea1 100644 --- a/rocksdb/main.cpp +++ b/rocksdb/main.cpp @@ -282,6 +282,13 @@ int main(int argc, char *argv[]) { return args.mode == "insert" ? 100 : 0; }(); uint64_t ops = total_op.load(std::memory_order_relaxed) / b.elapse_sec(); + if (args.mode == "insert") { + if (args.random) { + args.mode = "random_insert"; + } else { + args.mode = "sequential_insert"; + } + } fmt::println("{},{},{},{},{},{},{}", args.mode, args.threads, args.key_size, args.value_size, ratio, (uint64_t) ops, (uint64_t) b.elapse_ms()); db->ReleaseSnapshot(snapshot); diff --git a/scripts/mace.sh b/scripts/mace.sh index 78b98a0..6cb0a8c 100755 --- a/scripts/mace.sh +++ b/scripts/mace.sh @@ -24,6 +24,15 @@ function samples() { do for ((k = 0; k < ${#mode[@]}; k += 1)) do + if [ "${mode[k]}" == "insert" ] + then + ./target/release/kv_bench --path $db_root --threads $i --iterations $cnt --mode ${mode[k]} --key-size ${kv_sz[j]} --value-size ${kv_sz[j+1]} --random + if test $? -ne 0 + then + echo "${mode[k]} threads $i ksz ${kv_sz[j]} vsz ${kv_sz[j+1]} random fail" + exit 1 + fi + fi ./target/release/kv_bench --path $db_root --threads $i --iterations $cnt --mode ${mode[k]} --key-size ${kv_sz[j]} --value-size ${kv_sz[j+1]} if test $? -ne 0 then diff --git a/scripts/mace_get.png b/scripts/mace_get.png index f82d545..76f706b 100644 Binary files a/scripts/mace_get.png and b/scripts/mace_get.png differ diff --git a/scripts/mace_insert.png b/scripts/mace_insert.png deleted file mode 100644 index 2ad565c..0000000 Binary files a/scripts/mace_insert.png and /dev/null differ diff --git a/scripts/mace_mixed.png b/scripts/mace_mixed.png index b53985d..1014e28 100644 Binary files a/scripts/mace_mixed.png and b/scripts/mace_mixed.png differ diff --git a/scripts/mace_random_insert.png b/scripts/mace_random_insert.png new file mode 100644 index 0000000..ad02a08 Binary files /dev/null and b/scripts/mace_random_insert.png differ diff --git a/scripts/mace_scan.png b/scripts/mace_scan.png index 5680fb4..6575d50 100644 Binary files a/scripts/mace_scan.png and b/scripts/mace_scan.png differ diff --git a/scripts/mace_sequential_insert.png b/scripts/mace_sequential_insert.png new file mode 100644 index 0000000..b418617 Binary files /dev/null and b/scripts/mace_sequential_insert.png differ diff --git a/scripts/rocksdb.sh b/scripts/rocksdb.sh index 46a3314..fb3031a 100755 --- a/scripts/rocksdb.sh +++ b/scripts/rocksdb.sh @@ -23,13 +23,22 @@ function samples() { do for ((k = 0; k < ${#mode[@]}; k += 1)) do + if [ "${mode[k]}" == "insert" ] + then + ./build/release/rocksdb_bench --path $db_root --threads $i --iterations $cnt --mode ${mode[k]} --key-size ${kv_sz[j]} --value-size ${kv_sz[j+1]} --random 1 + if test $? -ne 0 + then + echo "${mode[k]} threads $i ksz ${kv_sz[j]} vsz ${kv_sz[j+1]} random fail" + exit 1 + fi + fi ./build/release/rocksdb_bench --path $db_root --threads $i --iterations $cnt --mode ${mode[k]} --key-size ${kv_sz[j]} --value-size ${kv_sz[j+1]} if test $? -ne 0 then echo "${mode[k]} threads $i ksz ${kv_sz[j]} vsz ${kv_sz[j+1]} fail" exit 1 fi - done + done done done } diff --git a/scripts/rocksdb_get.png b/scripts/rocksdb_get.png index dc760b6..3e44031 100644 Binary files a/scripts/rocksdb_get.png and b/scripts/rocksdb_get.png differ diff --git a/scripts/rocksdb_insert.png b/scripts/rocksdb_insert.png deleted file mode 100644 index 31f8f43..0000000 Binary files a/scripts/rocksdb_insert.png and /dev/null differ diff --git a/scripts/rocksdb_mixed.png b/scripts/rocksdb_mixed.png index 5336d4b..e676087 100644 Binary files a/scripts/rocksdb_mixed.png and b/scripts/rocksdb_mixed.png differ diff --git a/scripts/rocksdb_random_insert.png b/scripts/rocksdb_random_insert.png new file mode 100644 index 0000000..2adb68d Binary files /dev/null and b/scripts/rocksdb_random_insert.png differ diff --git a/scripts/rocksdb_scan.png b/scripts/rocksdb_scan.png index 8c76816..e447e0e 100644 Binary files a/scripts/rocksdb_scan.png and b/scripts/rocksdb_scan.png differ diff --git a/scripts/rocksdb_sequential_insert.png b/scripts/rocksdb_sequential_insert.png new file mode 100644 index 0000000..c8e753d Binary files /dev/null and b/scripts/rocksdb_sequential_insert.png differ diff --git a/src/main.rs b/src/main.rs index a24f8ea..9013ab4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -52,7 +52,7 @@ fn main() { Logger::init().add_file("/tmp/x.log", true); log::set_max_level(log::LevelFilter::Info); } - let args = Args::parse(); + let mut args = Args::parse(); let path = Path::new(&args.path); @@ -217,6 +217,13 @@ fn main() { } else { 0 }; + if args.mode == "insert" { + if args.random { + args.mode = "random_insert".into(); + } else { + args.mode = "sequential_insert".into(); + } + } eprintln!( "{},{},{},{},{},{},{}", args.mode,