Массовая вставка данных в PostgreSQL - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть проект SpringBoot, который извлекает большой объем данных из одной базы данных, выполняет какие-то преобразования и затем вставляет их в таблицу в базе данных PostgreSQL.Этот процесс будет продолжаться для нескольких миллиардов записей, поэтому производительность является ключевым фактором.

Я пытался найти лучший способ сделать это, например, использовать ORM или JDBCTemplate.Одна вещь, которую я постоянно вижу в отношении массовых вставок в PostgreSQL, - это команда COPY .https://www.postgresql.org/docs/current/populate.html

Я в замешательстве, потому что использование COPY требует, чтобы данные были записаны в файл, и хотя я видел людей, говорящих, чтобы использовать их, я еще не сталкивался со случаем, когдакто-то упоминает, как получить данные в файл.Разве запись в файл не медленная?Если запись в файл идет медленно, то прирост производительности, который приносит COPY, означает ли это, что прироста вообще не было?

1 Ответ

0 голосов
/ 07 декабря 2018

Такого рода миграцию и преобразование данных лучше обрабатывать в хранимых процедурах.Предполагая, что исходные данные уже загружены в postgres (если не использовать утилиту postgres db, чтобы загрузить необработанные данные в некоторую плоскую таблицу).Затем запишите ряд сохраненных процедур для преобразования данных и вставьте их в таблицу назначения.

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

Лучше сохранять бизнес-логику для преобразования / сжатия данных близко к источнику данных (в хранимых процессах), а не извлекать данные на сервер приложений и повторно вставлять их.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...