在GEO fence上优化MongoDB查询

时间:2015-12-17 10:20:19

标签: mongodb gps mongodb-query aggregation-framework

我正在使用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。

有没有办法优化这个?

0 个答案:

没有答案