Comment les fonctions PostGIS gèrent-elles les tampons et le stockage externe?

17

Je vois une liste sans cesse croissante de nouvelles fonctions dans PostGIS, dont certaines impliquent GEOS(par exemple ST_ClusterKMeans). Certaines fonctions (par exemple celles de pgrouting) reposent sur d'autres bibliothèques (par exemple BGL).

Mon impression est que beaucoup de ces bibliothèques sous-jacentes (souvent en C / C ++) ne gèrent pas la gestion des tampons entre la mémoire et les mémoires / stockage / disques secondaires.

Les fonctions PostGIS fonctionnent-elles donc sur des ensembles de données volumineux qui ne peuvent pas être stockés dans la mémoire physique (ou virtuelle)?

Si oui, d'où viennent ces capacités de gestion des tampons (du point de vue de la mise en œuvre)?

tinlyx
la source

Réponses:

11

Non, la plupart de ces fonctions "d'analyse d'ordre supérieur" n'ont pas de traitement spécial pour les ensembles de données plus volumineux que ce qui peut tenir en mémoire. Si vous les exécutez sur de tels ensembles de données, vous serez juste OOM le backend.

Pendant un certain temps, nous avons évité de créer de telles fonctions, mais comme la RAM est devenue plus grande par défaut et que les gens voulaient plus d'analyses et que relativement peu d'entre eux atteignaient les limites de la mémoire, l'équation avantages / inconvénients s'est déplacée en faveur de "juste le faire".

La plus ancienne de ces fonctions, ST_Union () a été initialement conçue pour ne pas être liée à la mémoire, à des coûts (très élevés) en termes de performances. Vous pouvez toujours utiliser la fonction d'origine, ST_MemUnion (), qui (de manière confuse) utilise en fait moins de mémoire, car le "mem" signifie "mémoire sûre".

D'autres fonctions, comme ST_Buffer (), les différents clusters, seront OOM si vous les alimentez avec suffisamment de données.

Paul Ramsey
la source
1
"La mémoire insuffisante (MOO) est un état de fonctionnement de l'ordinateur souvent indésirable où aucune mémoire supplémentaire ne peut être allouée pour une utilisation par des programmes ou le système d'exploitation." - wikipedia
Martin F