MongoDB如何存储数据

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

Memeory-Mapped Files

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

内存映射文件是OS通过mmap在内存中创建一个数据文件,这样就把文件映射到 一个虚拟内存的区域。

虚拟内存对于进程来说,是一个物理内存的抽象,寻址空间大小为2^64

操作系统通过mmap来把进程所需的所有数据映射到这个地址空间(红线),然后 再把当前需要处理的数据映射到物理内存(灰线)

当进程访问某个数据时,如果数据不在虚拟内存里,触发page fault,然后OS 从硬盘里把数据加载进虚拟内存和物理内存

如果物理内存满了,触发swap-out操作,这时有些数据就需要写回磁盘,如果 是纯粹的内存数据,写回swap分区,如果不是就写回磁盘。

MongoDB的存储模型

时间: 2024-10-28 21:03:47

MongoDB如何存储数据的相关文章

MongoDB WiredTiger 存储引擎cache_pool设计 (下) -- 实践篇

1. Cache Pool引发的问题 之前的文章<MongoDB WiredTiger 存储引擎cache_pool设计 (上) -- 原理篇>和大家分享WiredTiger的整体架构和Cache Pool相关的设计,这篇来介绍下阿里云MongoDB线上出现的问题,及改进措施. 用过MongoDB 3.0之后版本的同学应该都比较熟悉WiredTiger的cache evict问题. 连续好几个版本在cache 淘汰算法上设计都有些小问题,现象总结起来就是写入hang住.本文使用的是MongoD

MongoDB WiredTiger 存储引擎cache_pool设计 (上) -- 原理篇

1. MongoDB 多引擎体系 -- WiredTiger MongoDB v.3.0之前的版本,默认使用MMAP(MMap引擎)方式对内存中的数据进行写盘存储,遭受了很多诟病.比如并发受限的表锁.不支持压缩.不可控的IO操作等,MMAP甚至不能称作一个完整的存储引擎(笔者的个人观点),对数据(Btree的数据页.索引页)的操作甚至要依赖os的mmap(in_page_cache)刷盘,并且os的page 4k为IO单元对数据库本身就是不友好的,再加上其实数据库自身应该比OS更懂数据的layo

MongoDB Wiredtiger存储引擎实现原理

Mongodb Wiredtiger存储引擎实现原理 Mongodb-3.2已经WiredTiger设置为了默认的存储引擎,最近通过阅读wiredtiger源代码(在不了解其内部实现的情况下,读代码难度相当大,代码量太大,强烈建议官方多出些介绍文章),理清了wiredtiger的大致原理,并简单总结,不保证内容都是正确的,如有问题请指出,欢迎讨论交流. 按照Mongodb默认的配置,WiredTiger的写操作会先写入Cache,并持久化到WAL(Write ahead log),每60s或l

《PHP精粹:编写高效PHP代码》——2.2节选择如何存储数据

2.2 选择如何存储数据有4个主要选项用于存储数据:文本文件 对于很少更新的少量数据,这是理想的选择(例如配置文件),在应用程序中用于记录事件或错误.会话数据 对于只为下一次请求或者访问持续期间所需的数据,可以在用户的会话中存储信息.为临时数据使用会话是最佳的方法,因为使用会话将避免记录过多数据,或者添加功能以清理不再需要的数据.关系数据库 这是本章要重点讲述的存储类型,除此之外,还要讲解如何使用PDO访问数据库.对于已知结构的数据而言,关系数据库是完美的,例如包含用户信息的表(谁都有一个ID.

最小化数据传输——在客户端存储数据

客户端|数据 将程序输出为其他的语言是程序员喜爱的事情之一,在WEB上我们有 两个不同编程环境:客户端(浏览器)和服务器端,根据HTTP协议的定义, 我们可以在编写在客户端输出其他语言的服务端程序,我们选择了作为服 务端语言.javascript作为客户端输出.在本问中我们将向您演示这样用 该方案把数据存储在客户端,并且在诸如:聊天室.新闻系统或其他您想 实现的应用上达到服务端和客户端(浏览器)的最小的数据传输. 要求以下支持:     PHP4     JavaScript     Frame

阿里云首提“轻计算”:让计算挖掘存储数据的价值

4月19-21日,2016云栖大会深圳峰会,欢迎报名 本次云存储与轻计算专场,是阿里云存储首次在存储领域提出"轻计算"的概念,先通过下面内容让我们来提前体会下云存储与计算之间的"重"与"轻". 存储之"重",在于稳定.海量与可靠 与传统的自建行存储相比,阿里云存储基于飞天的大规模分布式系统,使得存储能力无缝扩展,用户可以根据需求选择存储节点的性能和规格,降低成本的同时无需再关心硬件和运维烦恼.强大的安全管理体系无需配置就能够提

XML入门教程:向XML文件存储数据

xml|教程|入门教程|数据 通常,我们在数据库中存储数据.不过,如果希望数据的可移植性更强,我们可以把数据存储XML文件中. 创建并保存XML文件 如果数据要被传送到非Windows平台上的应用程序,那么把数据保存在XML文件中是有好处的.请记住,XML有很强的跨平台可移植性,并且数据无需转换! 首先,我们将学习如何创建并保存一个XML文件.下面的这个XML文件将被命名为"test.xml",并被保存在服务器上的c目录中.我们将使用ASP和微软的XMLDOM对象来创建并保存这个XML

用Java实现HTML文件代替数据库存储数据

数据|数据库 Java在编写一些图形化的小程序时,有时也要去存储少量的数据,如果用JDBC来连接数据库,就会使程序速度减慢,而且及不方面,我们可以用Java中的文件来代替数据库保存数据,这样不但可以实现存储的功能,而且不用考虑数据频繁的存取,可以把文件定义成为HTML文件,并将存储的数据以表格的方式显示,这样就可以直接在网页中看到数据,下面是我写的一个小的文件存储数据的实例: import java.awt.event.ActionEvent;import java.awt.event.Acti

松下Gh4删除后又录制存储数据,之前的视频还可以恢复么

问题描述 松下Gh4删除后又录制存储数据,之前的视频还可以恢复么 用松下GH4相机拍摄的MOV视频文件,视频拍摄完后将视频拷贝到电脑后,就将卡格式化了.等到编辑那边发现复制视频无法播放损坏时,这个卡已经又接着拍摄了几G的数据,格式化之前视频可以恢复么,或者可以修复损坏的视频么 解决方案 是否能恢复数据取决于你的存储卡中保存数据的物理位置是否被覆盖了新的数据,你又填充了几个GB,这个就不乐观了,建议拿到数据恢复的地方请他们帮你看看. 解决方案二: 谢谢,我用那个赤兔松下mov视频恢复软件恢复出来了