有理论上的限制,我将在下面展示,但即使是下限也相当高。正确计算极限并不容易,但数量级应该足够了。
mmapv1
实际限制取决于一些因素,例如分片名称的长度等(如果您有几十万个,则总结一下),但这里是使用真实数据进行的粗略计算。
每个分片在配置数据库中都需要一些空间,这与任何其他数据库一样,在单台机器或副本集中限制为 32TB。在我管理的服务器上,config.shards 中条目的平均大小为 112 字节。此外,每个块需要大约 250 字节的元数据信息。让我们假设最佳块大小接近 64MB。
每台服务器最多可以有 500,000 个块。 500,000 * 250byte 等于 125MB 用于每个分片的块信息。因此,如果我们将所有内容最大化,则每个分片的每个分片有 125.000112 MB。将 32TB 除以该值表明我们可以在一个集群中拥有最多略低于 256,000 个分片。
每个分片又可以容纳 32TB 的数据。 256,000 * 32TB 为 8.19200 EB 或 8,192,000 TB。这将是我们示例的限制。
假设它是 8 艾字节。到目前为止,这可以很容易地翻译为“足够用于所有实际目的”。给你一个印象:国会图书馆(可以说是世界上最大的图书馆之一)拥有的所有数据都包含大约 20TB 的数据,包括音频、视频和数字材料。你可以将它放入我们理论上的 MongoDB 集群中大约 400,000 次。请注意,这是使用保守值的最大尺寸的下限。
有线老虎
现在好的部分:WiredTiger 存储引擎没有这个限制:数据库大小没有限制(因为可以使用多少数据文件没有限制),所以我们可以拥有无限数量的分片。即使我们在 mmapv1 上运行这些分片并且在 WT 上只有我们的配置服务器,a 的大小也几乎是无限的——在 64 位系统上对 16.8M TB RAM 的限制可能会在某处导致问题并导致 @987654322 的索引@collection 被交换到磁盘,停止系统。我只能猜测,因为我的计算器拒绝使用该区域中的数字(而且我懒得手动操作),但我估计了两位数 yottabyte 区域的限制(以及在某处托管该区域所需的空间)相当于德克萨斯州的大小)。
结论
不要担心分片环境中的最大数据大小。无论如何,这已经足够了,即使是最保守的方法。使用分片,你就完成了。顺便说一句:即使 32TB 也是一大堆数据:我所知道的大多数集群都拥有较少的数据和分片,因为 IOPS 和 RAM 利用率超过了单个节点的容量。