1

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

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

最后,由于 GEO2D 索引在 MongoDB 中作为 B 树而不是 R 树实现,那么传统索引和这个 GEO 索引有什么区别?

4

1 回答 1

1

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

于 2014-08-04T14:41:37.777 回答