LMDB的内部设计有什么特别之处

  • 本文关键字:内部 LMDB lmdb okvs
  • 更新时间 :
  • 英文 :

内存

中B树(例如google btree(和LMDB(不考虑LMDB的所有功能,如事务,隔离,共享访问等(的某些C++实现之间的性能差异(读/写(是什么?

2014年由其建筑师Howard Chu设计的lmdb设计演示涵盖了lmdb的设计和权衡。

总而言之:lmdb 是一个写入时复制、自下而上更新、双缓冲的 b 树,每当它与其他考虑因素发生冲突时,实现总是倾向于简单性。

明智的设计选择 使其成为目前性能最高、抗损坏的 B 树实现之一。

  • 写入时复制意味着数据永远不会被覆盖,避免了许多可能的损坏情况
  • 从叶到根的自下而上的更新使根更新等效于提交
  • 过去版本的双重缓冲仅保留数据库文件中的最后两个根
  • 目录
  • 避免了复杂的多级缓存方案 - lmdb依赖于底层操作系统进行缓存
  • 与其他数据库相比,整个代码库非常小,避免了 CPU 缓存未命中

显然,这些选择意味着lmdb对复杂方案不友好,例如:

  • 多版本数据库回滚(只有最后 2 个可用(
  • 长期事务和延迟提交:这些会导致仅追加行为和数据库文件的潜在无限增长
  • 多个并发写入器:lmdb有利于更简单的多个读取器和单个写入器方案

完整(超过 100 页(演示文稿中还有更多内容。以上只是对lmdb精神的总结。

lmdb被用作Open LDAP和Memcached等著名开源项目的核心存储引擎,在这两种情况下,与微基准测试结果中可以看出的替代方案相比,加速了几个数量级。

相关内容

  • 没有找到相关文章

最新更新