2012-09-19 6 views
5

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

これは、mongodbが地球を複数のグリッドに分割することを意味しますか?

答えて

6

Greg Studer(10gen)からのこのプレゼンテーションでは、地理空間インデックスについて詳細に説明しています。 Geospatial Indexing with 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. 

ジオハッシュアプ​​ローチはいくつかの点が空間的に近くなるが、異なる必要がある可能性があり、エッジケースを持っていますハッシュMongoDBにはさらに、1つの追加の索引付け基準(例えば、「25マイル以内にすべてのレストランを名前 'foo'で検索」など)を使用して、小領域の「近く」のロング/ラスト検索用に特に調整されたGeospatial Haystack Indexが含まれています。

Nicholas Knize(Thermopylae)の別の興味深いプレゼンテーションは、現在のB-tree/GeoHashアプローチをR-treesと対比しています。スライド8に進むと、役に立つかもしれない目に見える説明があります: RTree Spatial Indexing with MongoDB - MongoDC

関連する問題