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指针。

由于所有数据分布于整颗树上的每一个节点,因此如果要遍历一遍,需要遍历树中所有层,这样的遍历需要回溯,消耗更多栈空间。

内部节点(非叶节点)只有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底层数据结构常用命令的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB shell操作

Linux常用命令

python | mongodb 常用命令

数据库-mongodb-常用命令

MongoDB常用命令

MongoDB常用命令