Получение вновь добавленных записей базы данных - PullRequest
0 голосов
/ 25 мая 2011

Предположим, у нас есть следующий общий сценарий:

  1. СУБД в качестве источника данных, которая представляет собой живую базу данных (постоянно заполняется данными).
  2. SQL Server 2008 в качестве места назначения данных в удаленном месте.

Нам нужно написать программное решение, которое будет:

  1. После первого запуска часто (скажем, несколько раз день) извлечь некоторые конкретные данные из источник. «Специфика» данные заключаются в том, что когда-то отображения / преобразования разработаны, они останутся такими.
  2. Извлеченные данные будут помещены в место назначения, ожидая, что будут использованы другим процессом (вне нашей области). Ожидание употребления означает, что они временно останутся там.

со следующими характеристиками:

  1. Извлечение может быть бит комплекс (это означает, что это не прямое извлечение из конкретная таблица, но комбинация соединения).
  2. Множество данных, связанных с источниками. Обычно около десятков миллионов строк , но не ожидается, что они превысят пару сотен.

Со следующими желаемыми ограничениями:

  1. Быть таким же независимым от базы данных сторона источника, насколько это возможно.
  2. Поддерживать минимальное вмешательство в исходную СУБД , поскольку она не «принадлежит нам», а любые изменения / добавления / запросы выполняются в «негибком» процессе.
  3. Мы не можем считать само собой разумеющимся, что таблицы, участвующие в извлечении из источника, будут иметь какую-то временную метку, ключ автоинкремента или что-то еще, что в конечном итоге поможет нам выполнить «запрос диапазона» и получить записи из "этого значения и после".

Вопрос (ы): Поскольку мы будем часто извлекать данные из оперативного источника, как мы можем эффективно извлекать вновь добавленные записи , учитывая вышеизложенные характеристики / ограничения? И если бы вам пришлось нарушить одно из ограничений, какое это было бы? Есть термин, который описывает эту проблему (что-то вроде разности данных или ...)? Моя главная задача заключается в том, как эффективно извлечь эту «разницу».

ПРИМЕЧАНИЕ. Я поддерживаю идею разрушения агностицизма в отношении баз данных и запуска в действие полезных механизмов, предоставляемых различными СУБД (метаданными?), Для получения последних добавленных строк из интересующих нас таблиц. Я прошу прощения за то, что был общим, но я ожидаю также общего ответа.

Ответы [ 2 ]

1 голос
/ 25 мая 2011

Моя главная проблема заключается в том, как восстановить эту «разницу» в эффективный способ.

Как вы сможете определить разницу полезным способом? Учитывая, что

  • вы не можете основывать разницу на метки времени.
  • Вы не можете основывать разницу на порядковые номера.

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

То, насколько эффективно вы сможете это сделать, во многом зависит от того, где вам разрешено хранить извлеченные ключи, и какие виды связи вы можете использовать между живыми данными и вашими сохраненными ключами.

1 голос
/ 25 мая 2011

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

Тем не менее, если нет способа узнать, что было добавлено после последнего импорта,вытащить все данные и сравнить их с целью, нет?

Я могу придумать два способа минимизировать нагрузку на исходную СУБД:

  1. Обновить структуручтобы разрешить идентификацию новых элементов по идентификатору или отметке времени.

  2. Добавьте в СУБД триггеры, которые пересылают вам любые ВСТАВКИ и ОБНОВЛЕНИЯ и поддерживают зеркало, не имеющее недостатков источника.

Опять же, кто-то другой может предложить лучшее решение.Возможно, с участием вуду:)

Удачи.

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