¿Cómo manejan las funciones PostGIS las memorias intermedias y el almacenamiento externo?

17

Veo una lista cada vez mayor de nuevas funciones en PostGIS, algunas de las cuales involucran GEOS(por ejemplo ST_ClusterKMeans). Algunas funciones (por ejemplo, las que están en pgrouting) dependen de otras bibliotecas (por ejemplo BGL).

Mi impresión es que muchas de estas bibliotecas subyacentes (a menudo en C / C ++) no manejan la gestión de buffers entre la memoria y las memorias secundarias / almacenamiento / discos.

Entonces, ¿funcionan las funciones de PostGIS sobre ellas en grandes conjuntos de datos que no pueden almacenarse en la memoria física (o virtual)?

Si es así, ¿de dónde provienen estas capacidades de administración de búfer (desde el punto de vista de la implementación)?

tinlyx
fuente

Respuestas:

11

No, la mayoría de estas funciones de "análisis de orden superior" no tienen ningún manejo especial para los conjuntos de datos que son más grandes de lo que cabe en la memoria. Si los ejecuta en dichos conjuntos de datos, simplemente omitirá el backend.

Durante un tiempo evitamos hacer tales funciones, pero a medida que la RAM se hizo más grande por defecto y la gente quería más análisis y relativamente pocos de ellos alcanzaron los límites de memoria, la ecuación de beneficios / inconvenientes se ha desplazado a favor de "solo hazlo".

La más antigua de estas funciones, ST_Union () se creó originalmente para no estar vinculada a la memoria, a un costo (muy alto) en rendimiento. Todavía puede usar la función original, ST_MemUnion (), que (confusamente) en realidad usa menos memoria, ya que "mem" significa "memoria segura".

Otras funciones, como ST_Buffer (), los diversos clústeres, serán OOM si los alimenta con suficientes datos.

Paul Ramsey
fuente
1
"Sin memoria (OOM) es un estado de funcionamiento de la computadora a menudo no deseado en el que no se puede asignar memoria adicional para el uso de los programas o el sistema operativo". - wikipedia
Martin F