不久前,我在黑客马拉松期间创建了crowdfundstats.com网站。该网站提供了一些有趣的内部基础上的130.000左右的kickstarter项目数据,我们已经刮了。最有趣的特性是http://crowdfundstats.com/map.html,您可以在这个http://crowdfundstats.com/map.html上拖动一个radius在世界地图上获取该半径内项目的信息。
我使用聚合函数根据其地理空间信息查找半径内的所有项目。每个项目都有以下格式的地理位置:
{ g1 :
{ type : "Point" },
{ coordinates : [ -83.102840423584, 42.354639053345] }
}然后,聚合函数返回支持方的总数、平均持续时间、成功百分比和半径内的项目总数:
{'$match' :
{g1 :
{$geoWithin :
{ $centerSphere :[[parseFloat(long), parseFloat(lat) ], radius/6371 ]
}
}
}
},
{'$group':
{ "_id":"",
"backers": {"$sum": "$backers"},
"dateDiff2": {"$avg": "$dateDiff2"},
"completed": {"$avg": "$completed"},
"total": {"$sum": 1}
}
}问题是查询的结果需要很长时间(例如:在英国拖曳半径时超过10秒)。我已经添加了一个2 2dsphere索引来提高速度,但是这几乎没有效果:
{
"g1" : "2dsphere"
}我能做些什么来优化查询吗?或者这是地理空间查询的预期性能吗?
提前感谢
发布于 2016-05-24 07:56:02
对于任何遇到这个线程的人,我已经通过从MongoDB 3.0升级到3.2,将最繁重的查询从15秒提高到0.5秒。他们极大地改进了地理空间查询。你可以在MongoDB博客上读到更多关于它的信息。
https://stackoverflow.com/questions/37321565
复制相似问题