MongoDB Native Node Driver: Explain is Broken?
MongoDB Native Node Driver: Explain is Broken?
我无法使用 Node.js 的本机 mongodb 驱动程序得到正确的解释。
当我使用 mongo shell 时,一切正常。我的语法错了吗?我还有什么地方做错了吗?
db.user.find({},{explain:true}).toArray
db.user.find({}).explain
我都试过了,用户表中有两个文档,它给了我这个输出:
{ cursor: 'BasicCursor',
isMultiKey: false,
n: 1,
nscannedObjects: 1,
nscanned: 1,
nscannedObjectsAllPlans: 1,
nscannedAllPlans: 1,
scanAndOrder: false,
indexOnly: false,
nYields: 0,
nChunkSkips: 0,
millis: 0,
allPlans:
[ { cursor: 'BasicCursor',
isMultiKey: false,
n: 1,
nscannedObjects: 1,
nscanned: 1,
scanAndOrder: false,
indexOnly: false,
nChunkSkips: 0 } ],
server: 'Rocket.local:27017',
filterSet: false,
stats:
{ type: 'LIMIT',
works: 2,
yields: 0,
unyields: 0,
invalidates: 0,
advanced: 1,
needTime: 1,
needFetch: 0,
isEOF: 1,
children: [ [Object] ] } }
这是错误的。当我在 mongo shell 中运行相同的查询时,它给出了正确的输出:
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 2,
"nscannedObjects" : 2,
"nscanned" : 2,
"nscannedObjectsAllPlans" : 2,
"nscannedAllPlans" : 2,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"server" : "Rocket.local:27017",
"filterSet" : false,
"stats" : {
"type" : "COLLSCAN",
"works" : 4,
"yields" : 0,
"unyields" : 0,
"invalidates" : 0,
"advanced" : 2,
"needTime" : 1,
"needFetch" : 0,
"isEOF" : 1,
"docsTested" : 2,
"children" : []
}
我也遇到了其他一些(相关问题)...
Limit = 1 = 1ms, Limit > 1 = 150ms (mongo-melt-down)
Odd MongoDB/Node Explain Results
看起来像是 2.0.x 的问题。已经提交工单。
似乎是 2 的问题。0.x driver:这是一个线程...
我只是 运行 与 2.0.x 和 1.4.x 完全相同的查询。当 Limit = 1 时,两者都执行得很快 ~1ms。当 Limit = 2 时,1.4.x 版本保持在 1ms 左右,但 2.0.x 版本跳到 25ms。所以,这不仅仅是解释输出的问题 - 这只是问题的一个症状。
2015 年 1 月 8 日星期四 9:04:05 上午 UTC-8,Joshua Abrams 写道:有趣...使用 1.4.x 的完全相同的查询会产生正确的解释,其中 n = 2 (等等)。这会影响性能吗?当我 运行 一个查询,其中 Limit = 1 它很快(正如预期的那样)但是当 Limit = 2 它慢了 100 倍...
2015 年 1 月 8 日星期四 8:52:28 上午 UTC-8,christkv 写道: 不是真的。我的建议是制作一个最小的可重现测试用例(代码和数据)并在 jira.mongodb.com 上开票。很难知道会发生什么。它不太可能是 driver 但人们永远不会知道。尝试使用 1.4.x b运行ch 以及至少排除它是 2.0.x b运行ch 问题。
2015 年 1 月 8 日星期四 5:47:45 下午 UTC+1,Joshua Abrams 写道:刚刚检查过,我正在使用 driver 的 2.0.12。还有其他想法吗?
2015 年 1 月 8 日星期四 8:23:16 上午 UTC-8,christkv 写道:解释只是重新调整 driver 中的所有结果而不是部分结果。这样你就得到了计划。想到的一件事可能是您使用的 driver 早于 1.4.19,在 batchSize 设置为 1 时出现错误。
2015 年 1 月 8 日星期四 5:01:42 UTC+1 下午,Joshua Abrams 写道:我最近在使用 driver 时遇到了一系列性能问题。限制 = 1 = 1 毫秒,限制 > 1 = 150 毫秒 (mongo-melt-down)
不确定根本原因是什么 - 当我无法得到正确的解释时无法调试:MongoDB 本机节点 Driver:解释已损坏?
在我做了一堆低级分析和优化后,应该在驱动程序的 2.0.13 中得到修复。
我无法使用 Node.js 的本机 mongodb 驱动程序得到正确的解释。 当我使用 mongo shell 时,一切正常。我的语法错了吗?我还有什么地方做错了吗?
db.user.find({},{explain:true}).toArray
db.user.find({}).explain
我都试过了,用户表中有两个文档,它给了我这个输出:
{ cursor: 'BasicCursor',
isMultiKey: false,
n: 1,
nscannedObjects: 1,
nscanned: 1,
nscannedObjectsAllPlans: 1,
nscannedAllPlans: 1,
scanAndOrder: false,
indexOnly: false,
nYields: 0,
nChunkSkips: 0,
millis: 0,
allPlans:
[ { cursor: 'BasicCursor',
isMultiKey: false,
n: 1,
nscannedObjects: 1,
nscanned: 1,
scanAndOrder: false,
indexOnly: false,
nChunkSkips: 0 } ],
server: 'Rocket.local:27017',
filterSet: false,
stats:
{ type: 'LIMIT',
works: 2,
yields: 0,
unyields: 0,
invalidates: 0,
advanced: 1,
needTime: 1,
needFetch: 0,
isEOF: 1,
children: [ [Object] ] } }
这是错误的。当我在 mongo shell 中运行相同的查询时,它给出了正确的输出:
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 2,
"nscannedObjects" : 2,
"nscanned" : 2,
"nscannedObjectsAllPlans" : 2,
"nscannedAllPlans" : 2,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"server" : "Rocket.local:27017",
"filterSet" : false,
"stats" : {
"type" : "COLLSCAN",
"works" : 4,
"yields" : 0,
"unyields" : 0,
"invalidates" : 0,
"advanced" : 2,
"needTime" : 1,
"needFetch" : 0,
"isEOF" : 1,
"docsTested" : 2,
"children" : []
}
我也遇到了其他一些(相关问题)...
Limit = 1 = 1ms, Limit > 1 = 150ms (mongo-melt-down)
Odd MongoDB/Node Explain Results
看起来像是 2.0.x 的问题。已经提交工单。
似乎是 2 的问题。0.x driver:这是一个线程...
我只是 运行 与 2.0.x 和 1.4.x 完全相同的查询。当 Limit = 1 时,两者都执行得很快 ~1ms。当 Limit = 2 时,1.4.x 版本保持在 1ms 左右,但 2.0.x 版本跳到 25ms。所以,这不仅仅是解释输出的问题 - 这只是问题的一个症状。
2015 年 1 月 8 日星期四 9:04:05 上午 UTC-8,Joshua Abrams 写道:有趣...使用 1.4.x 的完全相同的查询会产生正确的解释,其中 n = 2 (等等)。这会影响性能吗?当我 运行 一个查询,其中 Limit = 1 它很快(正如预期的那样)但是当 Limit = 2 它慢了 100 倍...
2015 年 1 月 8 日星期四 8:52:28 上午 UTC-8,christkv 写道: 不是真的。我的建议是制作一个最小的可重现测试用例(代码和数据)并在 jira.mongodb.com 上开票。很难知道会发生什么。它不太可能是 driver 但人们永远不会知道。尝试使用 1.4.x b运行ch 以及至少排除它是 2.0.x b运行ch 问题。
2015 年 1 月 8 日星期四 5:47:45 下午 UTC+1,Joshua Abrams 写道:刚刚检查过,我正在使用 driver 的 2.0.12。还有其他想法吗?
2015 年 1 月 8 日星期四 8:23:16 上午 UTC-8,christkv 写道:解释只是重新调整 driver 中的所有结果而不是部分结果。这样你就得到了计划。想到的一件事可能是您使用的 driver 早于 1.4.19,在 batchSize 设置为 1 时出现错误。
2015 年 1 月 8 日星期四 5:01:42 UTC+1 下午,Joshua Abrams 写道:我最近在使用 driver 时遇到了一系列性能问题。限制 = 1 = 1 毫秒,限制 > 1 = 150 毫秒 (mongo-melt-down)
不确定根本原因是什么 - 当我无法得到正确的解释时无法调试:MongoDB 本机节点 Driver:解释已损坏?
在我做了一堆低级分析和优化后,应该在驱动程序的 2.0.13 中得到修复。