Ich habe eine große Menge von Wettermodelldaten, die in eine PostgreSQL-Datenbank gestellt werden. Die Maschine verfügt über 8 Kerne und 16 GB RAM. Ich verwende PostgreSQL 9.3 mit PostGIS 2.1. Jede Tabelle enthält unterschiedliche Wetterdaten (Temperatur, Taupunkt, Wind usw.). Jede Tabelle enthält 6-7 Spalten: Breite, Länge, Punktgeometrie, Höhe, Datum und Uhrzeit, für die das Modell relevant ist, und 1-2 Datenwerte von Interesse. Die Daten werden hauptsächlich nach Zeit und Höhe nach einem Begrenzungsrahmen abgefragt. Es werden ungefähr 145.757.360 Zeilen pro Tabelle vorhanden sein (Daten, die älter als jetzt sind und nicht mehr relevant sind, werden gelöscht). Ich schätze die Größe der Tabellen ungefähr auf jeweils etwa 10 GB ohne Indizes. (Das sind 52 Byte Daten plus 23 Byte Overhead pro Zeile). Die Daten werden regelmäßig aktualisiert / eingefügt, sobald neue Modelldaten verfügbar werden. Hinweis:
Also schaue ich mir diese beiden Pläne an:
- Indizieren und gruppieren Sie einfach nach (Datum / Uhrzeit, Höhe) mit einem zusätzlichen Index für die Punktgeometrie. Führen Sie einen regulären Cron-Job aus, der alte Zeilen löscht, Vakuum / Analyse ausführt und Cluster neu gruppiert.
- Partition nach Datum / Uhrzeit und dann Cluster und Index nach Höhe pro Tabelle mit einem Index für die Geometrie. Führen Sie einen regulären Cron-Job aus, um künftig neue Tabellen hinzuzufügen und alte Tabellen zu löschen.
Des Weiteren,
- Ich weiß also, dass das Ablegen eines Tisches viel effizienter ist und das Löschen und Staubsaugen viel effizienter ist. Aber würde ich sonst einen Leistungsschub sehen?
- Sind Partitionen geeignet, wenn alle Tabellen gleichmäßig aktualisiert und ausgewählt werden, bis sie als irrelevant gelöscht werden (aus der Dokumentation geht hervor, dass Partitionen am besten funktionieren, wenn nur einige von ihnen ausgewählt werden)?
Sind die Auswahlen bei der Übermittlung von Daten schneller als der Clustered-Index? Ändert sich die Antwort, wenn mehrere Anfragen gleichzeitig gestellt werden?
Vielen Dank. Ich hoffe, ich habe alle benötigten Daten zusammengestellt. Wenn nicht, lass es mich wissen und ich werde es hinzufügen.
xmin
oderxmax
usw. Es gibt eine Funktion, die es in 9.4 schaffen könnte, die Sie wahrscheinlich begeistern wird, Minmax-Indizes genannt, die solche Dinge viel bequemer macht.