Непрерывно передавать данные от партнера

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

Каков наилучший подход к решению этой задачи?

У меня есть некоторый контроль над обеими сторонами уравнения, т. е. если мы решим использовать WCF, наш партнер реализует эту службу. Но важно максимально ограничить объем программ, которые должны выполняться на стороне партнеров. В идеале они должны использовать какую-либо функцию SQL Server для экспорта своих данных, а затем предоставить нам возможность заняться остальными.

Другие важные факторы:

  • SQL Server используется с обеих сторон (на нашей стороне 2008, у партнера неизвестно).
  • .NET 4 и/или все, что поставляется «из коробки» от Microsoft, никаких сторонних продуктов.
  • Трансфер осуществляется в одну сторону, т.е. от партнера только к нам.
  • Объем данных составляет около десятков тысяч обновленных записей/объектов, передаваемых ежедневно.
  • Модель данных довольно сложная, с несколькими таблицами и отношениями.
  • Решение должно быть терпимо к изменениям на стороне партнеров (мы не знаем, когда и как они меняют свою модель)
  • Ремонтопригодность и надежность важнее производительности, т. е. нам не нужны последние данные, но сервис должен легко модифицироваться, и он не может выйти из строя/остановиться.

Я задаю этот вопрос, потому что я ошеломлен количеством способов, которыми это можно сделать. Как разработчик .NET, я склоняюсь к внедрению WCF или, возможно, даже к какому-то пользовательскому обмену на основе xml. Но я знаю, что Biztalk, вероятно, подойдет здесь, и SQL Server, вероятно, имеет несколько отличных встроенных функций, о которых я не знаю.

Любые указатели, идеи и предложения приветствуются!


person Jakob Gade    schedule 25.08.2010    source источник
comment
Что такое большие объемы данных? 100 Гб/час? Насколько быстрой должна быть репликация. Предполагается ли, что это какая-то запланированная массовая загрузка или больше событий/записей?   -  person Albin Sunnanbo    schedule 25.08.2010
comment
Извините, под большим я имел в виду десятки тысяч записей пр. день, что потребует некоторой обработки, но вряд ли сильно нагрузит нашу пропускную способность. Массовое или управляемое событиями также зависит от предлагаемого нами решения. Это может быть ночная работа или просто непрерывный поток одиночных обновленных записей/объектов.   -  person Jakob Gade    schedule 25.08.2010


Ответы (3)


В дополнение к предложениям Уилла вы можете взглянуть на SSIS (службы интеграции SQL Server). При этом вы можете экспортировать на FTP-сайт, а затем импортировать его на другой стороне.

person Vidar Nordnes    schedule 25.08.2010

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

Вы можете копировать данные как есть и работать с логикой преобразования на своей стороне.

person Will A    schedule 25.08.2010
comment
Я думаю, что нам нужна более сервис-ориентированная архитектура: если мы собираемся поддерживать полную копию их базы данных, это также означает, что нам придется вносить изменения, когда они вносят изменения в свою модель. Должен быть какой-то промежуточный контракт, который определяет данные и их структуру. - person Jakob Gade; 25.08.2010
comment
Как доставка журналов, так и репликация будут применять изменения схемы, так что это может не быть серьезной проблемой. - person Will A; 25.08.2010
comment
Да, но тогда у нас будет база данных, которая волшебным образом изменится за одну ночь, возможно, сломав наш код импорта/преобразования. :) - person Jakob Gade; 25.08.2010
comment
Правда - в этом случае вам обязательно понадобится контракт между вами и удаленным клиентом. В этом случае службы SSIS (как предлагает Видар), вероятно, станут для вас отличным выбором при потреблении данных, их преобразовании и заполнении локальных таблиц. - person Will A; 25.08.2010

Наверное, вот как бы я это сделал:

  1. Поддерживайте локальную копию базы данных вашего партнера. Давайте назовем это промежуточным этапом, потому что здесь вы будете преобразовывать данные. Для этого используйте функцию сравнения данных (функция VS 2010, которую вы, конечно, можете автоматизировать) или репликацию. Я не уверен, запускает ли репликация CDC, но сравнение данных точно делает.
  2. Включите отслеживание измененных данных в промежуточной базе данных. Это дает вам только измененные записи, поэтому вы можете выборочно преобразовывать данные и обновлять свою базу данных.
  3. Создайте и разверните задание SSIS, которое сканирует таблицы CDC, преобразует данные и загружает их в вашу базу данных.

Насколько мне известно, Data Compare хорошо работает при изменении схемы (игнорирует изменения схемы). CDC также работает хорошо, все, что вам нужно сделать, это создать второй экземпляр захвата, если есть изменение схемы, и удалить первый.

person Josh    schedule 25.08.2010