Estoy sirviendo mosaicos vectoriales usando TileStache , tengo todo configurado como quiero. Mis datos se almacenan en Postgres y estoy usando el proveedor VecTiles para servir mosaicos GeoJSON .
Quiero almacenar en caché todos mis mosaicos para que los mosaicos se sirvan más rápido. Estoy usando tilestache-seed.py para sembrar mi caché. Estoy ejecutando tiletache-seed en varias máquinas. Tilestache-seed funcionó muy bien hasta el nivel de zoom 13, pero después de eso, se tarda demasiado en almacenar en caché los mosaicos. Solo para Zoom Level 16, tengo 5023772 mosaicos para almacenar en caché, y solo obtengo 100k-200k mosaicos por día en cada máquina.
¿Cómo puedo hacer que mis teselas se almacenen más rápido ? ¿Hay alguna manera de ajustar tilestache-seed.py y hacer que se siembre más rápido?
Actualización: He intentado construir índices espaciales en mis tablas (en la columna de geometría y las columnas utilizadas para filtrar datos a través de la cláusula where) y todavía no he visto un aumento significativo en la velocidad de mosaico. A este ritmo, solo Zoom 17 me llevará un mes y esta vez solo aumentará exponencialmente a medida que avance hacia Zoom 21
Actualización 2: también intenté hacer vistas materializadas y no hay un cambio apreciable en el rendimiento, por lo que la optimización de la base de datos no funciona. Creo que tendré que optimizar el propio tiletache-seed.py o idear una nueva forma de almacenar en caché los mosaicos.
Información de hardware Estoy ejecutando los procesos de almacenamiento en caché en 8 PC diferentes, uno de los cuales es un i7 con 32 gb de ram y otro es un i3 con 4 gb de ram, pero ambos me dan casi la misma velocidad de almacenamiento en caché (aproximadamente 100k mosaicos por día)
fuente
Por defecto, shp2pgsql NO crea índices. Debe pasar
-I
para que genere un índice espacial. http://postgis.net/docs/manual-1.3/ch04.html#id435762Compruebe si su tabla tiene un índice ejecutándose
\d tablename
en psql. En la lista de índices debe aparecer una línea con "esencia" (a menos que haya elegido un índice diferente) y el nombre de su columna de geometría.También puede agregar uno después del hecho, consulte http://postgis.net/docs/manual-1.3/ch03.html#id434676 (no deje que la nota sobre pérdida lo asuste):
Dado que probablemente también use columnas no espaciales en sus consultas, generalmente desea crear índices para cada columna que se usa para la búsqueda. Si, por ejemplo, tiene una consulta como
SELECT * FROM roads WHERE priority = 3;
entonces,priority
se usa y agregar un índice para ella acelerará significativamente las cosas:CREATE INDEX idx_roads_priority ON roads(priority);
.fuente
Otra cosa que debe probar si está utilizando una consulta estándar es crear una vista materializada a partir de la consulta y construir sus mosaicos a partir de eso: http://www.postgresql.org/docs/9.3/static/sql-creatematerializedview.html
Lo que esto hará es crear una tabla que almacene la consulta (para que pueda actualizarla en el futuro). Asegúrese de tener índices espaciales en los MV secundarios y luego será lo más rápido posible.
Lo que podría estar sucediendo es que tiene un índice espacial, pero luego está seleccionando solo algunos de los datos, lo que significa que ya no está utilizando el índice espacial ...
fuente