产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

为什么 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:281145

评论

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

win版jprofiler(Java性能分析工具) v14.0.3 特别版

iMac小白

全球八大云厂商,谁的RDS MySQL性能最强?

NineData

腾讯云 AWS 华为云 云厂商 RDS MySQL性能测试

什么是文生图?

测吧(北京)科技有限公司

测试

人工智能文生图技术介绍

霍格沃兹测试开发学社

Vectorworks 2023 mac v2023 SP2激活版 3D建筑设计

理理

AI 倒贴钱也不好用,是因为没有「操作系统」

MatrixOrigin

数据库 AI 算力

win版Radiant Photo(照片编辑美化软件)v1.3.1特别版

iMac小白

Eudic欧路词典 for Mac 专业的翻译软件 Eudic欧路词典下载安装

理理

做软件测试需要懂代码吗?

禅道项目管理

软件测试 测试人员 测试面试

实力!云起无垠晋级“第九届安全创客汇”年度10强

云起无垠

Prompt Tuning:大模型微调实战

百度开发者中心

人工智能 深度学习 大模型

微信多开 WechatTweak for Mac(微信多开、消息防撤回工具)

理理

制造企业为什么必须数字化转型?

万界星空科技

数字化转型 数字化 智能工厂 mes 万界星空科技

win版WonderFox HD Video Converter Factory Pro(高清视频转换软件) v27.5 便携版

iMac小白

win版IDimager Photo Supreme 2024(图片管理软件) v2024.1激活版

iMac小白

阿里云入选Gartner「边缘分发平台市场指南」代表厂商

MasterInTech

CDN 阿里云; 边缘云

疯狂裁!大厂保利润的手段,中小企业学得来吗?

ToB行业头条

炫酷JavaScript文本时钟

南城FE

JavaScript 前端

一文带你理解透MyBatis源码

华为云开发者联盟

Java JVM mybatis 华为云 华为云开发者联盟

win版Syncovery Premium(备份数据和同步工具) v10.14.13特别版

iMac小白

Redis Desktop Manager for Mac(Redis桌面管理工具)v2022.5.0中文激活版

理理

win版Driver Talent Pro (驱动人生) v8.1.11.46 特别版

iMac小白

推动AI“产业实用”的腾讯云,不可小视

ToB行业头条

Navicat for MySQL Mac v16.3.4汉化版 数据库管理开发工具

理理

人工智能文生图介绍

测试人

人工智能 软件测试 AIGC

BELLE-开源中文对话大模型

百度开发者中心

#人工智能 #大模型

AI时代下的智能商品计划管理

第七在线

合约交易系统设计与开发

区块链开发团队DappNetWork

MatrixOne→MatrixOS:矩阵起源的创业史即将用“AI Infra”和“AI Platform”书写新章程

MatrixOrigin

数据库 AI 云原生

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