MongoDB中地理空间索引的内部机制

6

请问有人知道地理空间索引是如何工作的,也就是计算最近点的算法吗?

在SQL中,我们可能会像这样做:
SELECT id, (x-a)*(x-a)+(y-b)*(y-b) as distance FROM table1 ORDER by distance ASC
当然,与MongoDB的地理空间索引相比,这种方法不够高效,但MongoDB是如何计算和排序的呢?

非常感谢您的帮助。

2个回答

4

MongoDB地理空间的核心是Geohashes。Geohash是一种分层空间数据结构,将空间细分为网格形状的桶。

我找不到适用于mongo的geohash实现的链接,但这个线程可能会提供一些见解。


1
谢谢!这很有帮助。我从未听说过Geohashes,似乎我需要先去谷歌并深入了解一下~~ - adamsmith

3

10gen网站得知:

当前实现在标准的MongoDB B树上编码地理哈希码。$near查询的结果是精确的。这种编码的一个限制是,虽然速度很快,但前缀查找不能准确地给出结果,特别是在位翻转区域周围。MongoDB通过在初始前缀扫描后执行网格邻居搜索来解决这个问题,以捕捉任何离群点。这通常确保了性能非常高,同时提供正确的结果。


在C++源代码中,还有关于具体实现的注释,该源代码是开源的并可供下载(我在另一台计算机上有源代码,但我认为它是一个z-order-b-tree...从我的理解来看,最终结果基本上是一个四叉树算法)。 - Jordan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接