阿里云飞天发布时刻,领先大模型限免,超7000万 tokens免费体验 了解详情
写点什么

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

评论

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

IM即时通讯技术栈与界面设计:WorkPlus的实践与创新

BeeWorks

天润融通助力味多美,AI技术驱动百年品牌服务升级

天润融通

阿里P8精心整理MongoDB+RabbitMQ+Memcached面试题,100%拿offer

程序员高级码农

Java 编程 程序员 java面试 Java面试题

解密时序数据库的未来:TDengine Open Day技术沙龙精彩回顾

TDengine

数据库 tdengine

凭借这份国内最新最全Java八股文(终极版),我成功入职字节T2-2

Summer

Java 编程 程序员 面试 架构师

租用电商云手机的注意事项

Ogcloud

云手机 海外云手机 电商云手机 云手机群控

应用程序开发加速包:12个最佳开放API

幂简集成

API 开放 API

数据可视化的发展趋势

inBuilder低代码平台

数据可视化

深度解析Spring AI:请求与响应机制的核心逻辑

不在线第一只蜗牛

Java spring

SaaS架构:中央库存系统架构设计

不在线第一只蜗牛

架构 SaaS

im即时通讯是什么?

BeeWorks

AI人工智能软件哪个好?30个办公常用的ai工具盘点!

职场工具箱

人工智能 AI 办公软件 AIGC AI生成PPT

观测云采集云资源自定义标签最佳实践

观测云

云计算 云资源

阿里拿38K出来的大佬良心分享,熬夜整理10 万字详细Java面试笔记!

Summer

Java 编程 程序员 面试 架构师

SD-WAN的常见使用案例

Ogcloud

SD-WAN 企业组网 SD-WAN组网 SD-WAN服务商 SDWAN

技术沙龙演讲实录 | 张俊钦:火山引擎边缘智能,联通大模型的物理世界

火山引擎边缘云

智能IoT边缘服务 AI Agent AI Agents 边缘智能

数据分析与AI丨大模型+知识图谱,将企业数据转化为商业价值

Altair RapidMiner

数据分析 知识图谱 #人工智能 altair #大模型

WorkPlus即时通讯(IM)系统:功能解析与企业应用

BeeWorks

Taobao Agent Russia丨俄罗斯淘宝代购集运系统PHP搭建攻略

tbapi

淘宝代购系统 淘宝代购集运系统 俄语网站建设 俄语淘宝代购系统

天润融通亮相CCFA论坛:AI Agent引领零售业服务精细化运营

天润融通

文献解读-Phenotypic expression and clinical outcomes in a South Asian PRKAG2 cardiomyopathy cohort

INSVAST

基因数据分析 多组学 生信分析 Sentieon 变异检测

BiFinance 币汇携手上市公司鼎亿集团,加速 RWA 赛道 Web3 布局

TechubNews

如何快速获取开源组件信息

陈老老老板

#开源 #数据

11Labs 推出 Conversational AI,可定制交互式语音智能体;Recall.ai:视频会议智能体通用 API

声网

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