-
Notifications
You must be signed in to change notification settings - Fork 124
Description
Comprehensive LMDB benchmarking has revealed a ~10% write performance regression in LMDB 0.9.20+ compared to 0.9.17 and 0.9.18.
Write Performance
| Tag | ms/op | vs 0.9.17 | Maven Central |
|---|---|---|---|
| LMDB_0.9.17 | 75.790 | baseline | N/A |
| LMDB_0.9.18 | 74.909 | -1.2% | 0.9.18-1 |
| LMDB_0.9.19 | 81.404 | +7.4% | 0.9.19-1 |
| LMDB_0.9.20 | 83.459 | +10.1% | 0.9.20-1 |
| LMDB_0.9.21 | 83.237 | +9.8% | 0.9.21-1 |
| LMDB_0.9.22 | 83.027 | +9.5% | 0.9.22-1 |
| LMDB_0.9.23 | 82.870 | +9.3% | 0.9.23-1 |
| LMDB_0.9.24 | 82.952 | +9.4% | 0.9.24-1 |
| LMDB_0.9.27 | 82.989 | +9.5% | N/A |
| LMDB_0.9.28 | 83.025 | +9.5% | N/A |
| LMDB_0.9.29 | 83.063 | +9.6% | 0.9.29-1 |
| LMDB_0.9.30 | 83.237 | +9.8% | N/A |
| LMDB_0.9.31 | 88.419 | +16.7% | N/A |
| LMDB_0.9.33 | 83.304 | +9.9% | 0.9.33-2 |
| LMDB_0.9.33 | - | - | 0.9.33-3 |
The write regression has been reported upstream to LMDB in ITS#10406.
Read Performance
All read benchmarks show consistent stability (or slight improvement) in 0.9.33 vs 0.9.17.
Using Older LMDB Versions
As indicated above, older versions of LMDB are now packaged as org.lmdbjava:native artifacts which are compatible with LmdbJava. While it is strongly recommended to always use the native artifact that is a transitive dependency of org.lmdbjava:lmdbjava, users encountering unacceptably slow write pathways may prefer to explicitly declare an older native artifact version to achieve better write performance:
<dependency>
<groupId>org.lmdbjava</groupId>
<artifactId>lmdbjava</artifactId>
<version><!-- latest LmdbJava version --></version>
</dependency>
<dependency>
<groupId>org.lmdbjava</groupId>
<artifactId>native</artifactId>
<version>0.9.18-1</version>
</dependency>As always, users can alternatively use the lmdbjava.native.lib system property to specify any arbitrary LMDB system library and ignore those available via LmdbJava artifacts.
New Benchmark Suite
This work also motivated the creation of a new benchmark not mentioned in #262. This new benchmark has the usual smoketest and benchmark profiles, nightly execution of the smoketest profile, plus dedicated result websites at https://lmdb-benchmark.lmdbjava.org/ and https://lmdb-smoketest.lmdbjava.org/. This will provide a quantifiable approach to isolating future LMDB library performance from LmdbJava overhead.