What would be the performance difference (reads/writes) between some C++ implementation of in-memory B-Tree (for example google btree) and the LMDB (without taking into consideration all the feacures of LMDB such as transactions, isolation, shared access etc.)?
This 2014 lmdb design presentation by its architect Howard Chu covers the design and tradeoffs of lmdb
.
To summarize: lmdb
is a copy-on-write, bottom-up updated, double-buffered, b-tree where the implementation always favors simplicity whenever it clashes with other considerations.
The smart design choices make it one of the highest performance and corruption-resistant B-tree implementations out there.
lmdb
relies on the underlying OS for cachingObviously, these choices mean that lmdb
is not friendly to complex scenarios such as:
lmdb
favors simpler multiple readers and single writer schemesThere's much more in the full (over 100 pages) presentation. The above is just a summary of the spirit of lmdb
.
lmdb
is used as the core storage engine in prominent open source projects such as Open LDAP and Memcached and in both cases speed-ups of orders of magnitude have been observed compared to alternatives as can be seen in micro-benchmark results.