聚合操作代码
db.sales.aggregate([
{
$group: {
_id: "$productId",
totalRevenue: { $sum: { $multiply: ["$quantity", "$price"] } }
}
},
{
$sort: {
totalRevenue: -1
}
}
]);
大数据量性能优化
- 索引优化:
- 为
productId
、quantity
和price
字段创建复合索引。如果数据主要按productId
聚合,可创建以productId
为前缀的复合索引,如db.sales.createIndex({productId: 1, quantity: 1, price: 1})
。这样在$group
操作时,能利用索引快速定位和分组数据。
- 分块处理:
- 对于大数据量,可以将数据按
productId
范围分成多个块。例如,根据productId
的哈希值或者productId
的字符范围进行分块。对每个块分别进行聚合操作,最后再将各个块的聚合结果汇总并排序。这可以减少单次聚合操作的数据量,提高性能。
- 使用内存优化:
- 合理分配MongoDB服务器的内存,确保聚合操作有足够的内存可用。MongoDB在执行聚合操作时,会尽可能在内存中处理数据。如果内存不足,部分数据需要写入磁盘,这会显著降低性能。可以通过调整
--wiredTigerCacheSizeGB
等参数来优化内存使用。
- 执行计划分析:
- 使用
explain
方法分析聚合操作的执行计划,如db.sales.aggregate([...]).explain()
。根据执行计划的结果,针对性地调整索引、优化管道操作顺序等,以提高性能。