Советы по дизайну для синхронизации информации - PullRequest
0 голосов
/ 01 мая 2011

Я занимаюсь разработкой на Java, Ejb3.0, WebLogic.

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

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

например:

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

, если мы сравним B с C: (B - master DB)

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

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

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

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

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

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

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

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

ray.

Ответы [ 2 ]

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

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

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

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

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

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

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

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

--- edit ---

Хорошо, значит, вы хотите синхронизировать все с вашей главной базой данных B.

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

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

To 1.)

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

До 2.)

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

или

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

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

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