Я пытаюсь использовать 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
тот же запрос, сделанный в течение Exemple somethink как индекс сфинкс (использованному в самом деле нет индекса вообще для такого запроса, это просто прокрутить все reccord, которые уже в памяти, чтобы фильтровать их) возвращение в 200 мс
что я делаю неправильно? их 32 ГБ свободной памяти на компьютере, и все данные используют только 150 МБ. Это их способ ускорить работу mongoDB? или окончательно мы не можем использовать mongoDB в качестве поисковой системы?
удалить «запрос», на моем компьютере я могу получить 6 мс на 1 млн. Записей. –
{«nscanned»: 117, «objectsLoaded»: 59, «avgDistance»: 0.001017138667266944, «maxDistance»: 0.0016776194783600408, «время»: 2} –
Daniele, спасибо, но цель в том, чтобы не удалить «запрос» :(потому что раньше, чтобы запускать запрос, вы не знаете, будет ли он соответствовать некоторым записям или нет ... здесь идея заключалась в том, чтобы моделировать запрос, который возвращает нет (или очень мало) записей. и 4 мин, чтобы увидеть, что они не соответствуют запись не принимается – loki