Wie gehen PostGIS-Funktionen mit Puffern und externem Speicher um?

17

Ich sehe eine ständig wachsende Liste neuer Funktionen in PostGIS, von denen einige GEOS(z ST_ClusterKMeans. B. ) betreffen . Einige Funktionen (z. B. die in pgrouting) basieren auf anderen Bibliotheken (z BGL. B. ).

Mein Eindruck ist, dass viele dieser zugrunde liegenden Bibliotheken (oft in C / C ++) nicht mit der Pufferverwaltung zwischen dem Speicher und den sekundären Speichern / Speichern / Datenträgern umgehen.

Funktionieren die darüber liegenden PostGIS-Funktionen also auch bei großen Datenmengen, die nicht im physischen (oder virtuellen) Speicher abgelegt werden können?

Wenn ja, woher kommen diese Pufferverwaltungsfunktionen (aus Sicht der Implementierung)?

Tinlyx
quelle

Antworten:

11

Nein, die meisten dieser Funktionen zur Analyse höherer Ordnung haben keine spezielle Behandlung für Datensätze, die größer sind, als sie in den Speicher passen. Wenn Sie sie auf solchen Datensätzen ausführen, werden Sie nur das Backend OOM.

Für eine Weile haben wir solche Funktionen vermieden, aber als der RAM standardmäßig größer wurde und die Leute mehr Analysen wollten und relativ wenige von ihnen jemals die Speichergrenzen erreichten, hat sich das Verhältnis von Vor- und Nachteilen zugunsten von "Just do it" verschoben.

Die älteste dieser Funktionen, ST_Union (), wurde ursprünglich so erstellt, dass sie nicht speichergebunden ist, was zu (sehr) hohen Leistungseinbußen führt. Sie können weiterhin die ursprüngliche Funktion ST_MemUnion () verwenden, die (verwirrenderweise) tatsächlich weniger Speicher benötigt, da "mem" "speichersicher" bedeutet.

Andere Funktionen, wie ST_Buffer (), die verschiedenen Cluster, werden OOM, wenn Sie sie mit genügend Daten füttern.

Paul Ramsey
quelle
1
"Nicht genügend Arbeitsspeicher (OOM) ist ein häufig unerwünschter Zustand des Computerbetriebs, bei dem kein zusätzlicher Arbeitsspeicher für die Verwendung durch Programme oder das Betriebssystem zugewiesen werden kann." - Wikipedia
Martin F