Sync synchronizační tool
Úvod
V reálných provozech je třeba zajistit provoz informačního systému ve všech lokalitách bez ohledu na aktuální dostupnost či nedostupnost datového spojení. Systém Sync umožňuje umístit do každé lokality vlastní datový server a data mezi lokalitami jednoduchým způsobem průběžně synchronizovat.
Synchronizace probíhá prostřednictvím desktopové aplikace SyncClient a webové služby SyncServer, která slouží jednak ke konfiguraci celého synchronizačního modelu, jednak jako úložiště datových přírůstků. Vlastní proces synchronizace se skládá ze 2 kroků, Downloadu a Uploadu.
Download
Při downloadu si SyncClient vyžádá od SyncServeru své Subscription, což je seznam tabulek a lokalit, které se mají na danou lokalitu stahovat. Následně SyncClient v cyklu přes všechny tabulky a lokality ze subscription posílá SyncServeru žádosti o nové řádky, která následně přijme a uloží.
Nové řádky se poznají podle RowVersion, SyncClient si sám ve své cílové databázi ukládá pro každou kombinaci Tabulka + Lokalita nejvyšší stažený RowVersion a je tak schopen SyncServeru v každém kroku jasně specifikovat, jaké řádky požaduje.

Upload
Při Uploadu si SyncClient vyžádá od SynServeru své Publication, což je seznam tabulek, které má daná lokalita odesílat. Server zároveň ke každé tabulce vrátí RowVersion posledního řádku, který již byl na server odeslán. SyncClient poté odešle všechny novější řádky a SyncServer je uloží do své databáze.

Díky tomu, že definice Subscription a Publication jsou uloženy na serveru, je možno jednoduše a centrálně přidávat do procesu synchronizace nové tabulky.
Díky tomu, že poslední stažené RowVersions se ukládají do cíle přenosu (na lokalitu při downloadu, na server při uploadu), je možno po případné havárii databáze v dané lokalitě kdykoli začít znovu od začátku nebo od stavu z poslední zálohy.
Podmínky
Aby databázi bylo možno zapojit do systému Sync, musí splňovat tyto podmínky:
Lokalizovatelnost.
Každý řádek synchronizované tabulky musí mít jednoznačně definovatelnou jednu jedinou lokalitu jako svého vlastníka. Předpokládá se, že pouze na této lokalitě se bude do tohoto řádku zapisovat, ve všech ostatních lokalitách, kam se řádek během procesu synchronizace dostane, bude jen ke čtení.
Na to je třeba myslet už při návrhu aplikace. Například skladové pohyby je nutno implementovat tak, že při převodu skladové položky z jedné lokality do druhé přijímající lokalita zapíše do tabulky pohybů své nové řádky, ale nebude nijak upravovat existující řádky patřící odesílající lokalitě.
Zákaz delete
V synchronizovaných tabulkách se nesmí mazat řádky, tato operace by se nepřenesla. Aplikace musí být navržena tak, aby místo delete používala update.
Žádné cyklické závislosti.
Při definici Publications a Subscription, je třeba stanovit správné pořadí tabulek, aby se nejprve přenášely tabulky bez závislostí a až potom postupně tabulky, které jsou na nich závislé. V případě existence cyklických referencí mezi tabulkami toto není možné a vkládání synchronizovaných dat potom neprojde přes podmínky referenční integrity.
Sloupec GUID.
Každá synchronizovaná tabulka musí mít sloupec typu guid, pomocí kterého jsou všechny řádky všech tabulek jednoznačně identifikovány napříč všemi lokalitami. Pokud takový sloupec neexistuje, SyncClient jej při prvním spuštění vytvoří.
Sloupec RowVersion.
Každá synchronizovaná tabulka musí mít sloupec typu RowVersion, pomocí kterého je identifikují přírůstky dat. Pokud takový sloupec neexistuje, SyncClient jej při prvním spuštění vytvoří.
Uložení datových přírůstků
Datové přírůstky jsou na serveru ukládány řádek po řádku do Sql databáze. Každý řádek má uložen Id lokality, název tabulky, Guid, RowVersion a RawData. Raw data je xml zápis všech hodnot zdrojové tabulky.

Pro každou tabulku je tak velmi snadno dostupný výpis všech dat novějších než požadovaný RowVersion.
Výhody oproti defaultní MS SQL Synchronizaci
- Snadná konfigurace a správa
- Nízké pořizovací náklady (funguje i na SQL Express)
- Dostalečně rychlé a robustní pro přírůstky do cca 1000 řádků/hod