.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
Техниките за извличане на събития биха ви помогнали МНОГО, но ще изискват публикуване на значими събития от клиентските приложения.   -  person Alexey Raga    schedule 30.01.2013
comment
Може да искате да помислите за използване на XML, за да приспособите променливата и променящите се схеми. Това ви дава начин да съберете различни данни и (да се опитате да) сортирате подробностите по-късно, стига винаги да включвате достатъчно информация, за да идентифицирате версията на схемата.   -  person HABO    schedule 30.01.2013


Отговори (1)


Не съм сигурен дали има съществуваща рамка, различна от sync, имах подобно изискване преди време, но не можах да използвам MS Sync, тъй като не използвах mssql.

Ето какво направих, някакъв персонализиран код,

Ще направя някои предположения относно промяната на схемата означава

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

Можете да създадете таблица с история на схемата със следните атрибути,

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

Тогава с цялата таблица, изискваща синхронизиране, всяка стойност има промяна на датата и последно променен потребителски атрибут, напр.

  • елемент1, 1/1/13, сървър
  • елемент2, 2/2/13, клиент1

Когато синхронизирате,

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

    ако промените дата > дата на синхронизиране и потребител = клиент => синхронизирайте със сървър (или актуализирайте, или вмъкнете)

също така разгледайте концепцията за синхронизиране на ms http://msdn.microsoft.com/en-us/sync/bb821992.aspx, ако искате да го копирате.

person john    schedule 30.01.2013