Стратегия проектирования: запрос и обновление данных в 2 разных базах данных - PullRequest
5 голосов
/ 17 июля 2010

У нас есть требование, по которому нам нужно запрашивать данные в двух разных базах данных (одна в SQL Server и другая в Oracle).

Вот сценарии, которые необходимо реализовать:

  1. Запрос: получить данные из одной базы данных и сопоставить значения в другой
  2. Обновление: получить данныеиз одной базы данных и обновите объекты в другой

Технология, которую мы используем: ASP.net, C #

Опции, о которых мы думали:

  1. Промежуточная область в одной базе данных
  2. Сервер ссылок (нельзя использовать подход, поскольку он не разрешен из-за политики всей организации)
  3. Создание веб-служб
  4. Создать2 различных DAL и выполнение операций со списком с данными из 2 источников в DAL

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

Ответы [ 7 ]

1 голос
/ 18 августа 2010

Разве невозможно использовать пакет служб SSIS для преобразования данных между двумя серверами и вызова его либо через проект ASP.Net & c #, либо через задание расписания, запускаемое по требованию?

0 голосов
/ 19 августа 2010

Имейте несколько DAL и обрабатывайте их в приложении - тысячи - это не большое число, вам нужно беспокоиться, только если у вас 100 000 или миллионы, и в этом случае ваше приложение будет зависать.

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

0 голосов
/ 19 августа 2010

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

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

0 голосов
/ 16 августа 2010

Трудно сказать, что является лучшим решением. Но у нас есть почти тот же сценарий.

RealTime:

Для обновления данных в реальном времени мы используем WebServices, поскольку в нашем случае две разные базы данных принадлежат разным проектам. Таким образом, каждый проект предлагает веб-сервис, который можно использовать для поиска и обновления данных. Преимущество заключается в том, что проект не должен заботиться об изменениях структуры базы данных, пока интерфейс веб-службы не изменится.

Статические данные:

Статические данные (например, сотрудники) будут зеркально отображены, поскольку для более быстрого доступа. Для этого огромного количества данных мы используем плоские файлы для ночного обновления.

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

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

0 голосов
/ 16 августа 2010

Лучшей стратегией для этого будет использование Linked Server, так как он предназначен для запросов и записи в гетерогенные базы данных, как вы описали выше.Но, очевидно, из-за упомянутого вами ограничения политики, это не вариант.

Таким образом, для достижения желаемого результата с наиболее оптимальной производительностью я предлагаю следующее:

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

Решение о том, записать ли это как веб-сервисили не собирается изменить процесс поиска данных.Но следует подумать о существенном сокращении накладных расходов на время передачи данных, поддерживая процесс как можно ближе к вашему серверу БД на той же машине или в пределах локальной сети / высокоскоростного соединения.

Обновление данных будет вполнепростой.Это будут просто стандартные двухфазные операции извлечения данных из одного и обновления другого.-

0 голосов
/ 16 августа 2010

Здесь есть статья о выполнении распределенных транзакций между сервером Microsoft SQL и Oracle:

Я не знаю, насколько хорошо это работает, однако, если оно работает , это, вероятно, будет лучшим решением для вас:

  • Это почти наверняка будет самый быстрый способ запроса к нескольким серверам баз данных.
  • Он также должен обеспечивать истинную поддержку транзакций даже при записи в обе базы данных.
0 голосов
/ 17 июля 2010

Будут ли результаты одной из баз данных достаточно малы для эффективного распространения?

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

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

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