MongoDB填充因子和更新优化

MongoDB填充因子(padding factor)是MongoDB为文档的扩展而预留的增长空间,因为MongoDB的文档是以顺序表的方式存储的,每个文档之间会非常紧凑。
MongoDB填充因子
如图,元素之间没有多余的可增长空间,当我们对顺序表中某个元素的大小进行增长的时候,就会导致原来分配的空间不足,放不回去原位了,只能要求其放于最后的位置。然后,后续插入的文档都会提供一定的填充因子,以便于文档频繁的修改,如果没有不再有文档因增大而移动的话,后续插入的文档的填充因子会依此减小。
两种方法来进行优化:
1. 如果文档的更新导致文档体积增长,如果增长的程度可以预知,那么可以为文档预留足够的增长空间,避免文档的位置移动,提高写入速度。在集合的属性中包含一个 usePowerOf2Sizes 属性,当这个选项为true时,系统会将后续插入的文档,初始空间都分配为2的幂数。
这种分配机制适用于一个数据会频繁变更的集合使用,他会给每个文档留有更大的空间,但因此空间的分配不会像原来那样高效,如果你的集合在更新时不会频繁的出现移动现象,这种分配方式会导致写入速度相对变慢。
2. 可以添加一个“垃圾”字段:
比如这样的文档:

{
    "_id":"ObjectId("XXX")",
    "bookname":"XXX",
    "tags":[]
}

书有子集的标签,但是初始时没有,以后会随着人们的添加越来越多,这样 tags 数组就会越来越大,对 tags 的大小如果有预估,比如不超过 100 字节,那么可以在每次插入新文档时,加入一个垃圾字段,字段名字可以随意,如:

{
    "_id":"ObjectId("XXX")",
    "bookname":"XXX",
    "tags":[],
    "garbage":".........................."+
        "........................ ......."+
        "........................ ......."
}

可以在第一次插入文档时这么做,也可以在 upsert 时使用 “

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值