MongoDB - 地理空间交叉点性能

Posted

技术标签:

【中文标题】MongoDB - 地理空间交叉点性能【英文标题】:MongoDB - Geospatial intersection performance 【发布时间】:2013-06-21 15:06:55 【问题描述】:

我们正在开发一个小工具,允许人们在 Google 地图上绘制多边形,它会返回与绘制的叠加层重叠的邮政编码。我认为这将是深入研究 NoSQL 数据库的好时机,因为我听说过在处理大量数据时有关性能的好消息。

因此,我从美国人口普查 2010 数据集中获取了所有 ZCTA(邮政编码制表区域)形状数据,并将其加载到 MongoDB 中,如下所示。示例文档:

 "ZipCode" : 12345,
  "Polygon" :  type : "Polygon",
                coordinates: [[[lng1, lat1],[lng2, lat2], ... , [lngN, latN]]]

我还在 Polygon 列上设置了一个索引,如下所示:

db.ZipCodes.ensureIndex("Polygon" : "2dsphere")

最后,我将 google 多边形中的点转换为另一个 GeoJSON 多边形,并使用 $geoIntersects 查询数据,如下所示:

db.<collection>.find(  "Polygon" :
                      $geoIntersects :
                        $geometry :
                          type : "Polygon" ,
                           coordinates : [[[lng1,lat1], [lng2,lat2], ... , [lngN, latN]]]
                      )

当覆盖多边形很小时,这很有效,但是当多边形跨越几个州(美国)时,查询需要很长时间(> 20 分钟!)。我怎样才能把它降低到一个更合理的响应时间?我已经索引了邮政编码多边形,因为这就是我要查询的全部内容,所以我认为这将尽可能优化。我的索引是否错误?

提前致谢!

【问题讨论】:

谢谢。我会研究这些选项。 【参考方案1】:

在试图找出在 MongoDB 中实现更好性能的最佳方法之后,我决定尝试我们现有的标准数据库 SQL Server。我想我对 SQL Server 地理空间功能的低期望是没有根据的。该查询在没有索引的情况下在

我想我会坚持我所知道的。我真的对 MongoDB 寄予厚望,但地理空间性能严重不足(或关于如何改进它的文档严重不足)。

【讨论】:

以上是关于MongoDB - 地理空间交叉点性能的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB mongod.exe或mongo.exe双击一闪就关闭

mongodb自带web性能监控

MongoDB——索引类型之地理空间索引(Geospatial Index)

MongoDB中地理空间索引的内部机制

MongoDB地理空间查询结果未按距离顺序排列

通过 GeoServer 在 MongoDB 中提供地理空间数据