PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Was ist der beste Weg, um eine große Datenmenge in PostgreSQL zu laden?

NICHT Verwenden Sie Indizes mit Ausnahme eines eindeutigen einzelnen numerischen Schlüssels.

Das passt nicht zu allen DB-Theorien, die wir erhalten haben, aber Tests mit großen Datenmengen zeigen es. Hier ist ein Ergebnis von 100 Millionen Ladevorgängen gleichzeitig, um 2 Milliarden Zeilen in einer Tabelle zu erreichen, und jedes Mal eine Reihe verschiedener Abfragen in der resultierenden Tabelle. Erste Grafik mit 10 Gigabit NAS (150MB/s), zweite mit 4 SSD in RAID 0 (R/W @ 2GB/s).

Wenn Sie auf normalen Festplatten mehr als 200 Millionen Zeilen in einer Tabelle haben, geht es schneller, wenn Sie Indizes vergessen. Bei SSDs liegt die Grenze bei 1 Milliarde.

Ich habe es auch mit Partitionen für bessere Ergebnisse gemacht, aber mit PG9.2 ist es schwierig, davon zu profitieren, wenn Sie gespeicherte Prozeduren verwenden. Sie müssen sich auch darum kümmern, jeweils nur auf 1 Partition zu schreiben/lesen. Trennwände sind jedoch der richtige Weg, um Ihre Tische unter der 1-Milliarden-Reihenwand zu halten. Es hilft auch sehr um Ihre Lasten zu multiprozessieren. Mit SSD ließ mich ein einzelner Prozess 18.000 Zeilen/s einfügen (kopieren) (einschließlich einiger Verarbeitungsarbeiten). Mit Multiprocessing auf 6 CPUs wächst es auf 80.000 Zeilen/s.

Beobachten Sie während des Tests Ihre CPU- und IO-Auslastung, um beides zu optimieren.