gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:37:00 27 4
gpt4 key购买 nike

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

最佳答案

其架构师 Howard Chu 的 2014 lmdb design presentation 涵盖了 lmdb 的设计和权衡。

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

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

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

  • 显然,这些选择意味着 lmdb 对复杂场景不友好,例如:
  • 多版本 DB 回滚(仅最后 2 个可用)
  • 长期事务和延迟提交:这些导致仅追加行为和数据库文件
  • 的潜在无限增长
  • 多个并发写入器:lmdb 支持更简单的多读取器和单写入器方案

  • 完整(超过 100 页)的演示文稿中还有更多内容。以上只是对 lmdb 精神的总结。
    lmdb 在著名的开源项目(如 Open LDAP 和 Memcached)中用作核心存储引擎,在这两种情况下,与替代方案相比,都观察到了数量级的加速,如 micro-benchmark results 所示。

    关于lmdb - LMDB的内部设计有什么特别之处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35279756/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com