2012-09-03 65 views
6

我拥有数十万条记录的分片和复制MongoDB。我知道Mongo使用一些填充因子编写数据,以允许快速更新,而且我也知道要复制数据库,Mongo应该存储操作日志,这需要一些(实际上很多)空间。即使有了这些知识,我也不知道如何根据典型数据库记录的大小估算Mongo所需的实际大小。到目前为止,我每周修复的次数都是2-3次。Total MongoDB存储大小

所以问题是:如何估计MongoDB所需的总存储大小,以字节为单位的平均记录大小?

回答

4

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

为了更冗长解释:

所需的磁盘空间不是简单的平均文件的大小的功能。您创建的索引还需要空间。如果你确实触发了这些动作(尽管有填充,这确实发生了),那么就有了所需的空间 - 这个空间被放置在一个列表中被重用,但取决于你随后插入的数据,它可能或不可能重新使用该空间。

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

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

同样,如果您追踪插入率,doc大小以及从重新同步/修复中获得的空间。仅供参考 - 您可以重新同步副本以获得数据文件的“全新”副本,而不是执行修复,这可能会造成较小的破坏性,并且根据您的设置使用更少的空间。