我和我的队友正在使用mongodb 1.8.2。运行以下地理空间索引查询时,三分之二的环境正常工作:
db.runCommand( {geoNear: "places", near: [-46.65069190000003, -23.5633661],
maxDistance: 0.0006278449223041908, spherical: true,
distanceMultiplier: 6371.0 });
针对以下4032文档集合:
{
"ns" : "places",
"count" : 4032,
"size" : 1645724,
"avgObjSize" : 408.1656746031746,
"storageSize" : 2785280,
"numExtents" : 4,
"nindexes" : 2,
"lastExtentSize" : 2097152,
"paddingFactor" : 1,
"flags" : 1,
"totalIndexSize" : 344064,
"indexSizes" : {
"_id_" : 180224,
"location_2d" : 163840
},
"ok" : 1
}
在两个不同的mongodb实例(一个OSX Lion,其他Ubuntu 11.04服务器)中运行它,结果集包含100条记录,其中包含以下执行统计信息:
"stats" : {
"time" : 0,
"btreelocs" : 522,
"nscanned" : 522,
"objectsLoaded" : 146,
"avgDistance" : 0.4824636947838318,
"maxDistance" : 0.00012637762666867466
},
(目前为止:查询正在使用索引,正如您可以通过btree节点遍历的数量看到的那样)
但是在其中一个环境(另一个OS X Lion)中,结果与完全相同的数据集和索引完全不同(3个而不是其他机器100个):
"stats" : {
"time" : 0,
"btreelocs" : 45,
"nscanned" : 50,
"objectsLoaded" : 6,
"avgDistance" : 0.865580980499049,
"maxDistance" : 0.0001845858750423995
},
值得注意的是,此mongod实例中的查询运行方式不同。我想知道的是哪些因素可以实现这一目标
到目前为止我尝试了什么:
版本信息:
db version v1.8.2, pdfile version 4.5
Tue Aug 23 23:33:22 git version: 433bbaa14aaba6860da15bd4de8edf600f56501b
答案 0 :(得分:1)
所以我真的想知道这里的数据完整性。 “坏”数据集基本上完成了大约十分之一的良好数据集工作。几乎就像它只是决定中途停止而不是告诉你发生了什么。
MongoDB有一个validate
命令,可以仔细检查集合的完整性。你能运行它,看看有没有出现?
链接到命令here。
答案 1 :(得分:0)
如果返回的数字正好是100,那么我怀疑你的结果集是不同的,因为有超过100个指定距离的点。因此,DB可以自由选择符合条件的前100个点。
有没有办法将结果大小增加到像2000这样的东西或减少到更小的距离。