为了账号安全,请及时绑定邮箱和手机立即绑定

了解MongoDB BSON文档大小限制

/ 猿问

了解MongoDB BSON文档大小限制

开满天机 2019-11-07 13:02:51

来自MongoDB权威指南:


大于4MB的文档(转换为BSON时)无法保存到数据库。这是一个任意的限制(将来可能会提高);这主要是为了防止不良的架构设计并确保一致的性能。


我不了解此限制,这是否意味着包含博客帖子且带有大量评论且恰好大于4MB的文档不能存储为单个文档?


这也算嵌套文档吗?


如果我想要一个审核值更改的文档怎么办?(它最终可能会增长,超过4MB的限制。)


希望有人能正确解释。


我刚刚开始阅读有关MongoDB(我正在学习的第一个nosql数据库)的信息。


谢谢。


查看完整描述

3 回答

?
慕莱坞7535251

首先,它实际上是在8MB或16MB... 的下一个版本中提出的,但是我认为,从10gen(开发MongoDB的人)的艾略特(Eliot)的观点来看,它是最好的:


编辑: 大小已正式 “提高”到16MB


因此,在您的博客示例中,4MB实际上是很多。例如,“世界大战”的全部未压缩文本仅为364k(html):http : //www.gutenberg.org/etext/36


如果您的博客文章有那么多评论那么长,我将一本不读:)


对于引用,如果您为它们分配了1MB的空间,则很容易会超过10k(可能接近20k)


因此,除了真正奇怪的情况外,它都将很好地工作。而且在例外情况或垃圾邮件中,我真的不认为您还是想要20mb的对象。我认为将引用限制在15k左右是很有意义的,无论性能如何。或至少发生特殊情况(如果有的话)。


-艾略特


我认为您很难达到极限...随着时间的流逝,如果升级...您将越来越不必担心。


限制的主要目的是使您不会用完服务器上的所有RAM(因为MB查询文档时需要将所有文档加载到RAM中。)


因此,限制是普通系统上正常可用RAM的一定百分比……这将保持逐年增长的趋势。


在MongoDB中存储文件的注意事项


如果您需要存储的文档(或文件)大于16MB您可以使用的GridFS API,它将自动将数据分解成段并将其流式传输回给您(从而避免了大小限制/ RAM的问题)。


GridFS不会将文件存储在单个文档中,而是将文件分为多个部分或大块,并将每个大块作为单独的文档存储。


GridFS使用两个集合来存储文件。一个集合存储文件块,另一个集合存储文件元数据。


您可以使用此方法在数据库中存储图像,文件,视频等,就像在SQL数据库中一样。我用它甚至存储了数千兆字节的视频文件。


查看完整回答
反对 回复 2019-11-07
?
MMTTMM

社区中的许多人都希望性能不受警告的限制,请参阅此注释以获取合理的论据:https : //jira.mongodb.org/browse/SERVER-431? focusedCommentId = 22283 & page =com.atlassian.jira.plugin。 system.issuetabpanels:comment-tabpanel#comment-22283


我认为,首席开发人员对这个问题之以鼻,因为他们认为早期它是一个重要的“功能”。他们不会很快更改它,因为有人质疑它的感觉会伤害他们。个性和政治削弱开源社区产品的另一个例子,但这并不是一个严重的问题。


查看完整回答
反对 回复 2019-11-07
?
呼啦一阵风

要在此处为那些由Google指导的人发布澄清答案。


文档大小包括文档中的所有内容,包括子文档,嵌套对象等。


因此,一个文件:


{

    _id:{},

    na: [1,2,3],

    naa: [

        {w:1,v:2,b:[1,2,3]},

        {w:5,b:2,h:[{d:5,g:7},{}]}

    ]

}

最大大小为16兆。


Sbudocument和嵌套对象都计入文档的大小。


查看完整回答
反对 回复 2019-11-07

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信