| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Just want the latest results?
This is a JMH benchmark of open source, embedded, memory-mapped, key-value stores available from Java:
(**) does not support ordered keys, so iteration benchmarks not performed
The benchmark itself is adapted from LMDB's db_bench_mdb.cc, which in turn is adapted from LevelDB's benchmark.
The benchmark includes:
Byte arrays (byte[]) are always used for the keys and values, avoiding any serialization library overhead. For those libraries that support compression, it is disabled in the benchmark. In general any special library features that decrease latency (eg batch modes, disable auto-commit, disable journals, hint at expected data sizes etc) were used. While we have tried to be fair and consistent, some libraries offer non-obvious tuning settings or usage patterns that might further reduce their latency. We do not claim we have exhausted every tuning option every library exposes, but pull requests are most welcome.
Clone this repository and build:
mvn clean packageThis benchmark uses POSIX calls to accurately determine consumed disk space and only depends on Linux-specific native library wrappers where a range of such wrappers exists. Operation on non-Linux operating systems is unsupported.
Use the run-libs.sh script to compare different key-value store libraries:
# Quick smoke test (1K entries, fast verification)
./run-libs.sh smoketest
# Full benchmark using 25% of system RAM (default)
./run-libs.sh benchmark
# Full benchmark using 50% of system RAM
./run-libs.sh benchmark 50The benchmark auto-scales based on available RAM and caps at 1 million entries. Results are written to target/benchmark-libs/.
File handle limit: Benchmark mode requires at least 1 million file handles for RocksDB and LevelDB LSM operations:
ulimit -n 1000000
./run-libs.sh benchmarkThe script will check and abort if the limit is too low.
Resumption: The script skips completed runs by checking for existing result files. For a fresh run, remove the output directory:
rm -rf target/benchmark-libs
./run-libs.sh benchmarkLong-running benchmarks: For multi-hour benchmarks, redirect output to a log file and monitor with tail:
# Start the benchmark with output redirected
./run-libs.sh benchmark > log.txt 2>&1
# Monitor progress in another terminal
tail -f log.txtUse the run-vers.sh script to test LmdbJava performance across versions:
# Quick smoke test (1K entries, fast verification)
./run-vers.sh smoketest
# Full benchmark using 25% of system RAM (default)
./run-vers.sh benchmark
# Full benchmark using 50% of system RAM
./run-vers.sh benchmark 50This tests selected LmdbJava versions from Maven Central plus current development branches to identify performance regressions. Results are written to target/benchmark-vers/.
Resumption: The script skips completed versions by checking for existing result files. For a fresh run, remove the output directory:
rm -rf target/benchmark-vers
./run-vers.sh benchmarkUse the run-lmdb.sh script to test LmdbJava (master) performance across different LMDB library versions:
# Quick smoke test (1K entries, fast verification)
./run-lmdb.sh smoketest
# Full benchmark using 25% of system RAM (default)
./run-lmdb.sh benchmark
# Full benchmark using 50% of system RAM
./run-lmdb.sh benchmark 50This tests LmdbJava master against 9 different LMDB library versions (0.9.18-0.9.33) to isolate LMDB native library performance characteristics from LmdbJava wrapper code. Results are written to target/benchmark-lmdb/.
Resumption: The script skips completed LMDB versions by checking for existing result files. For a fresh run, remove the output directory:
rm -rf target/benchmark-lmdb
./run-lmdb.sh benchmarkUse the run-all.sh script to run all three benchmark suites sequentially (designed for overnight runs):
# Run all benchmarks using 25% of system RAM (default)
./run-all.sh
# Run all benchmarks using 50% of system RAM
./run-all.sh 50This will run LMDB library comparison, library comparison and version regression benchmarks, all in full benchmark mode with 120s iterations. Expect several hours of runtime depending on your system.
After running library comparison benchmarks, generate a comprehensive report:
./report-libs.shAfter running version regression tests, generate a version comparison report:
./report-vers.shAfter running LMDB benchmarks, generate an LMDB performance report:
./report-lmdb.shReports generate:
After generating a report, you can publish it to Cloudflare Pages:
export CLOUDFLARE_API_TOKEN="your-token"
export CLOUDFLARE_ACCOUNT_ID="your-account-id"
./publish-results.shThe script automatically detects:
Reports are published to:
Workflow for curated reports:
The run-bisect.sh script uses bisection to find the commit that introduced a performance regression:
./run-bisect.shConfigure the bisection by editing variables at the top of the script:
The script:
Results are saved in bisect/results/ with a chronologically-sorted summary report showing scores and percentage changes. To re-run with fresh benchmarks, delete bisect/results/*.json.
The run-dev.sh script enables rapid testing of local LmdbJava changes without full bisection overhead:
./run-dev.shThis script:
To match full bisection configuration, edit the script and change:
Use this for iterative development and verification of performance fixes before committing.
Update all dependency and plugin versions:
mvn versions:update-propertiesIssues are disabled for this repository. Please report any issues or questions on the LmdbJava issue tracker.
Contributions are welcome! Please see the LmdbJava project's Contributing Guidelines.
This project is licensed under the Apache License, Version 2.0.
| Back | FazBrowse Home | New Git URL |