【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

相关文章

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

Mysql中InnoDB与MyISAM索引差异详解(最新整理)

《Mysql中InnoDB与MyISAM索引差异详解(最新整理)》InnoDB和MyISAM在索引实现和特性上有差异,包括聚集索引、非聚集索引、事务支持、并发控制、覆盖索引、主键约束、外键支持和物理存... 目录1. 索引类型与数据存储方式InnoDBMyISAM2. 事务与并发控制InnoDBMyISAM

StarRocks索引详解(最新整理)

《StarRocks索引详解(最新整理)》StarRocks支持多种索引类型,包括主键索引、前缀索引、Bitmap索引和Bloomfilter索引,这些索引类型适用于不同场景,如唯一性约束、减少索引空... 目录1. 主键索引(Primary Key Index)2. 前缀索引(Prefix Index /

mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

《mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据》文章主要介绍了如何从.frm和.ibd文件恢复MySQLInnoDB表结构和数据,需要的朋友可以参... 目录一、恢复表结构二、恢复表数据补充方法一、恢复表结构(从 .frm 文件)方法 1:使用 mysq

MySQL进阶之路索引失效的11种情况详析

《MySQL进阶之路索引失效的11种情况详析》:本文主要介绍MySQL查询优化中的11种常见情况,包括索引的使用和优化策略,通过这些策略,开发者可以显著提升查询性能,需要的朋友可以参考下... 目录前言图示1. 使用不等式操作符(!=, <, >)2. 使用 OR 连接多个条件3. 对索引字段进行计算操作4

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 多重索引的分组聚