Colecção de cache MongoDB em memória?
estou a usar mongoDB
para armazenar uma colecção de polígonos e usar $geoIntersects
consultas para descobrir em que polígono está um ponto específico.
mongoose
Schema
parece isto:
var LocationShema = mongoose.Schema({
name: String,
geo: {
type: {
type: String
},
coordinates: []
}
});
LocationShema.index({geo: '2dsphere'});
module.exports = mongoose.model('Location', LocationShema);
Então, cada elemento é um polígono. Eu adicionei o índice 2dsphere
esperando que as consultas seriam mais rápidas e toda a coleção seria armazenada na memória. Infelizmente é preciso cerca de 600ms
para ~20queries que é muito para o meu caso de uso.
As minhas perguntas são assim:
Location.find({
geo: {
$geoIntersects: {
$geometry: {
type: 'Point',
coordinates: [pos.lng, pos.lat]
}
}
}
},...)
é posso fazer isto correr mais depressa? Posso forçar o MongoDB a guardar toda a coleção no banco de dados (como a sua coleção nunca muda). Há alguma maneira de eu poder verificar se a colecção está realmente armazenada numa cache de memória ?
Também, há alguma alternativa que eu possa usar (por exemplo: uma biblioteca ou algo assim) que permita consultas geo-espaciais rápidas?
1 answers
Com mongo >3.0 pode usar o armazenamento inMemory, o que significa que pode ter um caso de mongo quando a colecção semeada permanece na memória (todas as alterações não persistem).
Do outro lado se a sua colecção for estática-pode haver uma forma de implementar um armazenamento de 'cache' como o Redis, ou mesmo a colecção indexada TTL com consulta e resposta armazenadas.
O processo de semeadura pode ser feito por backup da coleção atual e restaurar na coleção de memória.
Quando questionando frequentemente a coleta-resíduos de TI na memória, desde que mongo precisa carregar outras coleções (no sistema de ocupado). Qualquer comentário bem-vindo!