【问题标题】:GEO2D indexes for search by two ranges of date (timeseries)用于按两个日期范围(时间序列)搜索的 GEO2D 索引
【发布时间】:2014-08-02 00:17:20
【问题描述】:

我正在做一种房间预订系统,其中集合包含包含两个日期的文档:开始日期和结束日期。 我希望能够找到开始日期在两个日期之间且结束日期也在两个日期之间的所有预订。 我使用了 MongoDB 复合索引,因此我正在索引开始日期和结束日期字段。 但是我想知道是否可以通过使用 GEO2D 索引来提高查询性能。为此,我们可以将开始日期和结束日期转换为 unix 时间,然后每个预订都是一个位置为(开始日期,结束日期)的点。 使用 $within 运算符可以查询开始日期和结束日期范围内的预订。

由于我猜 GEO 索引更多地用于空间数据,将它们用于这个特定用例是否有意义?

最后,既然 GEO2D 索引在 MongoDB 中是作为 B-Trees 而不是作为 R-Trees 实现的,那么传统索引和这个 GEO 索引有什么区别?

【问题讨论】:

    标签: mongodb geospatial b-tree-index


    【解决方案1】:

    这是一个有趣的想法,但我认为它不会帮助您提高搜索速度或效率。 MongoDB 中的地理索引只是应用于geohash 的 B 树,其中 geohash 只是一种将二维事物转换为一维事物的机制,以便 B 树可以使用它。 Geohashing 是一个强大的概念,但有一些特殊性,即靠近在一起的点可能最终会出现在完全不同的桶中,这会使搜索到某个点的 x 个最近点非常低效,因为必须在您的点周围搜索 9 个框兴趣。内部查询也会有同样的问题。 我原以为对日期列(可能作为 unix 时间)进行分片将是提高性能的更有效方法,尽管在使用作为分片键单调增加的数据类型(例如时间戳)时有一些注意事项,请参阅MongoDB shard keys.

    【讨论】:

      猜你喜欢
      • 2018-12-30
      • 1970-01-01
      • 2018-10-13
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 2014-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多