Py学习  »  MongoDB

可以在<1秒内通过SQL运行此查询,但聚合MongoDB不能在45分钟内从具有相同索引的相同数据集运行

SuperSecretAndHiddenFromWork • 4 年前 • 228 次点击  

我有一个数据集(1100万行),其中包括支付给公司的款项,结构如下:

id : 12345678,
company_id : 123456,
payment_value : 50,
payer_id: 111111,
payment_date: "20/01/2017"
payer_name: "John Smith",
...<70ish more columns with mostly blank data>...

有60万个公司ID,我想将其分组,并显示支付总额最高的公司ID

这是我拥有的mongo shell(db版本:4.0.1)代码:

db.pay.aggregate([
 {$project: {_id:1, company_id:1, payment_value:1}},
 {$group: {_id: "$company_id", total_value: {$sum: "$payment_value"}}},
 {$sort: {total_value: -1},
 {$limit: 1}],
 {allowDiskUse: true})

它不会在45分钟内运行!我有一个关于公司ID的索引,这看起来像是一个直接的查询

我把它加载到Postgresdb中并写道:

SELECT 
company_id,
SUM(payment_value)
FROM payments
GROUP BY 1
ORDER BY 2 DESC
LIMIT 1

这花了1秒钟。我对mongodb collection和postgres表使用相同的索引方法

我在这里对MongoDB做了什么错误?

谢谢你抽出时间

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38537
 
228 次点击  
文章 [ 1 ]  |  最新文章 4 年前
SuperSecretAndHiddenFromWork
Reply   •   1 楼
SuperSecretAndHiddenFromWork    5 年前

我已经设法在一定程度上提高了性能:

  • 通过在终端中设置ulimits和rlimits来更改MongoDB可用资源的限制 -在聚合查询结束时使用allowdishuse:true