2014-09-24 3 views
0

У меня есть следующий образец коллекции:Повышение производительности geoIndex на Монго

var testSchema = new Schema({ 
title:   {type: String, required: true}, 
owner:   {type:Schema.Types.ObjectId}, 
locatedAt:  {type: {}, index: '2dsphere', sparse: true, "2dsphereIndexVersion": 2, required: true} 
}); 

Я вставил 10000 строк для оценки производительности схемы

db.test.find({"locatedAt":{"$near":{"$geometry":{"type":"Point","coordinates":[2.240413,41.582159]}}}}).explain(); 

В результате следующий:

{ 
    "cursor" : "S2NearCursor", 
    "isMultiKey" : false, 
    "n" : 10000, 
    "nscannedObjects" : 48846, 
    "nscanned" : 48846, 
    "nscannedObjectsAllPlans" : 48846, 
    "nscannedAllPlans" : 48846, 
    "scanAndOrder" : false, 
    "indexOnly" : false, 
    "nYields" : 0, 
    "nChunkSkips" : 0, 
    "millis" : 95, 
    "indexBounds" : { 

    }, 
    "filterSet" : false 
} 

Я попытался создать индекс «2d» с тем же результатом.

Подводя итоги, по моему мнению, запрос сканирует слишком много строк, что я делаю неправильно? Может быть, определение схемы?

спасибо !!

+0

Для индексов ГЭП, nscanned * номер не являются документами , Они представляют собой нечто внутреннее по отношению к геоинформатору, о котором не обязательно знать - важно то, что число по-прежнему пропорционально объему работы, поэтому его можно использовать для сравнения геоинформаций. Сообщаемое время составляет 95 мс, чтобы получить все 10000 документов, поэтому я думаю, что запрос выполнен отлично (обратите внимание: на самом деле не используйте поле millis в объяснении для информации о синхронизации в целом). – wdberkeley

+0

Спасибо за ваш комментарий. Я продолжал сегодня оценивать информацию (изучая смысл полей «объяснять»), и если вы включаете ограничение или ограничение, nscanned data является правильным, а milis - до 4. Таким образом, это было просто плохое использование найти, это не было проблемой с фильтрами определения схемы. –

ответ

0

После оценки документа «Explain» и некоторых тем в блогах, и здесь мне нужно сделать вывод, что это не проблема с индексом или проблемой определения схемы.

Если включить предел ограничение nscanned объект идет вниз от около 50k объектов до 36 (предел 10) и Милис идет вниз до 4.