正如我将在下面展示的,理论上是有限制的,但即使下限也是pretty高.正确计算极限并不容易,但数量级应该足够.
实际的限制取决于碎片名称的长度等一些因素(如果你有几十万个碎片名称,那么这就是总数),但这里是一个实际数据的粗略计算.
每个碎片都需要配置数据库中的一些空间,与任何其他数据库一样,配置数据库在单机或副本集中的空间限制为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 的容量.