MongoDB C#查询性能比mongotop报告差得多
我在Mongo方面有很多经验,但对于这个问题,我几乎要落泪了(当然,这是在发行前一天不知从哪里冒出来的) 基本上,我是通过查询数据库来检索文档的,但它通常比它应该的要差一个数量级(甚至两个数量级),特别是因为查询没有返回任何内容 查询:MongoDB C#查询性能比mongotop报告差得多,mongodb,mongodb-.net-driver,Mongodb,Mongodb .net Driver,我在Mongo方面有很多经验,但对于这个问题,我几乎要落泪了(当然,这是在发行前一天不知从哪里冒出来的) 基本上,我是通过查询数据库来检索文档的,但它通常比它应该的要差一个数量级(甚至两个数量级),特别是因为查询没有返回任何内容 查询: //searchQuery ex: { "atomic.Basic^SessionId" : "a8297898-7fc9-435c-96be-9c5e60901e40" } var doc = FindOne(searchQuery); 说明: {
//searchQuery ex: { "atomic.Basic^SessionId" : "a8297898-7fc9-435c-96be-9c5e60901e40" }
var doc = FindOne(searchQuery);
说明:
{
"cursor":"BtreeCursor atomic.Basic^SessionId",
"isMultiKey" : false,
" n":0,
"nscannedObjects":0,
"nscanned":0,
"nscannedObjectsAllPlans":0,
"nscannedAllPlans":0,
"scanAndOrder":false,
"indexOnly":false,
"nYields":0,
"nChunkSkips":0,
"millis":0,
"indexBounds":{
"atomic.Basic^SessionId":[
[
"a8297898-7fc9-435c-96be-9c5e60901e40",
"a8297898-7fc9-435c-96be-9c5e60901e40"
]
]
}
}
这通常需要50-150毫秒,尽管mongotop报告的读取时间最多为15毫秒(这应该超过几个查询)。数据库中只有6k个文档(索引中只有2k左右,解释说它正在使用索引),而且由于正在搜索的文档不存在,因此不可能出现反序列化问题
每一个查询(大多数情况下都是子ms)都没有那么糟糕,当然B-树不够大,没有那么大的差异
任何想法都会得到我永远的感激 MongoTop未报告总查询时间。它报告MongoDB持有特定锁的时间 根据解释,该查询在0毫秒内返回(速度非常快)。您所描述的内容听起来像是网络延迟。ping节点时的延迟是多少?网络可能是片状的吗
您使用的是哪个版本的MongoDB?考虑将MunGDB和C驱动程序升级到最新的稳定版本。这可能是线程问题吗?我删除了数据库,虽然没有条目,但仍然要花很多时间!正在从未在其上创建集合的线程调用该集合,但调用新的GetCollection也不会帮助您。如果您使用的是windows,windows上的MongoDB通常比其他操作系统慢。根据MongoDB C#驱动程序,它的性能应该与Java等其他托管语言类似(除非查询是使用泛型的强类型查询,否则性能可能会非常不同)。包含lambda表达式的linq查询速度也较慢。是否在导线级别测量150ms?(您可以尝试wireshark或某些网络嗅探器,查看从查询端到tcp级别的查询响应是否消耗了查询/响应时间,如果没有,则可能是您的驱动程序或应用程序造成了延迟。)您是否在shell中尝试了查询?它表现出同样的行为吗?您的实验是否依赖于来自“冷”应用程序状态的单个查询快照?(可能与首次建立mongo服务器、replset连接等有关)