什么可以导致相同的集合相同的查询,索引相同的方式返回不同的结果?

时间:2011-08-24 02:37:09

标签: mongodb indexing geospatial

我和我的队友正在使用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实例中的查询运行方式不同。我想知道的是哪些因素可以实现这一目标

到目前为止我尝试了什么:

  • Mongodb服务器和客户端版本相同(包括git hash)
  • 已经消除了所谓的奇怪数据库,从BSON转储恢复并重新创建了索引

版本信息:

db version v1.8.2, pdfile version 4.5
Tue Aug 23 23:33:22 git version: 433bbaa14aaba6860da15bd4de8edf600f56501b

2 个答案:

答案 0 :(得分:1)

所以我真的想知道这里的数据完整性。 “坏”数据集基本上完成了大约十分之一的良好数据集工作。几乎就像它只是决定中途停止而不是告诉你发生了什么。

MongoDB有一个validate命令,可以仔细检查集合的完整性。你能运行它,看看有没有出现?

链接到命令here

答案 1 :(得分:0)

如果返回的数字正好是100,那么我怀疑你的结果集是不同的,因为有超过100个指定距离的点。因此,DB可以自由选择符合条件的前100个点。

有没有办法将结果大小增加到像2000这样的东西或减少到更小的距离。