Javascript 奇数MongoDB/节点解释结果
我想弄清楚这件事。。。任何帮助都会很棒 我在RoboMongo CLI中运行相同的查询:Javascript 奇数MongoDB/节点解释结果,javascript,node.js,mongodb,database,Javascript,Node.js,Mongodb,Database,我想弄清楚这件事。。。任何帮助都会很棒 我在RoboMongo CLI中运行相同的查询: db.post.find({utc:{$lte:utc}}) .sort({utc:-1}).limit(100).hint({utc:-1}) 和使用本机驱动程序的我的节点应用程序: mo.post.find({utc:{$lte:utc}},{ fields:{geo:0, bin:0, flg:0, mod:0, edt:0}, hint:{utc:-1}, sort:{utc:-1}, l
db.post.find({utc:{$lte:utc}})
.sort({utc:-1}).limit(100).hint({utc:-1})
和使用本机驱动程序的我的节点应用程序:
mo.post.find({utc:{$lte:utc}},{
fields:{geo:0, bin:0, flg:0, mod:0, edt:0},
hint:{utc:-1}, sort:{utc:-1}, limit:100
}).toArray(function(err, result)
出于某种原因,演出与以往大不相同。最上面的运行时间不到1ms,最下面的运行时间超过100ms。当我回顾“解释”时,我得到:
"cursor" : "BtreeCursor utc_-1",
"isMultiKey" : false,
"n" : 100,
"nscannedObjects" : 100,
"nscanned" : 100,
"nscannedObjectsAllPlans" : 100,
"nscannedAllPlans" : 100,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
"utc" : [
[
ISODate("2015-01-07T00:47:32.786Z"),
true
]
]
},
对于慢的一个:
cursor: "BtreeCursor utc_-1"
isMultiKey: false
n: 1
nscannedObjects: 1
nscanned: 1
nscannedObjectsAllPlans: 1
nscannedAllPlans: 1
scanAndOrder: false
indexOnly: false
nYields: 0
nChunkSkips: 0
millis: 0
indexBounds: {
utc: [1]
0: [2]
0: "2015-01-07T22:50:05.000Z"
1: true
-
-
}-
有人知道这里会发生什么吗?它们正在使用相同的索引运行相同的数据库?更新:似乎是2.0.x版的问题 我刚刚用2.0.x和1.4.x运行了完全相同的查询。当Limit=1时,两者都执行快速~1ms。当Limit=2时,1.4.x版本保持在1ms左右,而2.0.x版本则跳到25ms。所以,这不仅仅是解释输出的问题——这只是问题的一个症状 2015年1月8日星期四UTC-8上午9:04:05,约书亚·艾布拉姆斯写道: 有趣的使用1.4.x进行完全相同的查询,可以正确解释n=2的位置,依此类推。这会影响性能吗?当我运行一个Limit=1的查询时,它的速度和预期的一样快,但当Limit=2时,它的速度慢了100倍 2015年1月8日星期四UTC-8上午8:52:28,christkv写道: 不是真的。我的建议是制作一个最小的可复制的测试用例代码和数据,并在jira.mongodb.com上打开一张罚单。很难知道会发生什么。不太可能是司机,但谁也不知道。尝试使用1.4.x分支,至少要排除它是2.0.x分支的问题 2015年1月8日星期四下午5:47:45 UTC+1时,约书亚·艾布拉姆斯写道: 刚刚检查过,我正在使用驱动程序的2.0.12。还有其他想法吗 2015年1月8日星期四UTC-8上午8:23:16,christkv写道: explain只是重新调整驱动程序中的所有结果,而不是部分结果。这样你就得到了计划。我想到的一件事可能是,您使用的驱动程序早于1.4.19,在batchSize设置为1时出错 2015年1月8日星期四下午5:01:42 UTC+1时,约书亚·艾布拉姆斯写道: 我最近和司机有一系列的性能问题。 不确定根本原因是什么-当我无法得到正确的解释时,调试是不可能的:
不能为同一查询解释它们-如果它们具有相同的limit+skip值,则同一查询应产生相同的n。你能再检查一下你是否有正确查询的解释吗?还有,时间信息从哪里来?这很奇怪-它是完全相同的查询-并且它产生相同的结果。N=1的解释毫无意义,而这是一个永远无法解释的问题。两者都击中了同一个表,时间是从RoboMongo上的快速查询和HTTP客户端调用本地主机上的慢速查询通过本机节点驱动程序运行的。我在这里也看到了古怪的行为:不同但可能相关?您能在mongo shell中运行查询并发布解释吗?我对机器人很怀疑,但我对它也不太了解。它和机器人一样。问题似乎在于本机驱动程序解释: