首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何优化mongodb聚合查询

如何优化mongodb聚合查询
EN

Stack Overflow用户
提问于 2022-01-05 12:22:27
回答 1查看 120关注 0票数 1

我有一个包含大约10.2M records.My聚合查询的集合,大约需要6s才能发送回一个record.How,我优化了聚合查询吗?索引在token0address、token1address和时间戳字段上定义。

以下是我的查询

代码语言:javascript
复制
  {
    $match: {
      $or: [
        {
          token0Address: quoteCurrency,
        },
        {
          token1Address: quoteCurrency,
        },
      ],
      timestamp: {
        $gte: Number(historyDTO.from),
        $lte: Number(historyDTO.to),
      },
    },
  },
  {
    $group: {
      _id: idObj,
      transactionDate: { $first: '$transactionDate' },
      timestamp: { $first: '$timestamp' },
      minimum_price: { $min: '$priceInToken0' },
      maximum_price: { $max: '$priceInToken0' },
      median_price: { $avg: '$priceInToken0' },
      open_price: { $first: '$priceInToken0' },
      close_price: { $last: '$priceInToken0' },
      volume: { $sum: '$priceInToken0' },
    },
  },
  { $sort: { timestamp: -1 } },
  { $skip: 0 },
  { $limit: Number(historyDTO.countback) },

idObj看起来this.It也包含其他组合

代码语言:javascript
复制
if (last === 'H') {
idObj = {
  day: { $dayOfYear: '$transactionDate' },
  hour: {
    $subtract: [
      { $hour: '$transactionDate' },
      { $mod: [{ $hour: '$transactionDate' }, parseInt(exceptLast)] },
    ],
  },
};

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-05 13:43:24

我将提到一些我认为可以提高性能的更改,但是总的来说,我会说这是非常优化的,我个人不会花更多的时间来优化它,除非它是许多进程的一个不可分割的部分,并且运行时的每毫秒都很重要。

  1. token0Addresstoken1Address字段创建复合索引,目前Mongo正在使用这些索引,但是它需要基于timestamp获取和匹配文档。如果可以将这两个索引构建为复合{token0Address: 1, timestamp: 1},那么Mongo可以更快地完成$match阶段。(显然取决于给定的范围和匹配文档的规模).

如果可能的话,

  1. 修改idObj,您提到了idObj有不同的结构,可能有些结构的冗余可以消除,在这里,由于$mod操作符的动态使用,我们不能真正做任何事情,另一种可能是预处理所需的字段(例如,在本例中保存$hour结果,因此我们停止使用这个操作)。

  1. ,最后一个选项更像是一个技巧,但是如果您已经知道了数据分发和查询的启发式,那么您可能能够添加早期的限制,处理更少的数据。这通常不是一个现实的选择,特别是在数据规模较低的情况下。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70592798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档