Použijte nativní bulk-load cestu databáze (Postgres COPY, MySQL ), rozdělte soubor na chunky nahrávané do s indexy a constrainty , pak jednou přebudujte indexy a slučte — a udělejte celý job , aby pád mohl pokračovat bez duplikace řádků.
Použijte nativní bulk-load cestu databáze (Postgres COPY, MySQL ), rozdělte soubor na chunky nahrávané do s indexy a constrainty , pak jednou přebudujte indexy a slučte — a udělejte celý job , aby pád mohl pokračovat bez duplikace řádků.
LOAD DATA100M-row CSV
│ split by byte offset
▼
[chunk 1] [chunk 2] ... [chunk N] N parallel workers
│ │ │
└──── COPY / LOAD DATA (no indexes) ────▶ staging_table (UNLOGGED)
│
rebuild indexes + validate
│
INSERT ... SELECT (upsert) into target
Naivní INSERT na řádek platí round-trip, parse, WAL/redo zápis a aktualizaci indexu 100 milionůkrát. Při i jen 1 ms na kus je to přes den. Bulk cesty vyhrávají amortizací toho všeho: COPY streamuje řádky v jedné protokolové zprávě, dávkuje WAL a přeskakuje plánování na příkaz. Na reálném hardwaru dělá jeden COPY 100k–500k řádků/s oproti pár tisícům u INSERTu.
UNLOGGED v Postgresu úplně přeskočí WAL), nikdy rovnou do živé tabulky. To izoluje nahrávání od čtenářů a umožní validaci před publikací.CREATE INDEX jednou — budování indexu v bulku (seřazeně) je mnohem levnější než 100 milionů inkrementálních aktualizací.COPY streamů. Throughput škáluje s I/O a CPU, dokud nenasytíte disk nebo WAL. Zvolte N podle jader/IOPS, ne „co nejvíc“.INSERT ... ON CONFLICT DO NOTHING/UPDATE (upsert), aby opakování nikdy nevkládalo dvakrát.Tazatel ověřuje, zda víte, že bulk cesta existuje a proč je o řády rychlejší — ne syntaxi COPY. Dobré: „použij COPY“. Skvělé: „COPY do UNLOGGED staging tabulky, indexy zahozené, paralelní chunky, přebudování poté, upsert k publikaci, resumovatelné podle chunk id.“ Klasická past je smyčka INSERTů (nebo ORM saveAll) a překvapení, že to trvá hodiny; druhá past je nahrávání rovnou do živé tabulky a blokování produkce.
maintenance_work_mem/temp prostor; budování indexu na 100M řádků se může přelít na disk.Knihovna IT otázek k pohovoru s podrobnými odpověďmi — od Junior po Senior.
Přispět