gpt4 book ai didi

mongodb - 根据聚合结果过滤大型数据集

转载 作者:可可西里 更新时间:2023-11-01 10:42:21 26 4
gpt4 key购买 nike

我需要使用 MongoDB 执行某种“高级搜索”功能。这是一个运动系统,每个赛季的球员统计数据都是这样收集的:

{
player: {
id: int,
name: string
},
goals: int,
season: int
}

用户可以跨赛季搜索数据,例如:我想搜索从 2012 年到 2016 年赛季进球数 > 30 的球员。

我可以使用 mongodb 聚合:

db.stats.aggregate( [
{ $match: { season: { $gte: 2014, $lte: 2016 } } }
{ $group: { _id: "$player", totalGoals: { $sum: "$goals" } } },
{ $match: { $totalGoals: { $gte: 30 } } },
{ $limit: 10 },
{ $skip: 0 }
] )

工作正常,对于超过 300 万条记录的集合,速度是可以接受的。

但是,如果用户只想搜索更大的赛季范围,可以说:球员生命周期统计。聚合结果非常非常非常慢。我知道 MongoDB 必须浏览所有文档并计算 $totalGoals。

我只是想知道是否有更好的方法可以解决这个性能问题?

最佳答案

  1. 您可以预先计算过去季节的数据并进行两步查询:

    a) 获取过去的数据b) 获取当前数据

  2. 您可以尝试优化该查询的索引

  3. 硬件:使用SSD

  4. 硬件:更多内存

  5. 引入分片来拆分负载

关于mongodb - 根据聚合结果过滤大型数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37053405/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com