2012-09-19 9 views
5

La implementación actual codifica los códigos hash geográficos encima del estándar MongoDB B-trees. Los resultados de $ near consultas son exactos. Una limitación de con esta codificación, aunque rápida, es que las búsquedas de prefijo no dan resultados exactos de , especialmente alrededor de las áreas de inversión de bits. MongoDB resuelve este haciendo una búsqueda de vecinos de la cuadrícula después del escaneo de prefijos inicial para seleccionar por cualquier punto rezagado. Esto generalmente garantiza que el rendimiento permanezca muy alto y proporcione resultados correctos.¿Cómo implementa MongoDB sus índices espaciales?

¿Eso significa que mongodb divide la tierra en varias cuadrículas?

Respuesta

6

Esta presentación de Greg Studer (10gen) discute los índices geoespaciales con algún detalle: Geospatial Indexing with MongoDB.

La aplicación geoespacial estándar como en MongoDB 2.2 utiliza un GeoHash enfoque 2-D, con los bits variables de precisión:

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. 

El enfoque geohash tiene casos extremos donde algunos puntos pueden ser espacialmente cerca, pero tienen diferentes hashes. MongoDB también incluye un Geospatial Haystack Index que está específicamente ajustado para pequeñas regiones "cercanas" búsquedas largas/lat con un criterio indexado adicional (por ejemplo: "encontrar todos los restaurantes dentro de las 25 millas con el nombre 'foo'").

Otra presentación interesante de Nicholas Knize (Thermopylae) contrasta el enfoque actual de B-tree/GeoHash con R-trees. Si salta a la diapositiva 8, hay una explicación visual que puede ser útil: RTree Spatial Indexing with MongoDB - MongoDC.

Cuestiones relacionadas