【发布时间】:2012-01-26 07:35:57
【问题描述】:
我正在寻找一种工具,可以根据以下几个信号来准确估计 MongoDB 索引的大小:
- 我的收藏中有多少文档
- 索引字段的大小
- 如果不是 ObjectId,我使用的 _id 的大小
- 地理/非地理
有没有人偶然发现过这样的事情?我可以想象它会非常有用,因为一旦 Mongo 遇到内存墙并且文档开始被分页到磁盘,它的性能就会下降。如果我有一个正常运行的数据库并且想要添加另一个索引,那么我知道它是否太大的唯一方法就是实际添加它。
它不需要精确到一点点,但是对于 B-Trees 和索引实现的一些假设,我相信它可能足够合理以提供帮助。
如果这还不存在,我想构建并开源它,所以如果我错过了这个计算所需的任何参数,请在你的答案中包括。
【问题讨论】:
-
将您的工具(以填补过渡时期的空白)与 MongoDB 团队对内置工具的请求相一致可能是值得的。
-
你真的为此编写了一个工具吗?
-
我做了,但是结果不太令人满意。当使用具有现有索引的真实数据进行测试以进行比较时,我的工具会预测索引大小略小于实际大小的两倍。我正在调查这是否是我的代码中的错误,或者公式是否只是非常粗糙。当我发现更多信息时会在这里更新。
-
@Stennie 我可能会撤回一个旧线程。但是有没有官方的综合方法来识别这一点?
-
@Naman Tyler 2011 年的回答描述了大约 MongoDB 2.0 的原始 MMAP 存储引擎,但这个公式绝对不适用于现代版本的 MongoDB。 WiredTiger 是 MongoDB 3.2+ 中的默认存储引擎,使用索引前缀压缩,因此索引大小将根据键值的分布而变化。还有多种索引类型和选项可能会影响大小。进行合理估计的最佳方法是使用经验估计和具有代表性的测试数据来预测您的预期增长,因此我会将您对 Ostati 2014 年的回答投赞成票。
标签: mongodb indexing b-tree mongodb-indexes