位置: 编程技术 - 正文

深入了解MongoDB是如何存储数据的(深入了解工作优势怎么回答)

编辑:rootadmin

推荐整理分享深入了解MongoDB是如何存储数据的(深入了解工作优势怎么回答),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:深入了解图片,深入了解对方的36个问题,深入了解对方的36个问题,深入了解工作优势怎么回答,深入了解对方的36个问题,深入了解英语,深入了解的高级表达,深入了解的高级表达,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

本文主要介绍了关于MongoDB存储数据的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:

想要深入了解MongoDB如何存储数据之前,有一个概念必须清楚,那就是Memeory-Mapped Files。

Memeory-Mapped Files

下图展示了数据库是如何跟底层系统打交道的。

内存映射文件是OS通过mmap在内存中创建一个数据文件,这样就把文件映射到一个虚拟内存的区域。 虚拟内存对于进程来说,是一个物理内存的抽象,寻址空间大小为2^ 操作系统通过mmap来把进程所需的所有数据映射到这个地址空间(红线),然后再把当前需要处理的数据映射到物理内存(灰线) 当进程访问某个数据时,如果数据不在虚拟内存里,触发page fault,然后OS从硬盘里把数据加载进虚拟内存和物理内存 如果物理内存满了,触发swap-out操作,这时有些数据就需要写回磁盘,如果是纯粹的内存数据,写回swap分区,如果不是就写回磁盘。

深入了解MongoDB是如何存储数据的(深入了解工作优势怎么回答)

MongoDB的存储模型

有了内存映射文件,要访问的数据就好像都在内存里面,简单化了MongoDB访问和修改数据的逻辑 MongoDB读写都只是和虚拟内存打交道,剩下都交给OS打理 虚拟内存大小=所有文件大小+其他一些开销(连接,堆栈) 如果journal开启,虚拟内存大小差不多翻番 使用MMF的好处1:不用自己管理内存和磁盘调度2:LRU策略3:重启过程中,Cache依然在。 使用MMF的坏处1:RAM使用会受磁盘碎片的影响,高预读也会影响2:无法自己优化调度算法,只能使用LRU

磁盘上的文件是有extent构成,分配集合空间的时候也是以extent为单位进行分配的 一个集合有一个或者多个etent ns文件里面命名空间记录指向那个集合的第一个extent

数据文件与空间分配

当创建数据库时(其实MongoDB没有显式创建数据库的方法,在向数据库中的集合写入数据时会自动创建该数据库),MongoDB会在磁盘上分配一组数据文件,所有集合,索引和数据库的其他元数据都保存在这些文件里。数据文件被放在启动时指定的dbpath里,默认放入/data/db下面。典型的一个文件组织结构如下:

mongod.lock中存储了服务器的进程ID,是一个进程锁定文件。数据文件是依据所属的数据库命名的。 test.ns是第一个生成的文件(ns扩展名就是namespace的意思),数据库中的每个集合和索引都有自己的命名空间,每个命名空间的元数据都存放在这个文件里。默认情况下,.ns文件大小固定在MB,大约可以存储个命名空间。也就是说数据库中的索引和集合总数不能超过,该值可以通过mongod的?nssize选项进行定制。 像test.0这样以0开始的整数结尾的文件就是集合和索引数据文件。刚开始的时候,即使只有一条数据,MongoDB也会预分配几个文件,这种预分配的做法,能让数据尽可能连续存储,减少磁盘碎片。在像数据库添加数据时,MongoDB会分配更多的数据文件。每个新数据文件的大小都是上一个已分配文件的两倍(M->M->M),直到预分配文件大小的上限2G。此处基于一个假设,如果总数据大小呈恒定速率增长,应该逐渐增加数据文件分配的空间。当然这个预分配策略也是可以通过?noprealloc关掉,但是不建议在production环境下使用。 默认的local数据库,该数据库不参与replication。当mongod是一个副本集的成员时,在local数据库中就有一个叫做oplog.rs的预分配的capped集合,预分配的大小为磁盘空间的5%。这个大小可以通过?oplogSize进行调整。oplog主要用于副本集Primary和Secondary成员见的replication,它的大小限制了两个副本集之间,在重新完全同步之前,允许多长时间不同步。 journal目录,journal功能2.4版本默认是开启的。 可以使用db.stats()来确认已使用空间和已分配空间。

