【问题标题】:MongoDB - Geospatial intersection performanceMongoDB - 地理空间交叉点性能
【发布时间】: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 分钟!)。我怎样才能把它降低到一个更合理的响应时间?我已经索引了邮政编码多边形,因为这就是我要查询的全部内容,所以我认为这将尽可能优化。我的索引是否错误?

提前致谢!

【问题讨论】:

  • 谢谢。我会研究这些选项。

标签: mongodb query-optimization geospatial database-optimization


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-01-09
    • 1970-01-01
    • 2012-10-06
    • 2015-02-25
    • 2015-08-31
    • 2015-06-07
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多