首页 > 数据库 >Mongodb 缓存页结构, 为什么我那么快 (1)

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

时间:2023-06-19 17:07:31浏览次数:194  
标签:为什么 缓存 leaf Mongodb internal 内存 数据 page 页面


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

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

Mongodb   缓存页结构, 为什么我那么快 (1)_数据库_02

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

Mongodb   缓存页结构, 为什么我那么快 (1)_大数据_03

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

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

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

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

Mongodb   缓存页结构, 为什么我那么快 (1)_大数据_05

什么是跳表

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

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

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

这里的缓存页面主要有

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 ,这里不建议调整,调整值的大小与数据考那个键的节省和写入的速度有关.

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

标签:为什么,缓存,leaf,Mongodb,internal,内存,数据,page,页面
From: https://blog.51cto.com/u_14150796/6515967

相关文章

  • Mongodb 为什么提起处理JSON 就是MOGNODB 的,因为我没得选
    提到JSON的数据处理,大部分人想到的一定是MONGODB,如果不是可以自己好好的反思一下,自己的数据库餐盘是不是缺少MOGNODB这道硬菜,最近也有人问我一个问题,关于使用mongodb的原因是什么,我回答的比较简单,但是我更原因用这样的方式来回答这个问题。提到MOGNODB的特长,必须提到JSON,在数......
  • Spring Batch:将数据从Web服务处理到MongoDB
    概观在这篇文章中,我们将介绍如何创建一个使用Web服务数据并将其插入MongoDB数据库的SpringBatch应用程序。要求阅读本文的开发人员必须熟悉SpringBatch(示例)和MongoDB。环境Mongo数据库部署在MLab中。请按照本快速入门中的步骤操作。批处理应用程序部署在Heroku PaaS中。详情  ......
  • MONGODB 磁盘与内存的数据格式是否一致
    最近MONGODB系统中的数据量逐渐变大,联系了开发准备开始进行数据的archive和 cleanup事宜。其中运维的同学问我,你存储的数据size和实际的数据size是不一样的,我回答那是mongodb自带的数据压缩功能。但后续的问题我模糊了,例如磁盘和内存的数据是否完全一致,压缩的比率是多少,......
  • Linux安装MongoDB 4.0.3
    Linux安装MongoDB4.0.3 1.准备CentOS下安装MongoDB官网提供windows、Linux、OSX系统环境下的安装包,这里主要是记录一下在Linux下的安装。首先到官网下载安装包。文中安装的是4.0.3版本的。官网地址:https://www.mongodb.com/下载地址:https://www.mongodb.com/try/download......
  • 为什么互联网大厂一边大规模裁员,又一边招聘?
    小米,腾讯,字节,拼多多都在裁员同时各个招聘平台的招聘信息也没有断过裁员和招人并不冲突裁掉的是拿钱多没效率的低性价比员工招来的则是花更少钱能实现同等效率的高性价比员工。一个裁一个招本质上都是在权衡用人成本和产出效益事实就是如此残忍,作为老板,想要的肯定是产出同一效益/更......
  • Docker中安装MongoDb
    1.Dockercompose文件version:'3.1'networks:mongo:external:falseservices:mongo-express:image:mongo-expressrestart:alwaysports:-"8081:8081"environment:ME_CONFIG_MONGODB_ENABLE_ADMIN:t......
  • MongoDB常用28条查询语句
    MongoDB常用28条查询语句1查询所有记录db.userInfo.find();相当于:select*fromuserInfo;默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”,但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize=50;......
  • 为什么要学习 Kubernetes
    Kubernetes是一种开源的容器编排平台,它可以自动化地部署、扩展和管理容器化的应用程序。它可以帮助开发人员和运维人员更高效地管理大规模的容器化应用,从而提高应用程序的可靠性和可伸缩性。K8s的设计理念是让开发人员专注于应用程序本身,而不是底层基础设施的管理。它是一个非常有......
  • 什么是网站追踪?它为什么要追踪我?
    追踪的目的是为了识别你,识别你的目的可能有很多网站追踪说白了就是利用你与网站建立的一次会话,这些会话具有某些特征,比如你注册的账户、User-Agent,源IP,或者是cookie等等,这些东西会记录到服务器中可以标识你这个人。为什么要追踪,原因有很多,我举其中一个常见栗子,比如网......
  • 我的网络为什么卡了?
    我最近莫名其妙网络卡了,其他设备好好的就是电脑上网慢,我在确定配置没有问题后,怀疑是电脑使用时间长了网卡坏了。于是我启用了windows自带的网卡诊断,还真出结果了说是DNS无响应,我去看了看DNS是手动配置的,求实没有反应,这种是还真少见,改了一个DNS网络就正常了。借此我总结一下网络......