Рекомендации по проектированию для синхронизации информации

#java #oop #design-patterns

#java #ооп #шаблоны проектирования

Вопрос:

Я разрабатываю под Java, Ejb3.0, WebLogic.

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

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

например:

допустим, у меня есть база данных A, база данных B и база данных C.

если мы сравним B с C: ( B — это главная база данных)

желаемая цель:

сценарий 1. У A есть запись, которая отсутствует в B. мы выполняем действие = B добавляем в его таблицу отсутствующую запись.

сценарий 2. У A есть запись, и у B также есть эта запись. действие, которое мы предпринимаем = B, обновляет информацию о записи точно так, как это показано в A.

(То же самое относится к базе данных A по сравнению с базой данных B).

Метод compare предполагает сравнение информации между конкретными столбцами таблицы.

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

Хотелось бы услышать несколько советов по дизайну (может быть дизайн ООП или любой другой шаблон). Даже если это немного накладно для какого-то специального дизайна. Я все еще хотел бы сделать это, чтобы я мог узнать что-то новое, а также использовать этот механизм для синхронизации других систем.

Заранее спасибо,

луч.

Комментарии:

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

Ответ №1:

Хороший ответ на этот вопрос зависит от объема данных.

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

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

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

Может быть, вы могли бы подробнее объяснить свои вопросы…

— редактировать —

Хорошо, итак, вы хотите синхронизировать все с вашей B Master DB.

Существует несколько подходов, в зависимости от нескольких имеющихся у вас параметров среды, двумя основными направлениями будут

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

К 1.)

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

К 2.)

a) Чтобы разрешить создавать дельты, вы должны идентифицировать измененные элементы. Для этого вы можете использовать триггеры DB, но это очень специфично для DB и очень сложно поддерживать,

или

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

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

Комментарии:

1. Какие детали, например?

2. Какой объем данных для каждой базы данных вы ожидаете? Что важнее ремонтопригодность или производительность?

3. Я предпочитаю иметь лучшую ремонтопригодность и повторное использование. Объем данных на данный момент неизвестен. может быть много записей из разных таблиц.

Ответ №2:

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

Комментарии:

1. Мы уже рассматривали этот вариант. проблема в том, что базы данных находятся в разных системах. Oracle и SQL SERVER, и между ними сложно интегрироваться.