Does anybody know of a design pattern that tackles the complexity of synchronising two identical relational databases? I keep running into this challenge on various projects and can't find a suitable pattern that deals with it in depth. The specific challenges that I am facing are:
- Ordering of tables and records which are dependant upon each other, especially where there are two tables that each have a foreign key reference to one another
- Ensuring that both models are consistent
- Concurrency where users of one model are writing to a model that is busy being updated by a sync session
- Minimising overhead where the knowledge of a change is fake and, while an update has been performed, the data hasn't changed
- Row versioning, leading from the previous point, row versioning using a rowversion or timestamp column updates the row version during an update even if no data has changed.
- Rolling back from an exception during a sync session
If anybody knows of a pattern, or even a stack, that tackles these challenges, I would love to hear your thoughts. I have tried using MS Sync Framework and while it does address many of the issues involved in data synchronisation, it isn't a complete solution in terms of the challenges listed above.