2010-03-31 11 views
8

Estoy diseñando una aplicación que necesita guardar formas geométricas en una base de datos. Todavía no he elegido el sistema de gestión de bases de datos.¿Necesito un índice espacial en mi base de datos?

En mi aplicación, todas las consultas de bases de datos tendrán un cuadro delimitador como entrada, y como salida quiero todas las formas dentro de esa base de datos. Sé que las bases de datos con un índice espacial se utilizan para este tipo de aplicación. Pero en mi aplicación habrá no cualquier consulta de tipo "darme objetos cercanos x/y" u otras consultas más complejas que sean útiles en una aplicación GIS.

Tengo la intención de tener una base de datos sin un índice espacial y tienen el aspecto de consultas:

SELECT * FROM shapes WHERE x < max_x AND x > min_x AND y < max_y AND y > min_y 

y tienen un índice deen las columnas x (double) y y (double). Mientras pueda ver, realmente no necesito una base de datos con un índice espacial, independientemente de cómo mi aplicación esté cerca de ese tipo de aplicaciones.

E incluso si me gustaría tener consultas cercanas, entonces podría crear un cuadro delimitador lo suficientemente grande alrededor de ese punto. ¿O esto llevará a un rendimiento pobre?

¿Realmente necesito una base de datos espacial? ¿Y cuándo se necesita un índice espacial?

EDIT: Las consultas de búsqueda en realidad será un poco más avanzada que la que escribí más arriba, ya que trato con formas geométricas que introducirá un cuadro delimitador que devolverá múltiples formas (con cuadro delimitador) que están dentro o interfieren con el cuadro en la consulta. Pero todavía creo que puedo hacer esto sin un índice espacial, después de haber leído todas las buenas respuestas.

+0

¿Cuál es el "costo" de usar postgis o spatiallite? No entiendo por qué no querrías usarlos. – TheSteve0

+0

@ TheSteve0: Aún no he decidido qué dbms usaré. Pero me gustaría no estar limitado a uno con un índice espacial. Quizás prefiera una base de datos NoSQL distribuida en lugar de un RDBMS. – Jonas

+0

Bueno, ¿cuál es su caso de uso? Si no le importa compartir – TheSteve0

Respuesta

2

¿Realmente necesito una base de datos espacial?

Parece que lo que está haciendo funcionará bien para su aplicación.

E incluso si me gustaría tener consultas cercanas, entonces podría crear un gran cuadro delimitador suficiente alrededor de ese punto .

En su lugar, le conviene considerar la creación de un índice en un Geohash. Este método se recomienda para indexar puntos geoespaciales en Google App Engine, por ejemplo, donde las funciones de indexación son limitadas. (Source)

¿Y cuándo se necesita un índice espacial?

Hay muchos escenarios donde un índice espacial es útil. En primer lugar, los índices espaciales pueden tratar no solo con puntos, sino con polilíneas, polígonos y otras formas. Además, como ya mencionó, hay muchas operaciones complejas de consulta que pueden aplicarse a datos espaciales, donde un índice espacial apropiado sería esencial.

+0

Gracias! El Geohash se ve muy bien, gracias por el enlace. Sí, mi base de datos también tratará no solo con puntos, sino también con polígonos y líneas. Pero las consultas de búsqueda solo estarán en recuadros delimitadores. – Jonas

2

No, no necesita un índice espacial para esto.

Los índices espaciales son necesarios para calcular la distancia entre los objetos, ver si un punto está dentro de un cierto radio de otro punto, etc. ... sobre todo cuando se deben tener en cuenta las coordenadas geográficas. Hemisferio sur, hemisferio norte, etc ... todo cambia un poco la distancia cuando se tiene que tomar en consideración la curva de la tierra.

Si siempre está buscando tanto x como y, se beneficiaría de tener un índice en ambos elementos al mismo tiempo. Entonces ... no hay un índice en la columna xy un índice en la columna y, sino un índice en la columna xey combinados.

+0

Gracias por la explicación y la sugerencia de un índice combinado. – Jonas

1

Si no va más allá de lo que ya está haciendo, no necesita un índice espacial ni un SIG para esa materia. Sin embargo, consideraría cuidadosamente cuáles son sus requisitos y las posibilidades de que la aplicación crezca y necesite un sistema GIS. Es mejor que planificar más temprano que tarde para esta transición.

GIS le ofrece varias ventajas. Primero, un SIG tiene una columna de forma especial para almacenar todo lo necesario sobre una geometría. Gestiona la referencia espacial, los metadatos coordinados, etc. Un SIG proporciona métodos potentes para consultar los datos en función de las relaciones espaciales y modificar las geometrías (uniones, extracciones, almacenamientos intermedios, etc.). Maneja puntos, líneas, polígonos, etc. Puede derivar nuevas formas a partir de operaciones topológicas. Además, casi todos los sistemas GIS proporcionan medios para procesar los datos (esto realmente depende de qué GIS elija, pero cuando está presente le ahorra TONELADAS de trabajo).

Solo necesitará índices espaciales si tiene un verdadero entorno GIS.Si elige un entorno GIS, sí, use índices espaciales; realmente no quiere trabajar sin ellos.

+0

¡Gracias! Diseñaré mi aplicación cuidadosamente. Trataré de mantener los procedimientos avanzados en el software de front-end y mantener el almacenamiento de back-end simple, para que pueda escalar fácilmente. – Jonas

2

Para agregar a las excelentes respuestas existentes, el rendimiento puede o no ser importante aquí.

Si simula una consulta de rango de índice espacial haciendo dos consultas de rango para ejes xey, y tomando la intersección de resultados, está haciendo dos consultas que pueden devolver muchos más datos de los necesarios antes de la intersección.

Por otro lado, dicha consulta es soportada de forma nativa por un índice espacial y, como tal, será respondida de manera eficiente.

Con todo, si sus consultas espaciales son el cuello de botella, necesitará usar un índice espacial.

Cuestiones relacionadas