Алгоритм, позволяющий двум программам обновлять одни и те же данные - PullRequest
2 голосов
/ 30 января 2012

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

Справочная информация:

У меня есть две системы.

  1. Одна - это огромная система мэйнфреймов, которая более или менее неизменна.

  2. Другой - система WCF / SQL Server 2008, которую я пишу.

ЕДИНСТВЕННЫЙ способ взаимодействия систем - отправка данных XML через NServiceBus и TCP. Затем XML анализируется каждой системой и обрабатывается. Время задержки связи может составлять несколько минут.

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

Вопрос:

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

Пример:

Я отправляю обновление для объема заказа в основной кадр (чтобы изменить его с 2 на 4). Но неизвестно мне, пользователь, напрямую подключенный к мэйнфрейму, обновил количество заказов с 2 до 7.

Когда мое обновление 4 будет обработано, оно перезапишет обновление до 7.

Если бы я не отправил обновление до 4, в конечном итоге мэйнфрейм сказал бы мне об обновлении до 7. Но к тому времени, когда он скажет мне, может быть другое обновление пользователем мэйнфрейма.

1 Ответ

4 голосов
/ 30 января 2012

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

Другой возможностью может быть наличие столбца «версия» в каждой соответствующей таблице. Номер версии будет увеличиваться при каждом обновлении. Отправка номера версии вместе с каждым сообщением об обновлении может затем использоваться как средство обнаружения одновременных обновлений. Однако само по себе это не поможет вам автоматически разрешать конфликты.

...