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

Posted

技术标签:

【中文标题】MongoDB中地理空间索引的内部机制【英文标题】:inside mechanism of geospatial indexing in mongodb 【发布时间】:2011-12-27 04:07:14 【问题描述】:

任何人都知道地理空间索引是如何工作的,我的意思是计算最近点的算法?

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

非常感谢。

【问题讨论】:

【参考方案1】:

mongodb 地理空间的核心是Geohashes。 Geohash 是一个

分层空间数据结构,将空间细分为 网格形状的桶。

我在 mongo 中找不到 geohash 实现的适当链接,但这个 thread 可能会提供一些见解。

【讨论】:

谢谢!这很有帮助。从来没有听说过 Geohashes,看来我需要先 google 并深入研究一下~~【参考方案2】:

来自10gen site:

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

【讨论】:

C++ 源代码中的实现细节也有 cmets,它是开源的,可供下载(我在另一台计算机上有源代码,但我认为它是 z-order-b -tree ...据我了解,最终结果基本上是一个四键算法)

以上是关于MongoDB中地理空间索引的内部机制的主要内容,如果未能解决你的问题,请参考以下文章

搭建高可用mongodb集群—— 深入副本集内部机制

mongodb副本集的内部机制(借鉴lanceyan.com)

MongoDB高效查询之索引机制

安卓的存储机制

MongoDB——索引类型之地理空间索引(Geospatial Index)

Oracle Buffer Pool内部闩锁机制