mongodb-query - Mongo DB join 集合执行时间
问题描述
我有一个集合,每小时将追加 15000 条记录。我需要将此数据与另一个集合连接(CMDB 集合 - 80000 条记录)
数据:
_id.* = 数据来自名为“传入”的集合 $$ = 数据来自 CMDB 集合
使用的查询:
{
$lookup:
{
from: "CMDB",
let: { DataSvrName: "$_id.DataSvrName",ServerIP: "$_id.Server IP",ServerType: "$_id.Server Type",ShortHostName: "$_id.ShortHostName",ServerPort:"$Server Port"},
pipeline: [
{$match: { $expr: {$or: [
{$and: [
{$regex: ["$$ServerType", "MS SQL SERVER|ORACLE|SYBASE" ]},
{$eq: [ "$$DataSvrName", "$DataSvrName"]}
]
},
{$and : [
{ $eq: [ "$$ServerType", "MS SQL SERVER" ]},
{ $or :[{$eq: [ "$$ServerIP", "$Machine_IP" ] },{$eq: [ "$$DataSvrName", "$ShortHostName" ] }]} ]
},
{$and : [
{$eq: [ "$$ServerType", "SYBASE" ]},
{ $and : [{$eq: [ "$$DataSvrName", "$ServerName" ] },{$eq: [ "$$ServerPort", {$toString:"$ServerPort" }] }]} ]
},
{$and : [
{$regex: [ "$$ServerType","MONGODB|DB2|SYBASE|POSTGRESQL"]},
{ $and : [{$eq: [ "$$ServerIP", "$Machine_IP" ] },{$eq: [ "$$ServerPort", {$toString:"$ServerPort" } ] }]} ]
},
{$and : [
{$and:[{$eq: [ "$$ServerType", "ORACLE" ]},{$eq:["$$DataSvrName", null]}]},
{$or :[{$eq: [ "$$ServerIP", "$Machine_IP" ]},{$eq: [ "$$ShortHostName","$hortHostName" ] } ]} ]
}
]}}},{$limit:1},
{$project: {*:1}}
],
as: "CMDB"
},
}
传入收集数据限制为 100 个,执行时间为 42 秒,传入收集数据限制为 2000 个,执行时间为 9.26 秒。
如果我们执行 15000 条记录,应用程序就会超时。
问题 :
- 我们可以改进查询以减少执行时间吗?
- 还有其他加入收藏的可能性吗?
解决方案
推荐阅读
- node.js - 有没有更好的方法来获取 Stripe 总费用?
- smt - 有没有人可以帮我做smt作业?
- intellij-idea - 如何制作像 Gherking .feature 文件一样的简单 .file?
- javascript - Materialize 的下拉 JS 问题无法正常工作
- postgresql - Postgres SELECT查询不使用索引
- vsphere - 由于“无效的内存地址或 nil 指针取消引用”,vsphere-csi-controller 无法启动
- html - 仅将过滤器添加到SVG 内部,而不是整个 SVG
- javascript - 可观察区间值不能用于算术运算
- javascript - React JS-隐藏描述div,除非发了相应的牌
- haskell - 如何在 Nix 中使用特定版本的 Haskell 包?