MongoDB总存储大小

nab*_*nab 6 mongodb

我有一个分片和复制的MongoDB,有数十亿条记录.我知道Mongo用一些填充因子写数据,以允许快速更新,我也知道要复制数据库Mongo应该存储操作日志,这需要一些(实际上,很多)空间.即使有这些知识,我也不知道如何根据典型数据库记录的大小来估计Mongo所需的实际大小.到目前为止,每周维修之间的差异为2 - 3.

所以问题是:如何根据平均记录大小(以字节为单位)估算MongoDB所需的总存储大小?

Ada*_*ord 4

简短的回答是:你不能,不能仅仅基于平均值。文档大小(至少不是以任何准确的方式)。

更详细地解释一下:

磁盘上所需的空间不仅仅是平均文档大小的函数。您创建的任何索引也需要空间。然后,如果您确实触发这些移动,则需要空间(尽管有填充,这种情况确实会发生) - 该空间被放置在要重新使用的列表中,但根据您随后插入的数据,可能会也可能不会重新利用那个空间。

您还可以添加这样一个事实:预分配意味着,当分配新的数据文件时,少数文档偶尔会将磁盘空间利用率增加约 2GB。当然,如果有足够的数据,这本质上是一个舍入误差,但值得牢记。

假设使用模式一致,估计此类数据与大小比率的唯一方法是针对特定用例随时间变化趋势,并跟踪磁盘空间使用情况与插入数据的关系(文档数量可能优于数据量)取决于文档大小的变化)。

同样,如果您跟踪插入率、文档大小以及从重新同步/修复中获得的空间。仅供参考 - 您可以从头开始重新同步辅助副本以获得数据文件的“新鲜”副本,而不是运行修复,这可以减少破坏性,并且根据您的设置使用更少的空间。