Какие общие подходы у меня есть для масштабирования импорта данных в БД, где структура таблицы определяется Django ORM? - PullRequest
0 голосов
/ 21 апреля 2020

В текущем проекте, над которым я работаю, у нас есть монолитное Django веб-приложение, состоящее из нескольких Django «приложений», в каждом из которых имеется множество моделей, и DjangoORM, определяющий макет таблицы для единственной экземпляра базы данных Postgres (RDS). ).

На полурегулярной основе нам необходимо выполнить большой импорт, сотни тысяч строк вставок и обновлений, в БД, которую мы используем в моделях DjangoORM в Jupyter из-за простоты использования. Django модели делают код простым, и у нас есть много сложных табличных отношений и задач сельдерея, которые управляются событиями записи.

Редактирование: мы выполняем пакетную запись в БД при импорте с помощью bulk_create или с использованием транзакций, где это полезно.

Этот импорт вырос и вызывает снижение производительности или может быть ограничен по скорости и занимать недели, к тому времени данные стоят намного меньше - я оптимизировал предварительную выборку и столько же запросов насколько это возможно, и тестирование довольно плотно вокруг этого. Панель инструментов AWS сообщает мне, что во время этих импортов экземпляр работает очень горячо, но затем возвращается к нормальному состоянию после того, как вы ожидаете.

В других местах, где я работал, был отдельный магазин, в котором все Вещи ETL преобразуются, а затем в какой-то процесс примирения, который либо идет в потоковом режиме, либо в тихий час. Я не понимаю, как добиться этого чисто, когда Django контролирует структуры таблиц.

Как мне добиться сценария, в котором:

  • Импорт данных запускает все действия что обычная запись в DjangoORM будет
  • Импорт данных не снижает производительность или не займет много времени
  • Поддерживается и прост в использовании

Любые материалы для чтения или ссылки на топи c было бы удивительно, если бы было трудно найти примеры людей, выходящих из этой стадии Django.

...