Benchmark for 'Multi-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 - Multi-thread Read Benchmarks
- Multi-thread read runs reuse the same controlled JVM flags, hardware, and storage directory preparation as the other benchmark suites. Each trial starts from a clean directory provided through the
dir system property, then preloads the dataset before measurement begins.
- Setup inserts 10 000 000 deterministic key/value pairs before the benchmark starts. Keys are generated by
HashDataProvider from numeric indexes, while values remain the constant text "opice skace po stromech".
- Each benchmark thread performs the same read operation in two JMH modes during the same run:
SampleTime to capture latency distribution and Throughput to capture aggregate operations per second.
- The configured thread count for this result set is 4 benchmark threads, matching the
threads4 suffix used by the generated result files.
- Read traffic mixes hits and misses using the same policy as the single-thread read suite: 80% existing keys and 20% guaranteed misses, controlled by
benchmarkMissProbability=0.2.
- Warm-up uses 10 iterations of 20 seconds, followed by 25 measurement iterations of 20 seconds, so the numbers reflect sustained concurrent lookup behavior rather than a short burst.
- After measurements finish, resources are closed and the populated directories remain on disk so report generation can capture occupied space and CPU usage.
- Tests executed on Mac mini 2024, 16 GB, macOS 15.6.1 (24G90).
Data for Throughtput Chart
| Engine |
Threads |
Throughput [ops/s] |
CPU Usage |
| ChronicleMap |
4 |
3 729 873 |
11% |
| H2 |
4 |
2 926 536 |
12% |
| HestiaStoreBasic |
4 |
19 258 |
43% |
| HestiaStoreCompress |
4 |
26 836 |
20% |
| LevelDB |
4 |
212 182 |
12% |
| MapDB |
4 |
254 472 |
13% |
| RocksDB |
4 |
575 629 |
12% |
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.75 |
0.875 |
1.166 |
1.666 |
10.656 |
13.904 |
26.528 |
79.872 |
| H2 |
1.332 |
1.54 |
1.708 |
1.832 |
2.208 |
2.58 |
5.584 |
20.768 |
| HestiaStoreBasic |
12.16 |
307.712 |
346.624 |
423.936 |
802.816 |
1 128.448 |
3 137.536 |
26 705.92 |
| HestiaStoreCompress |
235.264 |
262.656 |
283.136 |
299.008 |
475.648 |
506.88 |
860.16 |
24 051.712 |
| LevelDB |
12.08 |
25.824 |
38.336 |
54.592 |
77.952 |
90.624 |
114.56 |
400.896 |
| MapDB |
15.2 |
16.896 |
17.824 |
18.4 |
21.952 |
32.288 |
60.224 |
326.144 |
| RocksDB |
6.912 |
7.536 |
8.736 |
9.072 |
9.904 |
10.784 |
17.856 |
38.272 |