2011-08-24 9 views
1

我和我的隊友都在使用mongodb 1.8.2。什麼會導致相同的查詢在相同的集合索引相同的方式返回不同的結果?

db.runCommand({geoNear: "places", near: [-46.65069190000003, -23.5633661], 
       maxDistance: 0.0006278449223041908, spherical: true, 
       distanceMultiplier: 6371.0 }); 

對4032個文檔以下集合:三分之二的環境中運行下面的地理空間索引的查詢時,都OK工作

{ 
    "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獅子,其他的Ubuntu 11.04服務器)結果集包含了100條記錄與以下執行統計:

"stats" : { 
    "time" : 0, 
    "btreelocs" : 522, 
    "nscanned" : 522, 
    "objectsLoaded" : 146, 
    "avgDistance" : 0.4824636947838318, 
    "maxDistance" : 0.00012637762666867466 
}, 

(OK至今:查詢使用索引,你CA N乘B樹節點的量見行走)

但在(另一OS X的獅子)的環境中的一個的結果是顯着不同的(3代替100從其他機器)具有完全相同的數據集和索引:

"stats" : { 
    "time" : 0, 
    "btreelocs" : 45, 
    "nscanned" : 50, 
    "objectsLoaded" : 6, 
    "avgDistance" : 0.865580980499049, 
    "maxDistance" : 0.0001845858750423995 
}, 

值得注意的是,查詢在此mongod實例中以不同方式運行。我想知道是哪些因素可以做到這一點

我試過至今:

  • MongoDB的服務器和客戶端的版本是相同的(包括git的哈希)
  • 據推測是怪異的數據庫已經被消滅了,從BSON轉儲恢復和重建索引

版本信息:

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

回答

1

所以我實際上想知道這裏的數據完整性。 「壞」的數據集基本上做了好數據集工作的十分之一左右。幾乎就像它只是決定停下來,不告訴你發生了什麼事情。

MongoDB有一個validate命令,可以仔細檢查集合的完整性。你可以運行它並查看是否有任何事情發生?

鏈接到命令here

+0

謝謝!但不幸的是我沒有機會在集合上運行這個命令,因爲我設法通過db.dropDatabase()正確地刪除數據庫。我最好的猜測是,它會指出造成查詢行爲的數據問題。我以前的擦拭嘗試不起作用的原因是因爲我刪除了相信mongod已關閉的文件(但是一旦我殺死它,它就會自動由Cellar啓動)。 –

0

如果返回的數字恰好爲100,那麼我懷疑您的結果集是不同的,因爲指定距離有超過100個點。因此數據庫可以自由挑選符合標準的前100個點。

有沒有辦法將結果大小增加到2000或更小的距離。

+0

總體感覺,但在這種情況下,結果集的差異太大了(3對比其他兩個環境中的100)。這個問題我沒有說清楚。剛編輯它:) –

相關問題