Как уменьшить влияние на OLTP при выполнении процесса ETL - PullRequest
2 голосов
/ 23 февраля 2011

Я новичок в разработке процесса ETL. В настоящее время у меня есть две базы данных, одна из которых является живой базой данных, где приложение использует ее для каждодневных транзакций. Другое хранилище данных.

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

Из-за недостатка знаний, решение, которое я получил, заключается в реализации чего-то, что называется скользящим столом. По сути, у живой базы данных есть две таблицы с одинаковой структурой. Я называю их tblLive1 и tblLive2 . У меня также есть синоним вызова tblLive . Все вставки сделаны по синониму. Синоним будет указывать на одну из таблиц.

Когда я запускаю процесс ETL, у меня есть хранимая процедура, которая удаляет и создает новый синоним, указывающий на tblLive2 . Это позволяет процессу ETL преобразовывать данные из tblLive1 без влияния на приложение. Предполагается, что процессу ETL требуется час, и я не хочу, чтобы процесс ETL блокировал таблицу, не позволяя приложению вставить в нее новые данные.

Это решение теоретически должно работать, но не элегантно.

Я уверен, что эта проблема является распространенной, есть ли другие решения?

Ответы [ 2 ]

2 голосов
/ 25 февраля 2011

Чтобы добавить к ответу Боба (см. Выше), обычно в приложениях DWH / BI все необходимые таблицы по существу копируются в «промежуточную» базу данных или «промежуточную» схему в вашей базе данных DWH (в зависимости от количестватаблицы / размер и т. д.).Обычно они находятся на сервере, отличном от вашей системы OLTP - для реализации DWH любого размера)

Чтобы ответить на вопрос о влиянии на производительность, это зависит от конфигурации вашего сервера / конфигурации io.

Вставляются ли данные в систему OLTP круглосуточно?или есть простои?или низкое время трафика?

Возможно, стоит использовать сжатие базы данных, так как IO станет вашим главным врагом, и это поможет значительно.

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

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

Вы также можете изучить использование таблиц, загружаемых триггером.Или измените сбор данных, если вы используете SQL 2008

...