前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mongodb 缓存页结构, 为什么我那么快 (1)

Mongodb 缓存页结构, 为什么我那么快 (1)

作者头像
AustinDatabases
发布2021-06-10 14:52:32
7060
发布2021-06-10 14:52:32
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

MONGODB 数据库写入和并发的速度,绝非是传统数据库可以比拟的,但到底为什么插入的速度这么快,和他的数据库引擎 wiredTiger 有关,那么就看看MONGODB wiredTiger 的设计。

MONGODB 的数据库引擎WiredTiger, 使用PAGE 页的方式,来存储数据,但是磁盘和内存的页面的结构是不一致的, 内存的页面的结构为B-TREE 结构。

在调用数据的过程中,数据先通过BTREE 索引找到对应的LEAF PAGE 然后在PAGE 内通过二分查找的方式来提取数据。这里根据官方给出的说明 internal page 的大小在 4kb , Leaf page 的大小在 32KB

在leaf page 中存在 dirty leaf page 区域,在插入数据后脏页分为两种,插入数据和更新与删除数据,删除数据与更新是一个类型,删除属于更新标志位.

当在数据库中存在脏页后,通过checkpoint 来将脏页刷新到磁盘,在刷新时避免影响当前的业务,内存中会将需要刷新页面以及他的上层节点和根节点产生一个新的内存的 COPY , 继续工作,老的脏页会进行刷新的操作. 在内存中通过跳表来安排即将通过内存刷新到磁盘的信息与位置.

什么是跳表

https://www.jianshu.com/p/9d8296562806

除定时刷新以外,缓存中的脏页超过阀值,都会触发刷新的工作.

这里的缓存页面主要有

1 memory_page_max

在内存中的最大的内存页面的大小, 首先这个页面定义成整型的页面,默认值为5MB,这个值主要的作用在于,当对于内存的页面的大小设置,这个页面的大小的设置在于整体内存页面在内存中的申请和分割的原则, 值如果大的情况下,在大量数据写入和频繁更新的情况下,是有利的,内存的页面不会频繁的被执行申请,造成在申请内存页面的时候,会产生卡顿的情况.

2 internal_page_max

这个页面主要存储的内容是每一个leaf page的地址,也是真实每个每个页面的地址.通过internal page中存储的页的地址来找到实际的存储数据的页面. 如果调整internal page 的大小可以控制查找数据的深度,数据量过大会并且internal_page_max 过小会增加查找leaf page的深度, 但过大的internal page 会在本身中进行二分查询leaf page 产生性能问题.

3 leaf_page_max

leaf 页面是存储实际数据的页面,默认值32KB, 这个是内存中存储数据的页面,调整这个页面的大小可以扩大每个PAGE 存储的数据的容量. 但任何事情都是双刃剑,大型的LEAF PAGE 会提高从 internal_page 中扫描数据的速度,但会加大在本页内进行 二分查找的时间. 同时如果使用SATA 磁盘的情况下,调整leaf_page 的大小有助于顺序数据的读取的速度.

4 allocation_size

分配文件的写入的单元,默认为4KB ,这里不建议调整,调整值的大小与数据考那个键的节省和写入的速度有关.

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档