Benchmark for 'Single-thread read' operation
Chart

Percentile Chart
This chart shows the latency percentile curve for the benchmarked engines. The X axis runs from p50 to p99.99, and the Y axis uses a logarithmic latency scale so tail-latency differences are easier to compare.

Test Conditions - Single-thread Read Benchmarks
- Read-focused runs reuse the same controlled JVM, hardware, and JVM flag configuration as the write suite. Each trial prepares a clean directory pointed to by the
dir system property before preloading the dataset.
- Setup inserts 10 000 000 deterministic key/value pairs (seed
324432L) so every engine serves identical data. Keys come from HashDataProvider, while values remain the constant string "opice skace po stromech".
- Warm-up iterations issue random lookups (80 % hits, 20 % misses) to trigger JIT compilation, cache population, and to ensure index structures have settled before measurements start.
- Each run exposes the same single-threaded read loop in two JMH modes:
SampleTime to capture per-operation latency distribution and Throughput to capture sustained lookup performance over 20-second windows.
- Each benchmark keeps a consistent random sequence per iteration, ensuring engines experience the same access pattern and allowing apples-to-apples comparisons.
- After measurements finish, readers close their resources but the populated directories remain on disk so sizes can be captured by the reporting scripts.
- Tests executed on Mac mini 2024, 16 GB RAM, macOS 15.6.1 (24G90).
Data for Throughtput Chart
| Engine |
Score [ops/s] |
Mean [us/op] |
p50 [us/op] |
p95 [us/op] |
p99 [us/op] |
Occupied space |
CPU Usage |
| ChronicleMap |
2 202 147 |
0.469 |
0.5 |
0.583 |
0.666 |
2.03 GB |
8% |
| H2 |
912 427 |
1.11 |
1.082 |
1.5 |
1.708 |
8 KB |
9% |
| HestiaStoreBasic |
7 666 |
131.789 |
6.704 |
265.728 |
512.512 |
559.55 MB |
11% |
| HestiaStoreCompress |
8 064 |
120.313 |
3.872 |
244.224 |
391.168 |
335.55 MB |
12% |
| LevelDB |
253 469 |
4.232 |
4.084 |
6.208 |
7.576 |
363.36 MB |
8% |
| MapDB |
201 583 |
4.964 |
5.08 |
6.08 |
6.496 |
1.3 GB |
7% |
| RocksDB |
156 017 |
6.465 |
6.416 |
8.528 |
9.28 |
324.23 MB |
8% |
Source Data for Percentile Chart
| Engine |
p50 [us/op] |
p75 [us/op] |
p90 [us/op] |
p95 [us/op] |
p99 [us/op] |
p99.5 [us/op] |
p99.9 [us/op] |
p99.99 [us/op] |
| ChronicleMap |
0.5 |
0.5 |
0.542 |
0.583 |
0.666 |
0.708 |
0.959 |
6.12 |
| H2 |
1.082 |
1.25 |
1.374 |
1.5 |
1.708 |
2 |
3.164 |
9.696 |
| HestiaStoreBasic |
6.704 |
228.096 |
238.592 |
265.728 |
512.512 |
525.312 |
613.376 |
23 691.264 |
| HestiaStoreCompress |
3.872 |
217.856 |
225.792 |
244.224 |
391.168 |
397.824 |
496.64 |
23 920.64 |
| LevelDB |
4.084 |
4.496 |
5.832 |
6.208 |
7.576 |
8.288 |
10.864 |
365.056 |
| MapDB |
5.08 |
5.624 |
5.912 |
6.08 |
6.496 |
7.04 |
8.832 |
21.664 |
| RocksDB |
6.416 |
7.04 |
8.208 |
8.528 |
9.28 |
9.904 |
12.528 |
25.6 |