【问题标题】:MongoDB NodeJS Native Driver(mongodb) vs Mongo Shell PerformanceMongoDB NodeJS Native Driver(mongodb) vs Mongo Shell 性能
【发布时间】:2020-01-07 10:30:30
【问题描述】:

我在表 1 的 MongoDB 中有 10000 条记录。

数据如下:

"_id" : ObjectId("5d5e500cb89312272cfe51fc"),
"cities" : [ 
    {
        "cityid" : "5d5d2205cdd42d1cf0a92b33",
        "value" : "XYZ"
    }, 
    {
        "cityid" : "5d5d2214cdd42d1cf0a92b34",
        "value" : "Rowcliffe"
    }, 
],

查询如下:

      {
        $unwind: "$cities"
      },
      { "$addFields": { "cities.cityid": { "$toObjectId": "$cities.cityid" } } },
      {
        $lookup: {
          from: "cities",
          localField: "cities.cityid",
          foreignField: "_id",
          as: "docs"
        }
      },

所以,我在这里用 Robo3T 和 mongo shell 中的查找查询在另一个表中查找 cityid。一切正常。

我在 0.08 秒 内获得 10000 条记录的结果。

现在,在 nodejs 中使用 mongodb 原生驱动程序运行相同的查询,这里 m 在 15 秒内得到结果。

我不明白为什么这之间有如此巨大的差异。我不知道我在 nodejs 中做错了什么。我在 nodejs 中使用 mongodb 本机驱动程序编写了相同的查询。

请让我知道我做错了什么。

为什么这个nodejs mongodb原生驱动性能这么差?

【问题讨论】:

  • 在 robo3t 中为查询添加默认限制。试试把DBQuery.shellBatchSize = 500000; 放上去看看node.js的性能一样
  • @ManuelSpigolon 正确!将 shellBatchsize 更改为 500000 后,我得到与节点 js 相同的时间 15 秒。这意味着只有 10000 条记录的 mongodb 加入速度要慢得多..!!

标签: node.js mongodb mongodb-query mongodb-.net-driver node-mongodb-native


【解决方案1】:

在 Robo3T 中,有一个默认查询限制,因此它需要更少的时间,因为当它获取限制时它会退出。

为避免这种情况,您需要在查询执行中添加此片段:

// change the limit size, default 50
DBQuery.shellBatchSize = 500000; 

【讨论】:

  • 感谢您的回答。但为什么我在查找 10000 条记录时会出现如此多的延迟..??它带有索引的简单聚合查询..
  • 在这种情况下,您可以检查查询的explain,这样您将了解您是否使用索引或者您正在执行tablescan
  • 我试过解释(),它显示它使用索引....仍然花费太多时间
  • 我认为查找它很重,因为不建议使用 no-sql 中的“join”,您可以考虑删除该部分并添加一些代码来获取您需要的数据:2 查询并通过地图通过代码加入
  • 但我认为聚合比 MapReduce 更快,那么它如何提供比这更胖的结果??
猜你喜欢
  • 1970-01-01
  • 2020-01-28
  • 2021-04-28
  • 2018-12-11
  • 2013-12-04
  • 2018-06-15
  • 2012-11-07
  • 2019-03-12
  • 2014-09-12
相关资源
最近更新 更多