【问题标题】:Mongodb: $geoNear vs $nearSphere on huge, non-sharded collection: performance?Mongodb:$geoNear 与 $nearSphere 在巨大的非分片集合上:性能?
【发布时间】:2018-09-25 15:04:32
【问题描述】:

我有一个包含数千万条 GeoJSON 记录的数据集合,我将非常频繁地执行一项操作,即选择预定义区域内某种类型的所有点。数据库没有分片。这些区域不是圆形的,但它们是完全凸的,对于每个区域,我都知道质心和最大半径。它们都没有超过 8 个顶点。

所以:假设我非常乐意在一个区域的封闭圆内检索所有内容,而不是仅在其精确几何范围内检索,那么对质心和半径使用$nearSphere 查询会更有效(然后修剪去掉客户端不需要的点),还是应该在实际几何图形上坚持使用$geoWithin?考虑到这些查询的执行频率,即使是很小的改进在这里也很重要。

【问题讨论】:

  • 前段时间我也有类似的疑惑,最后决定把搜索的东西完全移到 ElasticSearch 上。 ES 完美地支持几何事物,并且在大多数情况下确实做得非常快。一些数字:现在我的 mongo 包含大约 5 亿个条目,并且 ES 对这个数据集进行搜索 - 使用地理坐标进行 4 次边缘聚合搜索大约需要 50 毫秒
  • @AlexanderPaderin 在这种情况下 ES 不是一个选项。
  • 啊好的。所以听起来这只是性能测量的问题..我建议生成足够大的数据集并收集一些数字。祝你好运
  • 希望有人会知道他们的头顶,因此赏金:) 如果没有,那就是 B 计划。

标签: mongodb performance mongodb-query geospatial


【解决方案1】:

$geoWithin$nearSphere 快得多。

根据您的用例,从数据库中获取几何体中的所有对象然后按数据库外的距离对结果进行排序可能会更好。

【讨论】:

    猜你喜欢
    • 2013-08-31
    • 2014-07-19
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 2012-07-15
    • 2021-08-21
    • 1970-01-01
    • 2020-08-25
    相关资源
    最近更新 更多