Я использую mongoDB
, чтобы хранить коллекцию полигонов и использовать $geoIntersects
запросов, чтобы найти в каком полигоне определенную точку.MongoDB коллекция кеша в памяти?
Мои mongoose
Schema
выглядит следующим образом:
var LocationShema = mongoose.Schema({
name: String,
geo: {
type: {
type: String
},
coordinates: []
}
});
LocationShema.index({geo: '2dsphere'});
module.exports = mongoose.model('Location', LocationShema);
Таким образом, каждый элемент представляет собой многоугольник. Я добавил индекс 2dsphere
, надеясь, что запросы будут быстрее, и вся коллекция будет сохранена в памяти. К сожалению, это занимает около 600ms
для ~ 20 запросов, что слишком много для моего использования.
Мои запросы выглядеть следующим образом:
Location.find({
geo: {
$geoIntersects: {
$geometry: {
type: 'Point',
coordinates: [pos.lng, pos.lat]
}
}
}
},...)
Есть в любом случае я могу сделать это работать быстрее? Могу ли я заставить MongoDB кэшировать всю коллекцию в базе данных (поскольку коллекция ther никогда не изменяется). Есть ли способ, которым я могу проверить, действительно ли коллекция хранится в кеше в памяти?
Кроме того, есть ли какие-либо альтернативы, которые я могу использовать (например: библиотека или что-то еще), что позволяет выполнять быстрые геопространственные запросы?
Можете ли вы опубликовать 'explain()' вашего запроса? – KRONWALLED
при выполнении запроса в оболочке mongo использовать 'db.collectionName.find (query) .explain()' – profesor79
Хм, но я использую 'mongoose' и не использую оболочку, я попробую это, спасибо. – Cristy