GEO2D通过两个数据范围(时间序列)进行搜索索引

时间:2014-08-02 00:17:20

标签: mongodb geospatial b-tree-index

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

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

最后,由于GEO2D索引在MongoDB中被称为B树而不是R-Trees,传统索引和这个GEO之间的区别是什么?

1 个答案:

答案 0 :(得分:1)

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