文档章节

MongoDB存储数据

 野渡书生
发布于 2016/03/11 13:46
字数 562
阅读 24
收藏 0

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

 

Memeory-Mapped Files

 

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

 

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

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

  • 操作系统通过mmap来把进程所需的所有数据映射到这个地址空间(红线),然后再把当前需要处理的数据映射到物理内存(灰线); (这可以理解成,在数据声明时数据是放在虚拟内存中的,数据声明的作用就是说明进程中用哪些数据,但并不需要指定用到什么样的数据,这时只说明它的地址并不涉及到具体的数值,即并不进行实例化,而如果对象实例化,则会在虚拟内存中映射到物理内存中)

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

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

 

MongoDB的存储模型

 

  • 有了内存映射文件,要访问的数据就好像都在内存里面,简单化了MongoDB访问和修改数据的逻辑

  • MongoDB读写都只是和虚拟内存打交道,剩下都交给OS打理

  • 虚拟内存大小=所有文件大小+其他一些开销(连接,堆栈)

  • 如果journal开启,虚拟内存大小差不多翻番

 

  • 使用MMF的好处:

  • 1:不用自己管理内存和磁盘调度

  • 2:LRU策略

  • 3:重启过程中,Cache依然在

 

  • 使用MMF的坏处:

  • 1:RAM使用会受磁盘碎片的影响,高预读也会影响

  • 2:无法自己优化调度算法,只能使用LRU

© 著作权归作者所有

粉丝 9
博文 217
码字总数 158821
作品 0
南京
私信 提问
浅尝辄止MongoDB:GridFS

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/82894835 一、为什么使用GridFS GridFS是MongoDB的一个子模块,使用GridFS可以基于M...

wzy0623
2018/09/29
0
0
CentOS7 YUM 安装MongoDB 4.0

简介 MongoDB 是一个基于分布式 文件存储的NoSQL数据库 由C++语言编写,运行稳定,性能高 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案 查看官方网站 MongoDB特点 模式自由 :可以把不...

Elson
2018/12/03
0
0
PHP与MongoDB:类库、框架与工具介绍

本文来自MongoDB官方,文中把PHP与MongoDB相关的类库、框架、工具做了汇总和介绍,如果你正使用PHP并在关注MongoDB,那么这篇文章可能对你有用。 架构相关 CakePHP CakePHP是一个非常受欢迎的...

kisshua
2012/08/31
0
0
Yum安装MongoDB及数据库管理

MongoDB简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB旨在为WEB应用提供可扩展的高性能数据...

cchenyz
2018/07/13
0
0
爬虫数据库MongoDB的介绍

MongoDB (名称来自「humongous (巨大无比的)」), 是一个可扩展的高性能,开源,模式自由,面向文档的NoSQL,基于 分布式 文件存储,由 C++ 语言编写,设计之初旨在为 WEB 应用提供可扩展的高...

张元江_erel
2018/11/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kubernetes云供应商架构的未来

首先,我想分享SIG的使命,因为我们用它来指导我们现在和将来的工作。从我们的章程中直接来看,SIG的使命是简化,开发和维护云供应商集成,作为Kubernetes集群的扩展或附加组件。这背后的动机...

Linux就该这么学
22分钟前
1
0
线程池没你想的那么简单

前言 原以为线程池还挺简单的(平时常用,也分析过原理),这次是想自己动手写一个线程池来更加深入的了解它;但在动手写的过程中落地到细节时发现并没想的那么容易。结合源码对比后确实不得...

crossoverJie
29分钟前
25
0
Scientific Linux开发停止 相关设备将迁移至CentOS上

在经历了将近14年的版本更迭之后,这个专注于科学领域的GNU/Linux发行版本不会发布下个重大版本更新--Scientific Linux 8了。 目前维护该发行版本的成员最终决定是时候休息了,今后将不再发布...

linuxCool
34分钟前
1
0
Redux

Redux概念 Redux = Reducer + Flux,数据层框架,将所有数据都存储到store中 Redux的工作流程 Antd的使用 安装npm install antd --save import 'antd/dist/antd.css'import { Input, Butto......

星闪海洋
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部