目前我的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说没有找到),我认为这是因为我查询数据的方式导致性能下降。我应该如何更改我的查询/数据结构以改进并让它再次运行?
答案 0 :(得分:0)
首先应该通过添加更多的ram和CPU功率来垂直缩放mongodb,直到达到下一个平台。下一步是通过使用多个MongoDB实例处理数据集来水平(或分片)数据库。当然,分片可以大大提高数据库性能。您可以阅读this article,其中描述了用于扩展mongo的几乎所有步骤。