javascript - 内存中的MongoDB缓存集合?

标签 javascript node.js mongodb caching geospatial

我正在使用 mongoDB 来存储多边形集合,并使用 $geoIntersects 查询来查找特定点所在的多边形。

我的 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 将整个集合缓存在数据库中吗(因为集合永远不会改变)。有什么方法可以检查集合是否实际存储在内存缓存中

此外,我是否可以使用任何替代方法(例如:库或其他东西)来实现快速地理空间查询?

最佳答案

使用 mongo >3.0,您可以使用内存存储,这意味着当种子集合保留在内存中时,您可以拥有 mongo 实例(所有更改都不会持久化)。

从另一方面来说,如果您的集合是静态的 - 可能有一种方法可以实现像 Redis 这样的缓存存储,甚至可以实现带有存储查询和响应的 TTL 索引集合。

播种过程可以通过当前集合的备份和内存集合中的恢复来完成。

当频繁查询集合时——只要 mongo 需要加载其他集合(在繁忙的系统上),它就会留在内存中。

欢迎任何评论!

关于javascript - 内存中的MongoDB缓存集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37812923/

相关文章:

javascript - 如何阻止 d3 标题在每次图表更新时一次又一次地附加

node.js - Hapi-Swagger 因 header 值而失败

node.js - sequelize.import 不是函数

node.js - 如何更新 Mongoose 中的部分但非全部字段

javascript - 从 Javascript 更改 CSS 规则集

javascript - Angular ng-repeat 将参数传递给 href 链接

html - Sendgrid 始终发送文本电子邮件

mongodb - 如何确保一次最多处理一条消息?

mongodb - MongoD 不会在 CentOS 上停止

javascript - 如何在 Meteor.js 中添加提交按钮?