2011-12-27 16 views
6

Cualquiera sabe cómo funciona la indexación geoespacial, me refiero al algoritmo para calcular los puntos más cercanos?mecanismo interno de indexación geoespacial en mongodb

En SQL podemos hacer cosas como esta:
SELECT id, (x-a)*(x-a)+(y-b)*(y-b) as distance FROM table1 ORDER by distance ASC
Seguro que esto no es suficiente en comparación con la indexación geoespacial de mongodb eficiente, pero ¿cómo mongodb calcular y ordenar?

Muchas gracias de antemano.

Respuesta

4

Heart of mongodb geospatial es Geohashes. Geohash es un

Estructura de datos espaciales jerárquica que subdivide el espacio en cubos de forma cuadriculada.

No he podido encontrar los enlaces apropiados para las implementaciones de geohash en mongo, pero este thread podría proporcionar algunas ideas.

+1

¡Gracias! Esto ayuda mucho. Nunca escuché hablar de Geohashes, parece que necesito googlearme y profundizar en eso primero ~~ – adamsmith

2

del 10gen site:

La implementación actual codifica códigos hash geográficas en lo alto estándar MongoDB árboles B. 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.

+0

También hay comentarios sobre los detalles de la implementación en el código fuente de C++ que es de código abierto y está disponible para descargar (tengo el código fuente en otra computadora) pero creo que es un z-orden-b-tree ... según entiendo, el resultado final es básicamente un algoritmo de cuádruple clave) – Jordan