5 votos

¿Filtrar datos con PostgreSQL o geoservidor?

Estoy trabajando en una base de datos PostgreSQL con PostGIS. Necesito filtrar una tabla de 8 millones de registros para publicar una vista a través de geoserver.

Conozco dos formas de hacerlo, una es que cree una vista en PostgreSQL para filtrar los datos y publicarlos en el geoservidor, la otra es dejar que el geoservidor haga el filtrado usando sld.

Mi pregunta es cuál es la mejor solución para obtener un mejor rendimiento.

0 votos

Depende del número de características en el conjunto de resultados. El uso de un índice espacial para devolver 7999956 filas sería más lento que el filtrado en la aplicación, pero si el conjunto de resultados está restringido a menos de 5k-10k filas, no hay duda de lo que sería más rápido.

3 votos

Depende de cómo el datastore de PostGIS decida hacer el filtrado, si simplemente convierte el filtro SLD en SQL WHERE... no debería haber mucha diferencia si es que hay alguna. Activa el registro de GeoTools developer desde la utilidad de administración de tu GeoServer y echa un vistazo al SQL que está generando. Naturalmente, debe asegurarse de que tiene un índice en los campos que necesita para filtrar.

4voto

user2831 Puntos 11

GeoServer convierte los filtros disponibles en SLD en una consulta SQL equivalente (mediante la or-denación de las condiciones de las distintas reglas, si hay más de una), así que mientras el SLD sea lo suficientemente sencillo, las prestaciones deberían ser buenas.

Sin embargo, hay límites, por defecto GeoServer no envía los filtros a la base de datos si hay más de 20 reglas, para evitar problemas con el crecimiento del SQL (algunas bases de datos comerciales simplemente no pueden manejar bien las consultas que se vuelven demasiado grandes)

3voto

bleything Puntos 138

Yo recomendaría encarecidamente realizar tareas como la que mencionas (al menos para conjuntos de datos grandes) en la base de datos. La BD está diseñada para trabajar con grandes cantidades de datos y tendrá mucho más rendimiento que el geoservidor ya que puede realizar las operaciones dentro de su representación interna de datos.

Si se adoptara el otro enfoque, la instancia de Geoserver tendría que obtener primero los 8 millones de registros de la base de datos y filtrarlos (lo que sin duda funcionaría para conjuntos de datos más pequeños), pero supongo que en su caso la cantidad de registros es demasiado alta para realizar la tarea con los métodos proporcionados por el Geoserver.

0 votos

Gracias a todos por vuestras respuestas y comentarios. El resultado del filtrado es de unas 35 mil filas, así que no es tan grande. En realidad he probado ambas versiones, y en la pantalla final la visualización de las geometrías eran más rápidas cuando usaba el modo de filtrado directamente en la base de datos.

1 votos

¿Qué te hace pensar que el filtrado SLD implica cargar todo en la memoria y luego filtrar allí? ;-)

0 votos

Lo siento, creo que me lo he perdido :)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X