写点什么

为什么 MongoDB 使用 B 树 (一)

  • 2019-12-26
  • 本文字数:1182 字

    阅读完需:约 4 分钟

为什么 MongoDB 使用 B 树 (一)

为什么这么设计(Why’s THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实现造成的影响。如果你有想要了解的问题,可以在文章下面留言。


我们在这一系列前面的文章曾经分析过 为什么 MySQL 使用 B+ 树,有读者在文章下面留言,希望能出一个为什么 MongoDB 使用 B 树的对比文章,这是一个比较好的问题,MySQL 和 MongoDB 两种不同类型的数据库使用了相似却不同的数据结构,为什么 MySQL 选择使用 B+ 树而 MongoDB 使用 B 树呢?

概述

MongoDB 是一个通用的、面向文档的分布式数据库1,这是官方对 MongoDB 介绍。区别于传统的关系型数据库 MySQL、Oracle 和 SQL Server,MongoDB 最重要的一个特点就是『面向文档』,由于数据存储方式的不同,对外提供的接口不再是被大家熟知的 SQL,所以被划分成了 NoSQL,NoSQL 是相对 SQL 而言的,很多我们耳熟能详的存储系统都被划分成了 NoSQL,例如:Redis、DynamoDB2 和 Elasticsearch 等。



NoSQL 经常被理解成没有 SQL(Non-SQL)或者非关系型(Non-Relational)3,不过也有人将其理解成不只是 SQL(Not Only SQL)4,深挖这个词的含义和起源可能没有太多意义,这种二次解读很多时候都是为营销服务的,我们只需要知道 MongoDB 对数据的存储方式与传统的关系型数据库完全不同。


MongoDB 的架构与 MySQL 非常类似,它们底层都使用了可插拔的存储引擎以满足用户的不同需求,用户可以根据数据特征选择不同的存储引擎,最新版本的 MongoDB 使用了 WiredTiger 作为默认的存储引擎5



作为 MongoDB 默认的存储引擎,WiredTiger 使用 B 树作为索引底层的数据结构,但是除了 B 树之外,它还支持 LSM 树作为可选的底层存储结构,LSM 树的全称是 Log-structured merge-tree,你可以在 MongoDB 中使用如下所示的命令创建一个基于 LSM 树的集合(Collection)6:


JavaScript


db.createCollection(    "posts",    { storageEngine: { wiredTiger: {configString: "type=lsm"}}})
复制代码


我们在这篇文章中不仅会介绍 MongoDB 的默认存储引擎 WiredTiger 为什么选择使用 B 树而不是 B+ 树,还会对 B 树和 LSM 树之间的性能和应用场景进行比较,帮助各位读者更全面地理解今天的问题。

设计

既然要比较两个不同数据结构与 B 树的差别,那么在这里我们将分两个小节分别介绍 B+ 树和 LSM 树为什么没有成为 WiredTiger 默认的数据结构:


  • 作为非关系型的数据库,MongoDB 对于遍历数据的需求没有关系型数据库那么强,它追求的是读写单个记录的性能;

  • 大多数的数据库面对的都是读多写少的场景,B 树与 LSM 树在该场景下有更大的优势;


上述的两个场景都是 MongoDB 需要面对和解决的,所以我们会在这两个常见场景下对不同的数据结构进行比较。


本文转载自 Draveness 技术博客。


原文链接:https://draveness.me/whys-the-design-mongodb-b-tree


2019-12-26 17:281332

评论

发布
暂无评论
发现更多内容

1024茶思屋直播|TinyEngine跨端实践​:可视化搭建导出鸿蒙ArkTs应用

OpenTiny社区

低代码 OpenTiny 前端开源

一小时内,构建出属于你自己的 Perplexity AI 搜索引擎

智领云科技

开源 实操 Python 代码 Perplexity AI 搜索引擎

2024年西藏等保测评机构名单汇总

行云管家

等保 等保测评 西藏

项目管理这些问题,你是不是忍了很久?

天津汇柏科技有限公司

项目管理 低代码开发 软件定制开发

MariaDB 和 GreatSQL 性能差异背后的真相

GreatSQL

火山引擎数智平台VeDI荣获2024爱分析·数据智能优秀厂商奖

字节跳动数据平台

大数据 数据飞轮

公开课 | AI赋能自动化测试:解锁未来测试新篇章

测试人

人工智能 软件测试

糟糕,当我上班用deepin,被老板看到了我的桌面后......!

nn-30

Linux 操作系统 deepin 桌面应用 桌面

数据为王,实时监控显神威 —— 淘宝商品详情API的电商实战应用

技术冰糖葫芦

API 接口 API 文档 API 测试 pinduoduo API

数据驱动未来:淘宝商品详情API在电商实战中的实时监控力量

代码忍者

API 接口 pinduoduo API

揭秘 IT 成熟度模型:助力企业在数字时代脱颖而出的战略工具

跟YY哥学Jira

ITSM Gartner 成熟度模型

Altair官方文档——HyperMesh模型管理

智造软件

教程 CAE软件 altair Hypermesh

BOE(京东方)携手雷神联合发布全球首款仿生蜂鸟屏 以全新升级ACR技术引领显示产业高端化的升维发展

科技汇

智联招聘×Milvus:向量召回技术提升招聘匹配效率

Zilliz

人工智能 AI Milvus Zilliz 向量数据库

要低代码,但不要低能力,低代码产品能否成为企业的增效神器?

优秀

低代码 低代码平台 低代码平台比较

CNCC | 倒计时3天!CCF-网易雷火联合基金研讨会:议程嘉宾交通参会指南一图掌握

网易伏羲

人工智能 网易伏羲 cncc 具身智能 群体智能

软件测试学习笔记丨Selenium学习笔记:元素定位与操作

测试人

软件测试

鸿蒙网络编程系列28-服务端证书锁定防范中间人攻击示例

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

鸿蒙网络编程系列29-RCP下载到文件和流示例

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

全域旅游平台(源码+文档+部署+讲解)

深圳亥时科技

CST软件如何选择时域求解器的频率范围

思茂信息

仿真软件 cst 电磁仿真

为什么 MongoDB 使用 B 树 (一)_语言 & 开发_Draveness_InfoQ精选文章