Use o caminho nativo de bulk-load do banco (COPY do Postgres, do MySQL), divida o arquivo em chunks carregados em uma com índices e constraints , depois reconstrua os índices uma vez e faça merge — e torne todo o job para que um crash possa retomar sem duplicar linhas.
