Оптимизация наполнения баз данных с помощью Django

У меня есть файл csv размером 10 ГБ (34 миллиона строк) с данными (без описания столбцов/заголовков), которые необходимо заполнить в базе данных Postgres. В строке данных есть столбцы, которые должны быть в разных моделях.

У меня есть следующая схема БД:

enter image description here

В настоящее время я делаю следующее:

  1. Loop through rows:
    1. Create instance B with specific columns from row and append to an array_b
    2. Create instance C with specific columns from row and append to an array_c
    3. Create instance A with specific columns from row and relation to B and C, and append to an array_a
  2. Bulk create in order: B, C and A

Это работает совершенно нормально, однако на заполнение БД уходит 4 часа. Я хотел оптимизировать процесс заполнения и наткнулся на команду psql COPY FROM. Поэтому я подумал, что смогу сделать что-то вроде:

  1. Create instance A with specific columns from the file
    1. for foreign key to C
      • create instance C with specific columns from the row
    2. for foreign key to B
      • create instance B with specific columns from the row
  2. Go to 1.

После небольшого исследования того, как это сделать, я обнаружил, что он не позволяет манипулировать таблицами при копировании данных (например, просматривать другую таблицу для получения соответствующих внешних ключей для вставки)

Кто-нибудь может подсказать мне, на что обратить внимание, какой-нибудь другой метод или "хак", как оптимизировать популяцию данных?

Заранее спасибо.

Ссылки:

Вернуться на верх