Лучшие практики для огромных объемов загрузки / выгрузки данных? - PullRequest
1 голос
/ 27 сентября 2010

Мой вопрос относится к сценариям ETL, где преобразование выполняется вне базы данных (полностью).Если бы вам нужно было извлекать, преобразовывать и загружать огромные объемы данных (более 20 миллионов записей или более) и задействованные базы данных: Oracle и MSSQL Server, что было бы лучшим способом:

  1. Эффективно читать из исходной базы данных: есть ли способ избежать всех запросов по сети?Я слышал хорошие вещи о методе Direct Path Extract / метод массовой выгрузки - я не совсем уверен, как они работают, но я предполагаю, что мне понадобится своего рода файл дампа для любого вида чтения / импорта данных не на основе сети?
  2. Эффективно записать преобразованные данные в целевую базу данных ?: Стоит ли рассматривать Apache Hadoop?Поможет ли это мне начать преобразование и параллельно загрузить все мои данные в базу данных назначения?- Будет ли это быстрее, чем, скажем, утилита массовой загрузки Oracle?Если нет, есть ли способ удаленного вызова массива загрузки на сервере Oracle / MSSQL?

Цените ваши мысли / предложения.

Ответы [ 2 ]

1 голос
/ 04 февраля 2011

Я бы всегда использовал для этого средства массовой загрузки базы данных.Дистанционное управление массовыми нагрузками является проблемой системного администратора;всегда есть способ сделать это.

Это означает, что первые два этапа ETL будут и приложение, которое генерирует правильный формат файла для средства массовой загрузки, и последний этап будет вызывать массовую загрузку.

0 голосов
/ 04 февраля 2011

Если вы извлекаете данные в плоский файл, вы можете использовать Oracle External Tables для непосредственного считывания файла в oracle.В этот момент вы можете выполнить прямую вставку (/ * + append * /), которая выполняет необходимое преобразование.Кроме того, если таблица не используется, вы сэкономите на повторных затратах, но при этом необходимо учитывать, что данные могут быть потеряны / должны быть перезагружены в случае сбоя носителя до следующего резервного копирования.

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

...