Самый быстрый способ вставить несколько сотен пакетов по 500 000 - 3 миллиона записей в базу данных PostgreSQL - PullRequest
0 голосов
/ 31 октября 2018

У меня есть сервер PostgreSQL, размещенный на виртуальной машине в нашей интрасети. В других местах сети (эти машины не имеют доступа к одной и той же файловой системе) у меня есть ~ 850 R скриптов, запущенных (одновременно), каждый из которых генерирует от 500 до 3 миллионов строк данных, которые я хочу отправить (в настоящее время пусто) таблица в базе данных. Я пытаюсь определить, каков оптимальный способ сделать это. До сих пор я придумал эти решения:

  1. Используйте пакеты / функции R odbc и DBI :: dbWriteTable для передачи данных на удаленный сервер. В качестве теста я попытался использовать этот маршрут для 3 (из ~ 850) партий одновременно, и это заняло ~ 25 минут.

  2. Экспорт данных в виде текстового файла, использование SSH для копирования текстового файла на сервер, на котором размещена база данных, и использование COPY для импорта данных

Есть ли лучшие способы сделать это? Каков наилучший способ сделать это?

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

1 Ответ

0 голосов
/ 31 октября 2018

Из моего опыта работы с огромными базами данных PG нет ничего быстрее, чем оператор COPY на самом хосте PG. Если вы добавите в файлы дампа какой-нибудь быстрый gzip или около того, вы значительно ускорите передачу на этот хост. Сверху вы должны отключить все индексы и включить их после заполнения таблицы базы данных. Так что да, ваш (2) мой любимый, в сочетании с отключенными индексами во время импорта

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