mongodb - mongodb中集合的最大大小是多少

标签 mongodb mongoose

我想知道 mongodb 中集合的最大大小是多少。 在 mongodb 限制文档中提到单个 MMAPv1 数据库的最大大小为 32TB。

这意味着集合的最大大小是 32TB? 如果我想在一个集合中存储超过 32TB 的数据,解决方案是什么?

最佳答案

存在理论上的限制,如下所示,但即使是下限也相当高。正确计算极限并不容易,但数量级应该足够了。

mmapv1

实际限制取决于一些因素,例如分片名称的长度等(如果您有几十万个,则总结一下),但这里是使用真实数据进行的粗略计算。

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

每台服务器最多可以有 500,000 个 block 。 500,000 * 250byte 等于 125MB 用于每个分片的 block 信息。因此,如果我们将所有内容最大化,则每个分片的每个分片有 125.000112 MB。将 32TB 除以该值表明我们可以在一个集群中拥有最多略低于 256,000 个分片。

每个分片又可以容纳 32TB 的数据。 256,000 * 32TB 为 8.19200 EB 或 8,192,000 TB。这将是我们示例的限制。

假设它是 8 艾字节。到目前为止,这可以很容易地翻译为“足够用于所有实际目的”。给你一个印象:国会图书馆(可以说是世界上最大的图书馆之一)拥有的所有数据都包含大约 20TB 的数据,包括音频、视频和数字 Material 。你可以将它放入我们理论上的 MongoDB 集群中大约 400,000 次。请注意,这是使用保守值的最大尺寸的下限。

有线老虎

现在好的部分:WiredTiger 存储引擎没有这个限制:数据库大小没有限制(因为可以使用多少数据文件没有限制),所以我们可以拥有无​​限数量的分片。即使我们在 mmapv1 上运行这些分片并且在 WT 上只有我们的配置服务器,a 的大小也几乎是无限的——在 64 位系统上限制为 16.8M TB 的 RAM 可能会在某处导致问题并导致 config.shard 集合被交换到磁盘,停止系统。我只能猜测,因为我的计算器拒绝使用该区域中的数字(而且我懒得手动操作),但我估计了两位数 yottabyte 区域的限制(以及在某处托管该区域所需的空间)相当于德克萨斯州的大小)。

结论

不要担心分片环境中的最大数据大小。无论如何,这已经足够了,即使是最保守的方法。使用分片,你就完成了。顺便说一句:即使是 32TB 也是一大堆数据:我所知道的大多数集群拥有较少的数据和分片,因为 IOPS 和 RAM 利用率超过了单个节点的容量。

关于mongodb - mongodb中集合的最大大小是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33939587/

相关文章:

database - 在本地使用像 mLab 这样的 DBaaS 而不是 MongoDB 有什么优势吗?

node.js - Mongodb:此 map 集层中不允许使用 $filter

javascript - Mongoose 在嵌套模式中查找

node.js - mongoose如何防止已有用户名的用户修改用户名

mongoose - 在 Mongoose 中填充是什么意思?

java - Spring JPA : PropertyReferenceException: No property findAll found for type

sql - NoSQL和SQL如何选择?

javascript - 使用 Mongoose 更新数组中的特定对象时出错

node.js - Bcrypt 密码比较不起作用。 Node.js Express App 中甚至 user.password 为空

javascript - 覆盖模型错误: Cannot overwrite `Product` model once compiled