MongoDB如何实现它的空间索引?



当前的实现对标准之上的地理哈希代码进行编码 MongoDB B树。$near查询的结果是准确的。一个限制 使用这种编码,虽然速度很快,但前缀查找不会给出 精确的结果,尤其是在位翻转区域周围。 MongoDB解决了这个问题 通过在初始前缀扫描后执行网格邻居搜索来选择 上升任何落伍点。 这通常可确保性能 在提供正确结果的同时保持非常高。

这是否意味着mongodb将地球分成几个网格?

Greg Studer(10gen)的演讲详细讨论了地理空间索引: 使用MongoDB进行地理空间索引。

MongoDB 2.2 的标准地理空间实现使用 2-D GeoHash 方法,具有可变的精度位:

By default, precision is set to 26 bits which is equivalent to approximately
2 feet given (longitude, latitude) location values and default (-180, 180)
bounds.

GeoHash 方法确实存在一些边缘情况,其中某些点可能在空间上接近,但具有不同的哈希值。 MongoDB还包括一个地理空间干草堆索引,该索引专门针对小区域"近"长/纬度搜索进行了调整,并带有一个额外的索引标准(例如:"查找25英里内所有名称为'foo'的餐馆")。

Nicholas Knize(Thermopylae)的另一个有趣的演讲将当前的B树/GeoHash方法与R树进行了对比。 如果跳到幻灯片 8,则有一个视觉说明可能会有所帮助: RTree Spatial Indexing with MongoDB - MongoDC.

最新更新