MongoDB底层数据结构常用命令
Posted _less is more
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB底层数据结构常用命令相关的知识,希望对你有一定的参考价值。
1、数据结构
下图来自于StackOverflow
如上图,左边是B树(中间那是一杠,不是减号),右边是B+树
- B树【MongoDB】
每个节点都有key和value,因此没有重复的key和value。但查找时会有更多【缓存未命中】的情况,因为当前遍历到的key即便不是我们要的,他对应的数据指针也会一起进入内存,导致内存中的key数量会比B+树少。
最快访问到一个想要节点的可以是O(1),因此对于频繁访问的数据放到离根节点越近的地方,访问会越快,而B+树没有这个优势,因为B+中的内部节点只有key没有对应的data指针。
由于所有数据分布于整颗树上的每一个节点,因此如果要遍历一遍,需要遍历树中所有层,这样的遍历需要回溯,消耗更多栈空间。
- B+树【mysql】
内部节点(非叶节点)只有key没有value,因此在内存中,一个内存页可以存储更多的key,因此在查找时比较key大小的时候,【缓存未命中】的情况会更少,因为cache中会有更多的key。
叶节点包含所有的完整的key和相对应的value,因此内部节点的key算是重复,但这样的重复有利于快速查找。
叶节点指针互相连接,因此遍历一遍只需要线性地依次查找所有的叶节点即可。对于MySQL需要访问一个区间数据的情况能提供更高效的查找。
本质区别
- B树每个节点都有key和对应数据的指针;B+树只有叶节点才有key和对应数据的指针,内部节点只有用于查找的key
- B树的叶节点之间没有指针;B+树叶节点之间有指针
2、BSON和JSON
JSON格式很常见
"_id": 1,
"name": "first" : "John", "last" : "Backus" ,
"contribs": [ "Fortran", "ALGOL", "Backus-Naur Form", "FP" ]
而BSON仅仅只是二进制版本的JSON,因此不具有可读性,像这样
\\x31\\x00\\x00\\x00
\\x04BSON\\x00
\\x26\\x00\\x00\\x00
\\x02\\x30\\x00\\x08\\x00\\x00\\x00awesome\\x00
\\x01\\x31\\x00\\x33\\x33\\x33\\x33\\x33\\x33\\x14\\x40
\\x10\\x32\\x00\\xc2\\x07\\x00\\x00
\\x00
\\x00
以上是关于MongoDB底层数据结构常用命令的主要内容,如果未能解决你的问题,请参考以下文章