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 的步骤。
目前我的 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 的步骤。