一、B or B+ ?
对于mongodb的索引实现,我目前都不太确定是B+树,还是B树,因为mongodb的官网文档中明确阐明应用B树实现的:
然而云栖上有人说问过WiredTiger的作者确认用的也是B+树:
本文并不想八卦谁对谁错,只单纯的剖析mongodb实践上,用哪一种数据结构实现索引,更适宜,只代表自己观点,说的不对,欢送斧正
二、B树与B+树各自的优缺点
B+是B树的进阶型,不同于B树的非叶子节点能够存储数据(或者是数据的物理地址),B+树中所有的数据都寄存在叶子节点中,因而,查问速度十分稳固,具体比照见我的这篇[博客]。(https://segmentfault.com/a/11...
三、针对mongodb这种非sql数据库,哪一种数据结构更快?
耗时一上午检索,找到了几种mongodb应用B树的"强行"解释,我将其归为如下:
既然是非sql数据库,就应该好好利用其反对文本\简单数据类型的劣势,通过表构造的设计,保障数据库的使用者,通过单条查问就能拿到数据,而B树的遍历查问效率尽管不如B+树,然而因为非叶子节点间接就能拿到并返回数据,因而单条查问速度是快于B树的
典型例子见这2篇博客1|博客2
以下是自己观点:
B树的单条查问的确是会更快,然而以自己所经验的我的项目教训来说,mongodb的表不会都是单条查问的场景,更多的应用场景还是基于几个属性的遍历,当然这能够通过创立复合索引去放慢查找速度,然而创立多个索引,自身就会极大的升高数据库写的性能,创立多个索引之后读的性能也不会比照B+树有更多的劣势。
综上,如果自己作为引擎的开发者,会抉择B+树作为实现索引的数据结构,只管这就义了一部分单条查问的性能,然而罕用场景下查问的性能更为牢靠。