【发布时间】:2014-12-14 18:22:13
【问题描述】:
我有这样的文档结构
{
id,
companyid,
fieldA1,
valueA1,
fieldA2,
valueA2,
.....
fieldB15,
valueB15,
fieldF150
valueF150
}
我的工作是将 fieldA1*valueA1 、 fieldA2*valueA2 相乘并将其相加为新字段 A_sum = sum(a fields * a values)、B_sum = sum(b fields * b value)、C_sum 等 然后在下一步中我必须生成 final_sum = ( A_sumA_val + B_SumB_val .....)
我已经建模为使用聚合框架和 3 个预测来进行三个计算步骤 - 现在我得到了大约 100 秒的 750.000 个文档,我只有在 _id 上的索引,这是一个 GUID。 CPU 为 15%
我尝试分组以强制并行操作并加载更多 CPU,但似乎赌注更长。 我还能做些什么来让它更快,意味着我要加载更多的 cpu,使用更多的并行性?
我不需要匹配,因为我必须处理所有文档。
【问题讨论】:
-
我真的怀疑你能否加快速度,因为你基本上必须扫描所有文档。
-
算一算,这意味着每次扫描只需要 133 微秒 - 包括查找时间、读取和通过管道放置文档。 SSD 的“寻道时间”大约为 50-100 微秒。这将留下 33-83 微秒来读取和处理数据。
-
而且你不能使用索引查询,如the docs state:“即使管道使用索引,聚合仍然需要访问实际文档;即索引不能完全覆盖聚合管道。”
标签: mongodb aggregation-framework