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

Fastest way of querying geospatial data in mongodb

目前我的 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+ 时,这失败了(总是 return 404 说什么都没找到),我认为这是因为我查询数据的方式导致性能下降。我应该如何更改我的查询/数据结构以改进并让它再次工作?

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