sql >> Databasteknik >  >> RDS >> PostgreSQL

Vad är det bästa sättet att ladda en enorm mängd data i PostgreSQL?

Gör INTE använd index förutom en unik enstaka numerisk nyckel.

Det stämmer inte med all DB-teori vi fick, men testning med stora mängder data visar det. Här är ett resultat av 100 miljoner laddningar åt gången för att nå 2 miljarder rader i en tabell, och varje gång en massa olika frågor på den resulterande tabellen. Första grafiken med 10 gigabit NAS (150MB/s), andra med 4 SSD i RAID 0 (R/W @ 2GB/s).

Om du har fler än 200 miljoner rader i en tabell på vanliga diskar går det snabbare om du glömmer index. På SSD:er är gränsen vid 1 miljard.

Jag har också gjort det med partitioner för bättre resultat men med PG9.2 är det svårt att dra nytta av dem om du använder lagrade procedurer. Du måste också ta hand om att skriva/läsa till endast 1 partition åt gången. Men skiljeväggar är vägen att gå för att hålla dina bord under väggen med 1 miljard rader. Det hjälper också mycket att multibearbeta dina laster. Med SSD, en enda process låter mig infoga (kopiera) 18 000 rader/s (med en del bearbetningsarbete inkluderat). Med multiprocessing på 6 CPU växer den till 80 000 rader/s.

Titta på din CPU- och IO-användning medan du testar för att optimera båda.




  1. Ansluter till mysql-behållare från värd

  2. fråga efter postgres db med nod-postgres

  3. Hur ersätter man null-värden med en text?

  4. Hur ansluter jag till mysql med laravel?