Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

LMDB Write Performance Regression and Native Library Versioning #277

Copy link
Copy link
@bp-alex

Description

@bp-alex
Issue body actions

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.

Reactions are currently unavailable

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    Morty Proxy This is a proxified and sanitized view of the page, visit original site.