Ole*_*leg 42 multi-tenant mongodb
任何人都可以说mongodb中的集合数量有任何实际限制吗?他们在这里写https://docs.mongodb.com/manual/core/data-model-operations/#large-number-of-collections:
通常,具有大量集合没有显着的性能损失,并且导致非常好的性能.
但由于某些原因,mongodb为数据库中的命名空间数量设置了限制24000,看起来它可以增加,但我想知道为什么它在默认配置中有一些限制,如果在数据库中有许多集合不会导致任何性能罚款?
这是否意味着在一个数据库中拥有几乎无限数量的集合是可行的解决方案,例如,在多租户应用程序的数据库中拥有一个帐户的一个数据集合,例如,拥有数十万个集合在数据库中?如果对于每个租户来说,为数据库提供大量的集合是可行的解决方案,那么它与一个集合中的每个租户的文档相比有什么好处呢?非常感谢您的回答.
Sam*_*aye 37
这个答案迟了但其他答案似乎有点......在可靠性和事实信息方面都很弱,所以我会尝试补救一点.
但由于某种原因,mongodb为数据库中的命名空间数量设置了限制24000,
这只是默认设置.是的,有一个默认设置.
它确实在限制页面上说24000是限制(http://docs.mongodb.org/manual/reference/limits/#Number%20of%20Namespaces),好像没有办法扩展它但是有.
但是,命名空间文件的大小(http://docs.mongodb.org/manual/reference/limits/#Size%20of%20Namespace%20File)最大限制为2GB.在大多数情况下,这给你大约300万个命名空间,这是非常令人印象深刻的,我不确定很多人会很快达到这个限制.
您可以通过在配置(http://docs.mongodb.org/manual/reference/configuration-options/#nssize)中使用nssize参数或在运行时通过操作使用的命令来修改默认值以使其高于16MB 运行MongoDB(http://docs.mongodb.org/manual/reference/mongod/#cmdoption-mongod--nssize).
据我所知,没有真正的原因可以解释为什么MongoDB默认为其nssize实现了16MB,我从未听说过"不打扰每个细节的用户"的座右铭,所以我不买那个.
我认为,在我看来,MongoDB隐藏它的主要原因是因为尽管如文档所述:
不同的集合对于高吞吐量批处理非常重要.
使用多个集合作为垂直扩展而非横向扩展的方法,正如MongoDB所设计的那样,被认为(通常)是大型网站的不良做法; 因此,12K系列通常被认为是人们永远不应该确定的东西.
use*_*723 18
没有更多的限制!
正如其他答案所述 - 这取决于命名空间文件的大小.这是以前的问题,因为它的默认限制为16mb,最大为2gb.然而,随着MongoDB的3.0版本和WiredTiger存储引擎,它看起来像这样限制已取消.WiredTiger似乎是在几乎每一个更好的方式,所以我认为,任何人使用旧的引擎,除了传统的支持理由的理由很少.从网站:
对于MMAPv1存储引擎,命名空间文件不能超过2047兆字节.
默认情况下,命名空间文件为16兆字节.您可以使用nsSize选项配置大小.
WiredTiger存储引擎不受此限制.
http://docs.mongodb.org/manual/reference/limits/
Sid*_*Sid 13
一点背景:
每次mongo创建数据库时,它都会为它创建一个名称空间(db.ns)文件.命名空间(或您可能想要调用它的集合)文件包含有关集合的元数据.默认情况下,命名空间文件的大小为16MB,但您可以手动增加大小.每个集合的元数据是648个字节+一些开销字节.除以16MB,每个数据库大约有24000个命名空间.您可以通过指定更大的命名空间文件来启动mongo,这样您就可以为每个数据库创建更多的集合.
任何默认配置背后的想法是不打扰每个细节(和可配置旋钮)的用户,并选择一般适用于大多数人.此外,可行性与最佳/良好的设计实践密切相关.正如克里斯所说,考虑数据的形状并做出相应的决定.
归档时间: |
|
查看次数: |
28223 次 |
最近记录: |