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记录存储管理相关推荐

  1. MongoDB记录操作日志的Base类实现

    mongodb-context.xml配置: <?xml version="1.0" encoding="UTF-8"?> <beans xm ...

  2. Centos7 安装mongodb记录

    下载解压 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.2.tgz tar -zxvf mongodb-linux-x8 ...

  3. Mongodb- paly中操作mongodb记录

    为什么80%的码农都做不了架构师?>>>    -- 多条件查询val msgColl = MongoFactory.collection("Meta_Message&qu ...

  4. Linux下的Mongodb部署应用梳理

    一.Mongodb简介 官网地址:http://www.mongodb.org/ MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.MongoDB 是一个 ...

  5. 二.MongoDB特点

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

  6. 关于MongoDB数据库的总结

    既然要说MongoDB数据库,先引入NoSQL的概念. NoSQL: NoSQL,指的是非关系型的数据库.NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系 ...

  7. Mongodb数据库初识

    Mongodb数据库初识 一.什么是数据库 1.标准定义 2.数据库的概念 3.数据库的简单理解 4.使用数据库的原因 ①普通文件系统存储大量数据的问题 ②数据库的高效性 二.数据库的分类 1.关系型 ...

  8. mongodb连接失败_MongoDB 基础入门

    mongodb 一.NoSQL 简介 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL". 在现代的计算系统上每天网络上都会产生庞大的数据量. 这些数 ...

  9. MongoDB系列(一):简介及安装

    2019独角兽企业重金招聘Python工程师标准>>> 什么是MongoDB MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加 ...

最新文章

  1. 单例模式(单一实例)
  2. 《HTML5实战》——1.4 其他API和规范
  3. opencv4.10不能使用sift = cv2.xfeatures2d.SIFT_create()
  4. CF1119H-Triple【FWT】
  5. KM 最优匹配 讲解
  6. php代码最佳实践,分享几个 PHP 编码的最佳实践
  7. 短网址PHP源码Shortny
  8. Linux安装中文字体_宋体
  9. CursorLoader的进级实践
  10. tensorflow之数据加载
  11. 个人JS脚本验证大全[转]
  12. ThreadPoolExecutor源码学习(一) -核心属性及应用
  13. 牛客网算法题目-最优乘车题解
  14. 个人收集的mac破解软件免费下载(不断更新中)
  15. 尚硅谷YYDS (视频连接)
  16. 用css hack解决IE5 IE5.5 IE6 Firefox浏览器兼容性
  17. 麦吉尔大学计算机科学申请,麦吉尔大学计算机科学
  18. 星际迷航传奇Star Trek for mac(太空冒险游戏)
  19. 山东理工ACM[2444]正方形
  20. idea右键新建(new) 但是没有Scala class选项

热门文章

  1. Oracle跟踪文件trace文件
  2. 【 Perl 】三种方式解决” Wide character in print “
  3. etcd3 安装与运维
  4. Linux 进程间通信 --- 信号通信 --- signal --- signal(SIGINT, my_func); --- 按键驱动异步通知(转)...
  5. 4、Cocos2dx 3.0游戏开发找小三之Hello World 分析
  6. DispatcherServlet与初始化主线
  7. 如何更改rhevm中admin的密码
  8. bind函数:给对象绑定方法。
  9. FLUSH TABLES WITH READ LOCK有多快
  10. Spring通过注解装配Bean