Użyj natywnej ścieżki bulk-load bazy (Postgres COPY, MySQL ), podziel plik na kawałki ładowane do z indeksami i ograniczeniami, potem odbuduj indeksy raz i scal — i uczyń całe zadanie , aby awaria mogła wznowić bez duplikowania wierszy.
Użyj natywnej ścieżki bulk-load bazy (Postgres COPY, MySQL ), podziel plik na kawałki ładowane do z indeksami i ograniczeniami, potem odbuduj indeksy raz i scal — i uczyń całe zadanie , aby awaria mogła wznowić bez duplikowania wierszy.
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
Naiwny INSERT na wiersz płaci za round-trip, parsowanie, zapis WAL/redo i aktualizację indeksu 100 milionów razy. Nawet po 1 ms każde to ponad dzień. Ścieżki bulk wygrywają, amortyzując to wszystko: COPY strumieniuje wiersze w jednej wiadomości protokołu, grupuje WAL i pomija planowanie per instrukcja. Na realnym sprzęcie pojedynczy COPY robi 100k–500k wierszy/s wobec kilku tysięcy dla INSERT.
UNLOGGED w Postgres całkowicie pomija WAL), nigdy wprost do tabeli produkcyjnej. Izoluje to ładowanie od czytelników i pozwala walidować przed publikacją.CREATE INDEX raz — budowa indeksu wsadowo (posortowanego) jest znacznie tańsza niż 100 mln przyrostowych aktualizacji.COPY. Throughput skaluje się z I/O i CPU, aż wysycisz dysk lub WAL. Dobierz N do rdzeni/IOPS, nie „jak najwięcej".INSERT ... ON CONFLICT DO NOTHING/UPDATE (upsert), aby ponowne uruchomienie nigdy nie wstawiło podwójnie.Rozmówca sprawdza, czy wiesz, że ścieżka bulk istnieje i dlaczego jest o rzędy wielkości szybsza — nie składnię COPY. Dobrze: „użyj COPY". Świetnie: „COPY do tabeli stagingowej UNLOGGED, indeksy usunięte, równoległe kawałki, odbudowa po, upsert do publikacji, wznawialne po id kawałka". Klasyczna pułapka to pętla INSERT-ów (lub ORM-owe saveAll) i zaskoczenie, że trwa godzinami; druga pułapka to ładowanie wprost do tabeli produkcyjnej i blokowanie produkcji.
maintenance_work_mem/miejsca tymczasowego; budowa indeksu na 100 mln wierszy może przelewać się na dysk.Biblioteka pytań rekrutacyjnych IT ze szczegółowymi odpowiedziami — od Juniora do Seniora.
Wesprzyj