Sollte ich MultiPolygone in Polygone aufteilen?

8

In dem System, das ich implementiere, habe ich eine Tabelle T1 mit einer zugeordneten Geometrie. Die meisten Geometrien sind eine Menge von n Polygonen mit 10 <n <100. Im Moment in der Tabelle T1 habe ich eine Geometriespalte vom Typ MultiPolygon mit einem GiST-Index.

Da die Tabelle T1 groß sein wird, befürchte ich, dass es besser ist, eine Eins-zu-Viele-Beziehung zu einer zweiten Tabelle T2 mit einer Spalte vom Typ Polygon zu erstellen und jedes MultiPolygon in mehrere Polygone aufzuteilen.

Ich muss jedoch Suchvorgänge in der Tabelle T1 implementieren. Daher besteht der Nachteil beim zweiten Ansatz darin, dass ich einen zusätzlichen Join behandeln muss. Darüber hinaus wäre es komplizierter, eine Geometrie für einen einzelnen Datensatz der Tabelle T1 einzufügen.

Ich frage mich, ob jemand Erfahrung mit einem solchen Problem hat und ob diese Person etwas Licht ins Dunkel bringen könnte.

user3125
quelle

Antworten:

1

Ich würde gerne sagen, dass Sie sich keine Sorgen um die Größe Ihres T1-Tisches machen sollten. Indizes (und natürlich Trigger) wirken sich größtenteils auf die Leistung aus.

Neben einer Verknüpfung weniger wäre die Übersetzung von WKB in die interne PostGIS / GEOS-Darstellung meiner Meinung nach etwas optimaler, als dies für mehrere Polygone einzeln zu tun.

Die einzige Notwendigkeit für eine separate Geometrietabelle wäre, wenn ein Polygon mehr als einem Datensatz zugeordnet wäre. Multipolygone sollten für die Zwecke des Datenbankdesigns als eine Einheit betrachtet werden. Nur wenn die Beziehung komplexer ist, sollten Sie eine separate Tabelle in Betracht ziehen. Und es würde eine leichte physische Platzersparnis mit weniger Tischen geben.

Versuchen Sie es mit beiden Setups und führen Sie die Abfrage in pgadmin aus, wodurch Sie die Timings für jeden Teil der Abfrage erhalten.

MerseyViking
quelle
4
@ JerseyViking. Der Index macht einen weitaus besseren Job, wenn die Multipolygone in Polygone aufgeteilt werden. Im Fall eines Multipolygons wird der Index auf der Gesamtausdehnung bbox des Multipolygons aufgebaut. Je kleiner die bboxen im Index sind, desto effektiver ist der Index.
Nicklas Avén
@ Nicklas stimmt zu, dass BBOX mit Multi-Polygonen größer sein wird. +1
Mapperz
OK danke. Was ich jedoch nicht verstehen kann, ist, wann der MultiPolygon-Typ verwendet werden soll, wenn ein Index für Polygon immer besser funktioniert.
user3125
2
Die Entscheidung zwischen Polygon und Multi-Polygon ist komplexer. Es gibt noch mehr zu beachten. Multi-Polygone können ein "besseres" Datenbankdesign ergeben. Abhängig davon, wie die Polygone und Multi-Polygone räumlich zusammenhängen und welche Verarbeitung Sie analysieren möchten, kann der Gewinn beim Aufteilen der Multi-Polygone groß oder gar nicht sein. Multi-Polygone sind aufgrund der Verarbeitung auch ein gängiger Geometrietyp. Wenn Sie beispielsweise ST_Difference für ein Polygon und eine Kreuzungsstraße verwenden, erhalten Sie ein Multi-Polygon zurück.
Nicklas Avén
1
@MerseyViking, ich verstehe Ihren Standpunkt, aber da er zwischen 10 und 100 Polygone in jedem Multipolygon hat, besteht eine große Chance, dass die Aufteilung in Polygone einen großen Schub bringt. Und ein Join für indizierte Ganzzahlfelder kostet nicht so viel.
Nicklas Avén