我嘗試使用mongoDB作爲搜索引擎,並意識到這是一場災難。我試着做對5百萬個地理位置文件的簡單查詢。如何使用mongoDB作爲搜索引擎?
db.runCommand({ dropDatabase: 1 })
db.createCollection("places");
db.places.createIndex({ "locs.loc" : "2dsphere" })
function randInt(n) { return parseInt(Math.random()*n); }
function randFloat(n) { return Math.random()*n; }
for(var j=0; j<10; j++) {
print("Building op "+j);
var bulkop=db.places.initializeOrderedBulkOp() ;
for (var i = 0; i < 1000000; ++i) {
bulkop.insert(
{
locs: [
{
loc : {
type: "Point",
coordinates: [ randFloat(180), randFloat(90) ]
}
},
{
loc : {
type: "Point",
coordinates: [ randFloat(180), randFloat(90) ]
}
}
]
}
)
};
print("Executing op "+j);
bulkop.execute();
}
,然後我跑不匹配文檔的查詢:
db.runCommand(
{
geoNear: "places",
near: { type: "Point", coordinates: [ 73.9667, 40.78 ] },
spherical: true,
query: { category: "xyz" }
}
)
它需要4分鐘來回報您!
"waitedMS" : NumberLong(0),
"results" : [ ],
"stats" : {
"nscanned" : 10018218,
"objectsLoaded" : 15000000,
"maxDistance" : 0,
"time" : 219873
},
"ok" : 1
用於爲例somethink像獅身人面像指數於同查詢(其實根本就沒有索引的所有此類查詢使用,它只是滾動所有已經在內存中的reccord對其進行過濾)在200回ms
我做錯了什麼?他們的計算機上有32GB的免費內存,所有數據僅使用150MB。他們有什麼方法來加速mongoDB?或者明確地說我們不能使用mongoDB作爲搜索引擎?
刪除「查詢」,在我的電腦上,我可以在1mln記錄上獲得6ms。 –
{「nscanned」:117,「objectsLoaded」:59,「avgDistance」:0.001017138667266944,「maxDistance」:0.0016776194783600408,「time」:2} –
Daniele,謝謝,但目的是爲了不刪除「查詢」:(因爲在運行查詢之前,您不知道它是否會匹配某些記錄......這裏的想法是模擬不返回(或非常少)記錄的查詢,並且4分鐘查看它們不相應記錄是不可接受的 – loki