Up to date Rust bindings for LMDB
crates.io
crates.io
Still, I'd really like to make use of it. But for what? Caching?
Key-value stores are primitives. Sometimes your use case needs nothing more elaborate than this primitive. Sometimes you have no choice but to limit yourself to that primitive because there are no resources for anything more complex. Often you're using it as a component of a larger storage scheme.
Mail systems are an example where you're forever looking up senders and/or recipients for some policy. Recently I've dealt with GeoIP stuff, where you're constantly resolving network addresses against a huge map. Bloom filters are a great use of a key-value store for large data sets.
Understand that often there is a lot of custom code around queries and other operations that use key-value stores. You might, for example, have some tuple that can map to multiple values in a sparse map. In that case you can iterate over variants of the tuple (selectively remove, normalize or otherwise alter parts of it,) and make multiple queries according to some precedence rule until you get a hit (or not.) There are many such tricks that will greatly extend the utility of a map.
LMDB in particular is worth understanding, even if you never use it. It has an extremely simple design that essentially makes the OS page cache into an ACID database with concurrent readers that are not blocked by writes or require coordination, and has no "transaction log." Pretty astonishing given that it boils down to about 10K LOC.
The only issue with LMDB is a size reservation for a db file.
some of the existing crates had the -sys suffix but it didn't seem like they were actually checking for it on the system (i'm not sure that LMDB is installed by default on most systems anyway?) so opted to not use it.
chose to keep the version in step with LMDB (current looks like 0.9.70 in the lmdb.h).
will regenerate anytime i become aware of a version bump for LMDB.
Latest is 0.9.31.
Pure speculation on my part: maybe people are choosing Rust-based embedded key value stores like sled or redb?
Please add READMEs to your projects with appropriate links, folks.
https://crates.io/crates/liblmdb <-- says it is bindings for LMDB
... which links to the repo
https://github.com/ordinarylabs/liblmdb
Which has a link to the LMDB repo here (just a submodule) ...
https://github.com/LMDB/lmdb/tree/9c9d34558cc438f99aebd1ab58...
Which has no info about the project, but links to
https://www.openldap.org/software/repo.html
Which also has no info about the project, but has an LMDB link which leads to
Which finally explains:
> Symas LMDB is an extraordinarily fast, memory-efficient database we developed for the OpenLDAP Project. With memory-mapped files, LMDB has the read performance of a pure in-memory database while retaining the persistence of standard disk-based databases.
> Bottom line, with only 32KB of object code, LMDB may seem tiny. But it’s the right 32KB. Compact and efficient are two sides of a coin; that’s part of what makes LMDB so powerful.
There's also a wikipage:
https://en.wikipedia.org/wiki/Lightning_Memory-Mapped_Databa...
I also saw "LMDB", didn't knew what it was, searched LMDB on Kagi, got https://en.wikipedia.org/wiki/Lightning_Memory-Mapped_Databa... as the first hit. Bing and Google also has it in the top, seems to be relatively known.