内存中 B 树的某些 C++ 实现(例如谷歌 btree)和 LMDB(不考虑 LMDB 的所有功能,例如事务、隔离、共享访问等)之间的性能差异(读/写)是什么? .)?
最佳答案
其架构师 Howard Chu 的 2014 lmdb design presentation 涵盖了 lmdb
的设计和权衡。
总结一下:lmdb
是一个写时复制、自底向上更新、双缓冲、b 树,当它与其他考虑因素发生冲突时,实现总是倾向于简单。
智能设计选择 使其成为目前性能最高且抗损坏的 B 树实现之一。
lmdb
依赖于底层操作系统进行缓存 显然,这些选择意味着
lmdb
对复杂场景不友好,例如:lmdb
支持更简单的多读取器和单写入器方案 完整(超过 100 页)的演示文稿中还有更多内容。以上只是对
lmdb
精神的总结。lmdb
在著名的开源项目(如 Open LDAP 和 Memcached)中用作核心存储引擎,在这两种情况下,与替代方案相比,都观察到了数量级的加速,如 micro-benchmark results 所示。
关于lmdb - LMDB的内部设计有什么特别之处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35279756/