What is special about internal design of LMDB?

醉酒当歌 提交于 2019-12-06 01:27:21
arielf

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.

  • copy-on-write means that data is never overwritten avoiding many possible corruption scenarios
  • bottom-up updates from leaf to root make the root update equivalent to a commit
  • double buffering of past versions keeps only the last-two roots in the db file
  • complex multi-level caching schemes are avoided - lmdb relies on the underlying OS for caching
  • The whole code base is very small compared to other DBs avoiding CPU cache misses

Obviously, these choices mean that lmdb is not friendly to complex scenarios such as:

  • multi-version DB rollbacks (only last 2 are available)
  • long-lived transactions and delayed commits: these lead to append-only behavior and potentially unlimited growth of the db file
  • multiple concurrent writers: lmdb favors simpler multiple readers and single writer schemes

There'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.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!