我想知道mongodb中集合的最大大小是多少。在mongodb限制文档中提到,单个MMAPv1数据库的最大大小为32TB。
这意味着集合的最大大小是32TB?如果我想在一个集合中存储超过32TB的数据,解决方案是什么?
发布于 2015-11-27 01:26:37
有理论上的限制,正如我将在下面展示的,但即使是下限也是相当高的。要正确计算极限并不容易,但数量级应该足够了。
mmapv1
实际的限制取决于一些东西,如分片名称的长度等(如果您有几十万个分片名称,则加起来会有几十万个),但这里是使用实际数据的粗略计算。
每个分片都需要配置数据库中的一些空间,与任何其他数据库一样,配置数据库在单机或副本集中的大小限制为32TB。在我管理的服务器上,config.shards中条目的平均大小为112字节。此外,每个块需要大约250字节的元数据信息。让我们假设最优的块大小接近64MB。
每台服务器最多可以有500,000个区块。500,000 *250字节等于每个分片的块信息大小为125MB。因此,如果我们将所有内容最大化,则每个分片有125.000112 MB。将32TB除以该值可以看出,一个集群中最多可以包含略低于256,000个碎片。
每个分片又可以容纳32TB的数据。256,000 *32 or相当于8.19200艾字节或8,192,000 or。这就是我们的示例的限制。
假设它是8艾字节。到目前为止,这可以很容易地转化为“足够用于所有实际目的”。给你一个印象:国会图书馆(就收藏规模而言,可以说是世界上最大的图书馆之一)持有的所有数据估计大小约为20TB,包括音频、视频和数字材料。您可以将其放入我们的理论MongoDB集群大约400,000次。请注意,这是使用保守值的最大大小的下限。
WiredTiger
现在好的方面是: WiredTiger存储引擎没有这个限制:数据库大小没有限制(因为对可以使用的数据文件数量没有限制),因此我们可以拥有无限数量的分片。即使我们在mmapv1上运行这些分片,而在WT上只运行我们的配置服务器,a的大小也几乎是无限的-在64位系统上,16.8MB内存的限制可能会导致某些地方出现问题,并导致config.shard集合的索引交换到磁盘,从而使系统停滞。我只能猜测,因为我的计算器拒绝处理那个区域的数字(我太懒了,不愿意手工做),但我估计这里的限制是两位数的yottabyte区域(以及在德克萨斯州大小的某个地方存放该区域所需的空间)。
结论
不要担心分片环境中的最大数据大小。无论如何,即使采用最保守的方法,它也是足够的。使用分片,你就完成了。顺便说一句,即使是32TB的数据量也是非常大的:据我所知,大多数集群保存的数据和碎片都很少,因为IOPS和RAM利用率超过了单个节点的容量。
https://stackoverflow.com/questions/33939587
复制相似问题