mongodb记录存储管理
2019独角兽企业重金招聘Python工程师标准>>>
为什么单个文档的存储空间会比实际数据要大?
每个文档的格式为Bson,单个文档的最大长度不能超过16M
每个文档存储的时候是以记录的形式存在,记录的存储空间包括当前记录文档的数据大小和额外的空间,这个额外的空间叫做padding;采用额外空间的目的是为更新的时候导致数据长度的增长使用
所有的记录都是顺序存放在磁盘上的,如果某个文档由于更新导致空间大于分配的空间,mongodb会重新分配一个记录空间来存储,然后会删除原来的文档,并且更新引用到原来文档的索引,这将会消耗更多的时间并导致存储碎片(与在原地更新,即额外多分配一些空间)
一个mongoDB的数据库包含多个集合,每个数据库拥有自己独立的写锁,通过这个写锁来阻塞别的操作,在写数据期间。
记录分配策略:
mongodb支持多种记录空间分配策略,这直接影响到文档的padding空间大小。power of 2 allocations策略比较适合插入/更新/删除比较多的应用场景,exact fit allocations比较适合没有更新和删除的场景
1.power of 2 sized allocations
在2.6的版本中,usepowerof2sizes是默认的分配策略。可以通过参数newCollectionsUsePowerOf2Sizes来修改默认分配策略;用下面的命令可以修改
db.getSiblingDB('admin').runCommand( { setParameter: 1, newCollectionsUsePowerOf2Sizes: false } )
这种分配策略的内容是:每个记录的数据大小为2的整数次幂方,即2的n次方,比如4,16,32,64等,但是要求最小的为32,单位为字节。这种策略有两个特性:
•there are a limited number of record allocation sizes, which makes it easier for mongod to reuse existing allocations, which will reduce fragmentation in some cases.
有有限的记录分配大小,即记录的空间大小种类是有限的(比如,只有32,64,128几种),这样的好处是可以重复利用已经存在的分配,这将会减少碎片的存在
在大多数情况下,分配的空间都大于实际的数据大小,这将会给数据的修改带来好处,即会减少或者消除存储空间不够重新分配这种情况,对提升性能及减少碎片带来好处
这种分配策略不会彻底的消除文档存储空间的重新分配,但是会明显的减少这种情况
2.Exact Fit Allocation(精确匹配分配)
这种策略在分配的时候会基于数据的大小再加上一定的额外空间,这个额外空间通过一个增长因子(padding factor)来控制。这个增长因子的默认值是1,当文档大小的增长查过集合的平均值时,mongodb会自动把此因子调整为2(英文原文为:MongoDB dynamically adjusts the padding factor up to 2 depending on the rate of growth of the documents over the life of the collection)
采用这种策略时,记录的存储大小公式为:
record size = paddingFactor * <document size>
可以通过db.collection.stats查看当前的增长因子(paddingFactor)
通常来说,第二种分配策略比第一种要节省存储空间,但是更容易导致碎片的存在;当执行compact和repairDatabase操作的时候,默认会删除额外的空间,当然,在执行mongodump和mongorestore.compact的时候,可以指定保留多少额外的空间
转载于:https://my.oschina.net/u/1251522/blog/337260
mongodb记录存储管理相关推荐
- MongoDB记录操作日志的Base类实现
mongodb-context.xml配置: <?xml version="1.0" encoding="UTF-8"?> <beans xm ...
- Centos7 安装mongodb记录
下载解压 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.2.tgz tar -zxvf mongodb-linux-x8 ...
- Mongodb- paly中操作mongodb记录
为什么80%的码农都做不了架构师?>>> -- 多条件查询val msgColl = MongoFactory.collection("Meta_Message&qu ...
- Linux下的Mongodb部署应用梳理
一.Mongodb简介 官网地址:http://www.mongodb.org/ MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.MongoDB 是一个 ...
- 二.MongoDB特点
1.什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用 ...
- 关于MongoDB数据库的总结
既然要说MongoDB数据库,先引入NoSQL的概念. NoSQL: NoSQL,指的是非关系型的数据库.NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系 ...
- Mongodb数据库初识
Mongodb数据库初识 一.什么是数据库 1.标准定义 2.数据库的概念 3.数据库的简单理解 4.使用数据库的原因 ①普通文件系统存储大量数据的问题 ②数据库的高效性 二.数据库的分类 1.关系型 ...
- mongodb连接失败_MongoDB 基础入门
mongodb 一.NoSQL 简介 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL". 在现代的计算系统上每天网络上都会产生庞大的数据量. 这些数 ...
- MongoDB系列(一):简介及安装
2019独角兽企业重金招聘Python工程师标准>>> 什么是MongoDB MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加 ...
最新文章
- 单例模式(单一实例)
- 《HTML5实战》——1.4 其他API和规范
- opencv4.10不能使用sift = cv2.xfeatures2d.SIFT_create()
- CF1119H-Triple【FWT】
- KM 最优匹配 讲解
- php代码最佳实践,分享几个 PHP 编码的最佳实践
- 短网址PHP源码Shortny
- Linux安装中文字体_宋体
- CursorLoader的进级实践
- tensorflow之数据加载
- 个人JS脚本验证大全[转]
- ThreadPoolExecutor源码学习(一) -核心属性及应用
- 牛客网算法题目-最优乘车题解
- 个人收集的mac破解软件免费下载(不断更新中)
- 尚硅谷YYDS (视频连接)
- 用css hack解决IE5 IE5.5 IE6 Firefox浏览器兼容性
- 麦吉尔大学计算机科学申请,麦吉尔大学计算机科学
- 星际迷航传奇Star Trek for mac(太空冒险游戏)
- 山东理工ACM[2444]正方形
- idea右键新建(new) 但是没有Scala class选项
热门文章
- Oracle跟踪文件trace文件
- 【 Perl 】三种方式解决” Wide character in print “
- etcd3 安装与运维
- Linux 进程间通信 --- 信号通信 --- signal --- signal(SIGINT, my_func); --- 按键驱动异步通知(转)...
- 4、Cocos2dx 3.0游戏开发找小三之Hello World 分析
- DispatcherServlet与初始化主线
- 如何更改rhevm中admin的密码
- bind函数:给对象绑定方法。
- FLUSH TABLES WITH READ LOCK有多快
- Spring通过注解装配Bean