我正在使用MongoDB来存储大量的GPS数据(每个文档大约1000个GPS点的2个Mio.文档)。数据如下所示
{
"Data": [
{
latitude : XXXXXX,
longitude : XXXXXX,
speed : XXXXXXX
}],
"_id": ID,
" StartDayOfWeek" : X
}
如您所见,Data是一组GPSPoints和其他信息。 我在一周中的特定日期查询文档(有时我查询多天,在这种情况下我使用$或。 哦... lat / lon存储为整数 以下是我的查询(例子):
db.testNew2.aggregate(
{ $sort : {"StartDayOfWeek" : 1 }},
{ $match: {"$and" : [
{ "StartDayOfWeek" : 1},
{ 'Data' :
{$elemMatch:
{ "latitude" : {$gt:48143743, $lt:48143843}}}},
{ 'Data' :
{$elemMatch:
{ "longitude" : {$gt:11554706,$lt:11554806}}}}
]}},
{ $unwind : "$Data"},
{ $match: {"$and" : [
{ 'Data.latitude' : {$gt:48143743, $lt:48143843}},
{ 'Data.longitude' : {$gt:11554706, $lt:11554806}}
]}},
{$group: {
"_id" : "$_id",
"Traces" : { $push :"$Data"}
}}
)
正如您所看到的,我正在整理不在GEO围栏范围内的GPS点。 这个查询工作正常,但......我不知道为什么。看起来很慢。 StartDayOfWeek上有一个索引,该机器功能强大(在RAID0中有24 GB RAM和两个7200rpm SATA驱动器)。 集合大小约为130 GB,查询大约需要3到5分钟。 在使用该查询的Java程序中,我也使用allowDiskUsage,因为返回值可能高于16 MB。
有没有办法优化这个?