2011-12-27 12 views
6

地理空間索引付けの仕組みは誰でも知っています。つまり、最も近い点を計算するアルゴリズムですか?私たちはこのようなことを行うことができますSQLではmongodbでの地理空間索引付けのメカニズム


SELECT id, (x-a)*(x-a)+(y-b)*(y-b) as distance FROM table1 ORDER by distance ASC
確かにこれはMongoDBの地理空間のインデックスと比較して十分に効率的ではありませんが、どのようにMongoDBを計算し、並べ替えのでしょうか?

事前に感謝します。

答えて

4

mongodb geospatialの心臓はGeohashesです。 Geohashは

グリッド形状の バケットに細分する階層的な空間データ構造です。

mongoでgeohashの実装に適切なリンクが見つかりませんでしたが、このthreadはいくつかの洞察を与えるかもしれません。 10gen site

から
+1

ありがとうございました!これは大いに役立ちます。 Geohashesを聞いたことがない、私はgoogleとその最初に掘り下げる必要があると思う~~ – adamsmith

2

現在の実装では、標準 MongoDBのBツリーの上の地理的ハッシュコードをエンコードします。 $ nearクエリの結果は正確です。 1つの制限 このエンコーディングでは高速ですが、プレフィックスルックアップでは特にビットフリップエリアの周りで という正確な結果が得られません。 MongoDBは、 を、最初のプレフィックススキャン後にグリッドネイバー検索を実行して、 を任意のストラグラーポイントまで上げて解決します。これにより、通常、正確な結果を提供しながら、パフォーマンスが非常に高いままであることが保証されます( )。

+0

また、オープンソースでダウンロード可能なC++ソースコードの実装の詳細についてのコメントもあります(私は別のコンピュータにソースコードを持っていますしかし、私はそれがzオーダーのBツリーだと思っています...私の理解から、最終結果は基本的にクワッドキーアルゴリズムです) – Jordan

関連する問題