我想知道mongodb的最大Collection 量是多少.

这意味着最大收集容量为32TB?

推荐答案

正如我将在下面展示的,理论上是有限制的,但即使下限也是pretty高.正确计算极限并不容易,但数量级应该足够.

mmapv1

实际的限制取决于碎片名称的长度等一些因素(如果你有几十万个碎片名称,那么这就是总数),但这里是一个实际数据的粗略计算.

每个碎片都需要配置数据库中的一些空间,与任何其他数据库一样,配置数据库在单机或副本集中的空间限制为32TB.在我管理的服务器上,config.shards个条目的平均大小是112字节.此外,每个区块需要大约250字节的元数据信息.让我们假设最佳块大小接近64MB.

我们每台服务器最多可以有50万块.500000*250字节等于125MB,表示每个碎片的区块信息.因此,如果我们将所有内容最大化,每个碎片的容量为125.000112MB.将32TB除以该值表明,一个集群中最多可以有略低于256000个碎片.

每个碎片依次可以存储32TB的数据.256000*32TB是8.19200 EB或8192000 TB.这就是我们例子的极限.

假设是8 EB.到目前为止,这可以很容易地转化为"足够用于所有实际目的".给你一个印象:国会图书馆(就馆藏规模而言,可以说是世界上最大的图书馆之一)拥有的所有数据,估计大小约为20TB,包括音频、视频和数字material .你可以将其放入我们理论上的MongoDB集群大约40万次.请注意,这是使用保守值时最大尺寸的下限.

线规

好的方面是:线规存储引擎没有这个限制:数据库大小没有限制(因为可以使用多少数据文件没有限制),所以我们可以有无限数量的碎片.即使这些碎片在mmapv1上运行,只有配置服务器在WT上运行,a的大小也几乎是无限的——在64位系统上限制16.8M TB的RAM可能会在某些地方造成问题,并导致config.shard个集合的索引被交换到磁盘,从而使系统陷入停滞.我只能猜测,因为我的计算器拒绝处理该区域的数字(而且我太懒了,无法手工处理),但我估计了两位数yottabyte区域的限制(以及在德克萨斯州大小的某个地方承载该区域所需的空间).

结论

不要担心分片环境中的最 Big Data 大小.不管怎样,这已经足够了,即使采用最保守的方法.使用碎片,你就完成了.顺便说一句:即使32TB的数据量也非常大:我所知道的大多数集群存储的数据和碎片更少,因为IOPS和RAM利用率超过了单个 node 的容量.

Mongodb相关问答推荐

如何从MongoDB集合中获取第一个和最后一个元素?

如何限制/筛选子文档中的条目?

使用MongoDB 4将根文档替换为数组

MongoDB $lookup 查找字段值数组

MongoDB - 将数组元素转换为新字段

如何在 MongoDB 中的集合下查找同一文档

pymongo - ifnull 重新调整整个对象而不是特定字段

mongodb.将文档分组在数组中,对它们进行评分计数和求和并添加新字段

使用golang的MongoDB错误无法访问服务器

在推入 mongodb 时自动填充 golang struct 中的 created_at 和 updated_at

使用 Flask-pymongo 扩展通过 _id 在 MongoDB 中搜索文档

在mongoose中添加多个验证

在 MongoDb 中查询小于 NOW 的日期时间值

不能在模块外使用 import 语句

MongoDB:在集合上设置 TTL 索引时出错: sessions

TypeError: object of type 'Cursor' has no len()

Mongoimport json 文件更新或覆盖..?

Mongo: query by key one level deep

有人在 Google App Engine 上try 过 MongoDB 吗?

Mongodb Compass 无法在 Ubuntu 18.10 中打开