Синхронизация данных .Net между несколькими клиентами и центральным сервером

Мой клиент, поставщик финансовых услуг, установил свое программное обеспечение более чем на 500 клиентов.

Их приложение написано на C# и использует SQL Server в качестве базы данных. Они хотели бы собирать данные из баз данных всех своих клиентов, а также отправлять клиентам меньший объем данных. Есть пара требований:

  1. Синхронизация данных осуществляется с более чем 500 клиентами с 7 немного отличающимися схемами баз данных в 7 разных версиях их программного обеспечения.

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

  3. Должен быть написан на .Net, так как все их программное обеспечение работает в Windows.

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

Существует ли уже структура (кроме Microsoft Sync Framework, которая использует триггеры в базе данных), которая поможет в разработке этой системы синхронизации данных?

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


person user2023749    schedule 30.01.2013    source источник
comment
Методы Event Sourcing ОЧЕНЬ помогут вам, но для этого потребуется публиковать значимые события из клиентских приложений.   -  person Alexey Raga    schedule 30.01.2013
comment
Возможно, вы захотите подумать об использовании XML для размещения переменных и изменяющихся схем. Это дает вам возможность собрать разрозненные данные и (попытаться) отсортировать детали позже, если вы всегда включаете достаточно информации для идентификации версии схемы.   -  person HABO    schedule 30.01.2013


Ответы (1)


Не уверен, что существует какая-либо другая структура, кроме синхронизации, у меня было аналогичное требование некоторое время назад, но я не мог использовать MS Sync, поскольку я не использовал mssql.

Это то, что я сделал, какой-то пользовательский код,

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

  • можно добавить новые поля/атрибуты
  • существующие поля не будут удалены (т. е. вам не нужно переносить существующие данные)
  • часы на клиенте и сервере используют UTC и синхронизируются.

Вы можете создать таблицу истории схемы со следующими атрибутами:

  • имя таблицы
  • версия
  • дата последней синхронизации

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

  • item1, 01.01.13, сервер
  • пункт2, 02.02.13, клиент1

Когда вы синхронизируете,

  1. проверить таблицу схемы, если версия клиента ‹ версия сервера ==> схема обновления (запуск скриптов схемы обновления)
  2. Получите обновления сервера, новые данные для передачи клиенту, где владелец = сервер и дата изменена> дата изменения клиента
  3. сравнить каждую таблицу для даты последнего изменения синхронизации с датой последней синхронизации таблицы схемы для каждой таблицы

    если дата изменения> дата синхронизации и пользователь = клиент => синхронизировать с сервером (либо обновить, либо вставить)

также ознакомьтесь с концепцией синхронизации ms http://msdn.microsoft.com/en-us/sync/bb821992.aspx, если вы хотите воспроизвести его.

person john    schedule 30.01.2013