使用db.accesslog.stats()确认某个集合的使用量

总结

标签: 深入了解工作优势怎么回答

本文链接地址:https://www.jiuchutong.com/biancheng/312650.html 转载请保留说明!

上一篇:关于Mongodb参数说明与常见错误处理的总结(mongodb reference)

下一篇:MongoDB中如何使用JOIN操作详解(mongodb $sum)

  • 特定业务计算的应纳税所得额
  • 生产企业出口退税流程
  • 小规模减免税款的账务处理
  • 私车公用是否合法
  • 开票系统技术服务费在申报表哪里抵扣
  • 银行回单附言写错业务
  • 库存现金和银行存款的区别
  • 企业物流成本会计核算问题研究
  • 小规模附加税减免政策2023最新
  • 企业进行税收筹划
  • 房屋租赁可以开住宿费吗
  • 奖金属于应付职工薪酬
  • 未认证发票先入账可以吗
  • 企业对外借款是怎么规定的
  • 发票已开款项未入账有什么影响?
  • 增值税税负率高于预警值
  • 其他综合收益影响递延所得税负债吗
  • 企业转让无形资产要交增值税吗
  • 出售已计提减值准备的固定资产
  • 企业技术中心认定专精特新
  • 个体户怎
  • 金蝶旗舰版反过账的操作步骤
  • 微信获取用户id失败如何解决
  • 如何去掉电脑桌面背景图
  • 新版mac如何连接iphone
  • 智能路由器五个灯一直闪
  • 虎刺梅怎么养殖视频
  • 瑞芯微 8nm
  • 所有者权益期末减期初等于净利润还是利润总额
  • 日落时有什么变化
  • php如何生成html
  • php输出对象
  • 费用报销单怎样粘贴
  • java继承的基本概念
  • websocket()
  • linux命令bzip2
  • vue-print-nb-jeecg
  • 网上变更财务负责人
  • 收到的赠品怎么做分录
  • 高效快速编制会计分录如何做?
  • springboot升级到2.1.6需要注意
  • centos5.7
  • 零申报社保是否可以报销
  • 企业之间借贷是否合法有效
  • sql命令语句
  • 跨年收入退款如何处理
  • 纳税人减免税申请表怎么填
  • 营业外收支的账户有哪些
  • 小规模纳税人减按1%怎么计算
  • 补开以前年度发票
  • 刷信用卡的手续费一般是多少
  • 营改增后税额计算公式
  • 损益类费用科目结转本年利润是余额结转还是发生额结转
  • 查询公司的公积金账号怎么查
  • 教材出版 技术咨询服务费
  • 进项税额有抵扣期限吗
  • 审计真实性认定
  • 成本会计和管理会计哪个好
  • 各单位应当根据需要设立专职或者兼职
  • 查询存储过程中的文件
  • 数据库中alter table的用法
  • DBCC CHECKIDENT 重置数据库标识列从某一数值开始
  • mysql5.7.22安装配置教程
  • helppane.exe是什么文件
  • win7系统怎么给文件夹设置密码
  • linux halting
  • 微软推送win11
  • 校园网升级套餐
  • eclipse怎么创建安卓
  • shell中遍历数组
  • python占位
  • vue devtools功能
  • shell中的注释用什么表示
  • python中面向对象
  • python数据连接
  • 电子发票和普通发票哪个好
  • 企业销售旧货增值税税率
  • 广州市国家税务局稽查局举报中心
  • 企业所得税可以抵扣吗
  • 湖南电子税务局网上办税大厅
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设