博客
关于我
mongodb记录存储管理
阅读量:800 次
发布时间:2023-02-09

本文共 864 字,大约阅读时间需要 2 分钟。

为什么单个文档的存储空间会比实际数据大?

在MongoDB中,文档的存储空间通常会比实际数据大,这主要是由于文件系统的记录分配策略。以下是详细解释:

  • BSON格式和文档大小限制

    每个文档使用BSON格式存储,最大文档大小为16M字节。虽然文档不会超过这个限制,但实际存储空间大于文档大小的原因在于记录的分配策略。

  • 记录分配策略

    MongoDB支持两种记录分配策略:Power of 2 sized allocations和Exact fit allocations。

  • Power of 2 sized allocations

    这是默认的分配策略,适用于频繁插入、更新和删除的应用场景。记录的大小被固定为2的幂次方(如4、16、32、64字节),最小为32字节。这种策略通过预留额外空间(padding)来避免在更新时扩展记录,减少碎片产生。尽管存储空间利用率不高,但这在高并发写操作下提供更好的性能。

  • Exact fit allocations

    这种策略根据文档大小加上一定的额外空间来分配记录空间,额外空间由增长因子(padding factor,默认值为1,最大值为2)控制。记录大小为:
    record size = paddingFactor × document size
    这种策略通常节省更多存储空间,但更容易产生碎片。每次更新或删除时可能需要重新分配空间,增加维护复杂性。

  • 选择合适的分配策略

    根据应用的具体需求选择分配策略:

    • Power of 2策略:适合高频率的插入、更新和删除操作,减少碎片。
    • Exact fit策略:适合存储空间利用率较高的场景,但需定期维护碎片。
  • 修改默认分配策略

    可以通过管理员命令启用或禁用Power of 2策略:

    db.getSiblingDB('admin').runCommand({ setParameter: 1, newCollectionsUsePowerOf2Sizes: false })
  • 理解这些策略有助于优化MongoDB性能,选择合适的策略能有效管理存储资源。

    转载地址:http://vsffk.baihongyu.com/

    你可能感兴趣的文章
    multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
    查看>>
    mysql csv import meets charset
    查看>>
    multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
    查看>>
    MySQL DBA 数据库优化策略
    查看>>
    multi_index_container
    查看>>
    MySQL DBA 进阶知识详解
    查看>>
    Mura CMS processAsyncObject SQL注入漏洞复现(CVE-2024-32640)
    查看>>
    Mysql DBA 高级运维学习之路-DQL语句之select知识讲解
    查看>>
    MurmurHash 与其他哈希算法的区别
    查看>>
    mysql deadlock found when trying to get lock暴力解决
    查看>>
    Musetalk如何优化嘴部,提高清晰度?
    查看>>
    MuseTalk如何生成高质量视频(使用技巧)
    查看>>
    mysql default unix_timestamp(now())
    查看>>
    mutiplemap 总结
    查看>>
    MySQL DELETE 表别名问题
    查看>>
    Mutual Training for Wannafly Union #8 D - Mr.BG Hates Palindrome 取余
    查看>>
    MySql DML语言新增多行数据、修改删除多个表
    查看>>
    MVC 301重定向(永久重定向不带www域名到带www的域名)
    查看>>
    Mysql Dump命令
    查看>>
    Mvc Action可以通过jsonp方式调取
    查看>>