Самый эффективный способ массовой загрузки ненормализованного набора данных в PostgreSQL? - PullRequest
1 голос
/ 26 октября 2010

Я загрузил огромный набор данных CSV - отфильтрованные данные об использовании Eclipse с использованием COPY PostgreSQL, и он занимает огромное количество места, потому что он не нормализован: три столбца TEXT гораздо более эффективно реорганизуются вотдельные таблицы, на которые нужно ссылаться из основной таблицы с помощью столбцов внешнего ключа.

Мой вопрос: быстрее ли выполнить рефакторинг базы данных после загрузки всех данных или создать нужные таблицысо всеми ограничениями, а затем загрузить данные?Первая включает в себя многократное сканирование огромной таблицы (около 10 ^ 9 строк), в то время как вторая предполагает выполнение нескольких запросов для каждой строки CSV (например, был ли виден этот тип действия ранее? Если нет, добавьте его в таблицу действий, получите егоID, создайте строку в главной таблице с правильным идентификатором действия и т. Д.).

В настоящее время каждый шаг рефакторинга занимает примерно день или около того, а первоначальная загрузка также занимает примерно то же время.

1 Ответ

3 голосов
/ 26 октября 2010

Исходя из моего опыта, вы хотите собрать все данные, которые вас интересуют, в промежуточную таблицу в базе данных и перейти оттуда, после чего выполнять как можно больше заданной логики с помощью хранимых процедур.Когда вы загружаете в промежуточную таблицу, на ней нет никаких индексов.Создайте индексы после того, как данные загружены в таблицу.

Проверьте эту ссылку для некоторых советов http://www.postgresql.org/docs/9.0/interactive/populate.html

...