【Mongo】索引结构

2024-05-27 19:20
文章标签 索引 结构 mongo

本文主要是介绍【Mongo】索引结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

结论

Mongo3.2版本开始,索引的结构默认是B+树。

起因

面试的时候,面试官问为什么Mongo DB底层使用B树而不是B+树?
面试完赶紧恶补,结果发现面试官好像给我埋了个坑。。。

MongoDB官方描述:
在这里插入图片描述

翻译一下就是: “MongoDB 索引使用B树数据结构”,那问题来了,为什么Mongo DB会使用B树而不是B+树呢???

首先看一下MongoDB目前支持的存储引擎。

存储引擎

WiredTiger存储引擎

 
自 MongoDB 3.2 以后,默认的存储引擎为 WiredTiger 存储引擎。
Mongo官网相关文档
在这里插入图片描述
 
 
 
 
然后我找到WiredTiger 存储引擎的文档,发现WiredTiger 存储引擎使用的B+树的数据结构在内存中维护表的数据:”将 B 树的节点称为页面。内部页面仅包含密钥。叶页存储键和值。“

WiredTiger 存储引擎官网相关文档
在这里插入图片描述

到这问题就有点奇怪了,Mongo默认的存储引擎就是WiredTiger存储引擎,但WiredTiger存储引擎使用的是B+树,那为什么Mongo说自己用的B树呢???然后看了一下支持的另一个In-Memory存储引擎.

In-Memory存储引擎

In-Memory 存储引擎在 MongoDB Enterprise 中可用。它不是将文档存储在磁盘上,而是将它们保留在内存中以获得更可预测的数据延迟。
但注意: In-Memory 存储引擎不维护任何磁盘数据,包括配置数据, 索引、用户凭据等
在这里插入图片描述

总结

Mongo DB官方说索引使用B树,但3.2版本开始默认的存储引擎是WiredTiger,然而WiredTiger存储引擎使用的是B+树。并且Mongo DB支持的另一个存储引擎:In-Memory存储引擎,并不维护索引。

没错,真相只有一个,那就Mongo DB官方惜字如金,说的是广义的B树,实际上是B树的升级版B+树。

PS: 需要注意的是,虽然Mongo DB用的是B+树,MySQL用到的也是B+树,不过貌似Mongo DB的B+树的叶子节点没有形成一个双向链表,即不支持范围查询。

这篇关于【Mongo】索引结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1008366

相关文章

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下

Pandas中多重索引技巧的实现

《Pandas中多重索引技巧的实现》Pandas中的多重索引功能强大,适用于处理多维数据,本文就来介绍一下多重索引技巧,具有一定的参考价值,感兴趣的可以了解一下... 目录1.多重索引概述2.多重索引的基本操作2.1 选择和切片多重索引2.2 交换层级与重设索引3.多重索引的高级操作3.1 多重索引的分组聚

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可