这是非常依赖系统的,但是几乎可以肯定的是,我们一定会越过一些任意悬崖进入“真正的麻烦”。我很好奇,存在什么样的经验法则才能获得良好的RAM与磁盘空间比率。我们正在计划下一轮系统,需要就RAM,SSD以及每个新节点获得多少进行一些选择。
但是现在了解一些性能细节!
在单个项目运行的正常工作流程中,MongoDB的写入百分比很高(70-80%)。一旦处理流水线的第二阶段命中,它的读取就非常高,因为它需要对在处理的前半部分中标识的记录进行重复数据删除。这是用于“将工作集保存在RAM中”的工作流,我们正在围绕该假设进行设计。
来自最终用户派生来源的随机查询不断打中整个数据集;尽管频率不规则,但是尺寸通常很小(每10个文档一组)。由于这是面向用户的,因此答复必须低于3秒的“立即无聊”阈值。这种访问模式不太可能位于缓存中,因此很可能会导致磁盘命中。
辅助处理工作流程是对以前处理运行的高度了解,它可能需要几天,几周甚至几个月的时间,并且运行频率不高,但仍然需要压缩。上一次处理中最多可以访问100%的文档。我怀疑没有多少缓存预热可以帮助解决这个问题。
成品文档的大小差异很大,但中位数约为8K。
正常项目处理中的高读取部分强烈建议使用副本服务器来帮助分配读取流量。我在其他地方读过,对于慢速磁盘,从1:10 RAM-GB到HD-GB是一个很好的经验法则,由于我们正在认真考虑使用速度更快的SSD,因此我想知道是否存在类似的规则快速磁盘的经验。
我知道我们在使用Mongo时不会真正使用所有缓存,这就是为什么我正在寻找一种方法来设计可以经受这种使用的系统。在整个数据集将可能是最结核病的半年内,并保持增长。