在mongodb中查询地理空间数据的最快方法

时间:2017-01-11 13:49:24

标签: mongodb geospatial spatial-query

目前我的geojson数据以这种格式存储:

  coord: [long, lat],
  time: unix timestamp,
  property: some property

我想找到最近的时间戳(lte)的位置。我现在这样做的方式是:

    collection.ensureIndex({loc: "2d"})
    collection.find(
            {coord : {
                    $near: [xval, yval],
                    $maxDistance: 200
                    },
             time: {
                    $lte: time
             }
            }).sort({time: -1}).limit(1).toArray(function(err, queryResult) {
  (did some return 404 and 200 here)
 }

当数据量很小时,这是有效的。但是当我的数据库增加到50G +时,这就失败了(总是返回404说没有找到),我认为这是因为我查询数据的方式导致性能下降。我应该如何更改我的查询/数据结构以改进并让它再次运行?

1 个答案:

答案 0 :(得分:0)

首先应该通过添加更多的ram和CPU功率来垂直缩放mongodb,直到达到下一个平台。下一步是通过使用多个MongoDB实例处理数据集来水平(或分片)数据库。当然,分片可以大大提高数据库性能。您可以阅读this article,其中描述了用于扩展mongo的几乎所有步骤。