2015-08-19 1 views
0

У меня есть процесс ETL, который будет запускаться периодически. Я использовал чайник (PDI), чтобы извлечь данные из исходной базы данных и скопировать их в базу данных этапа. Для этого я использую несколько преобразований с шагами ввода таблицы и вывода таблицы. Тем не менее, я думаю, что могу получить несогласованные данные, если исходная база данных будет изменена во время процесса, так как я не получаю моментальный снимок данных. Кроме того, я не знаю, будет ли база данных источника блокирована. Это будет проблемой, если извлечение займет несколько минут (и это займет их). Преимущество PDI заключается в том, что я могу выбрать только необходимые столбцы и использовать временные метки для получения только новых данных.PDI или mysqldump для извлечения данных без блокировки базы данных или получения несогласованных данных?

С другой стороны, я думаю, что mysqldump с -single-transaction позволяет мне получать данные согласованным образом и не блокировать исходную базу данных (все таблицы являются innodb). Дезадаптация заключается в том, что я получаю ненужные данные.

Могу ли я использовать PDI, или мне нужен mysqldump?

PD: Мне нужно прочитать определенные таблицы из определенных баз данных, поэтому я думаю, что xtrabackup это не очень хороший вариант.

ответ

1

Однако, я думаю, что я мог бы получить противоречивые данные, если исходная база данных изменяется в процессе, так как этот способ не получить снимок данных

Я думаю, что «Таблица Input» шаг не принимает во внимание любые изменения, которые происходят при чтении. Попробуйте простой эксперимент:

Возьмите .ktr файл с одним входом таблицы и таблицей. Попробуйте загрузить данные в целевую таблицу. В середине загрузки данных вставьте несколько записей в исходную базу данных. Вы обнаружите, что эти записи не считываются в целевую таблицу. (обратите внимание, я попытался с PostGreSQL дб и количество прочитанных строк составляет: 1000000)

Теперь для вашего вопроса, то я предлагаю вам с помощью PDI, так как это дает вам больше контроля над данными с точкой зрения контроля версий, последовательность, ППД и все связанные с DWBI мероприятия. PDI упрощает загрузку на сцену env. а не просто сбрасывать все таблицы.

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

+0

Что я имею в виду, так это то, что весь процесс занимает какое-то время, и некоторые изменения могут быть сделаны между первой и последней таблицами, поэтому возможно, что первая таблица не была обновлена, а другая таблица. Таким образом, я мог бы иметь регистр в таблице, который ссылается на то, что не существует. Например, если я добавляю рабочего на новый завод, но таблица фабрик уже скопирована без новой фабрики или, наоборот, фабрика закрыта, а работник перемещается на другую фабрику, но рабочая таблица уже скопирована и закрытая фабрика удаляется. – vjsp90

+0

@ vjsp90 Если вы извлекаете записи из источника в разные таблицы, и если нет связей b/w две таблицы при этом, вы можете попробовать параллельную загрузку таблиц. что я имел в виду по отношению к тому, что .. если ваша последняя таблица не зависит от нагрузки первой таблицы; вы cn попробуйте параллельную загрузку данных. !!! – Rishu

+0

Да, я бы предпочел параллельную нагрузку, но всегда получаю ошибки (эти изменения, а не то же самое, как правило, дублируют ключи) в разных преобразованиях (я думаю, что DDL-операции). Если я запускаю их последовательно, ошибок не происходит. – vjsp90

0

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

Нет причин, по которым вы не можете использовать pdi для организации процесса и использования mysql dump. Фактически для массовой вставки или извлечения почти всегда лучше использовать предоставленные поставщиком инструменты.

+0

На самом деле я использую mysql в шаге сценария оболочки. Проблема в том, что мне нужно скопировать все, и это будет каждый раз дольше beacuase. Я не могу использовать метку времени с дампом. – vjsp90

Смежные вопросы