2011-01-02 12 views
30

Me pregunto cómo funciona un índice geoespacial, como el utilizado por MongoDB. ¿Alguien puede explicar qué estructura de datos/algoritmo se usa internamente? ¿A qué complejidad de tiempo se ejecuta una búsqueda?¿Cómo funciona un índice geoespacial?

Los enlaces a los recursos también serían geniales.

+0

@ Will Creo que sería bueno volver a abrir esta pregunta. En realidad, solicita respuestas objetivas y el valor de las respuestas hasta ahora es alto. Como programador que trabaja en tecnología de índice basado en datos, creo que sería útil escuchar más respuestas :) –

+0

@RobEvans Sí, no. En primer lugar, cómo funciona la indexación geoespacial es un tema que no se puede responder bien en el formato de pregunta/respuesta de StackOverflow. En segundo lugar, esta pregunta busca enlaces, que * específicamente * no están permitidos (hay una razón cercana para ello). Si está confundido acerca de lo que está y no está en el tema aquí, visite [meta]. – Will

+1

@ Will De acuerdo con su afirmación de que los geo-índices y su funcionamiento interno no son una buena opción para preguntas y respuestas, pero supongo que eso no viene al caso. Claro que la pregunta podría hacer con una edición para eliminar la solicitud de enlace y ser más específico, pero eso no significa que no sea de valor o que se ajuste bien en general. Veo bastantes de estos que son valiosos y cerrados, y es una lástima, ya que la comunidad definitivamente encontraría valor en ellos ... Ya he encontrado valor en las dos respuestas a continuación, ya que me recordó geohases como b-tree llaves. –

Respuesta

3

De acuerdo con este otro SO question:

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.