我有一种感觉,必须有客户端-服务器同步模式。但我完全没能用谷歌搜索一个。
情况很简单——服务器是中心节点,多个客户端连接并操作相同的数据。数据可以被拆分为原子,如果发生冲突,服务器上的任何内容都具有优先级(以避免让用户解决冲突)。由于潜在的大量数据,部分同步是首选。
对于这种情况,是否有任何模式/良好做法,或者如果您不知道 - 您的方法是什么?
以下是我现在认为解决它的方法:与数据并行,将保存一个修改日志,所有交易都带有时间戳。当客户端连接时,它以合并的形式接收自上次检查以来的所有更改(服务器检查列表并删除添加,然后删除,合并每个原子的更新等)。瞧,我们是最新的。
替代方法是保留每条记录的修改日期,而不是执行数据删除,只需将它们标记为已删除。
有什么想法吗?
您应该了解分布式变更管理的工作原理。查看 SVN、CVS 和其他管理增量工作的存储库。
您有几个用例。
同步更改。您的更改日志(或增量历史)方法看起来很适合这个。客户端将他们的增量发送到服务器;服务器将增量合并并分发给客户端。这是典型的案例。数据库将此称为“事务复制”。
客户端已失去同步。通过备份/恢复或由于错误。在这种情况下,客户端需要从服务器获取当前状态而不通过增量。这是从大师到细节的副本,该死的增量和性能。这是一次性的事情;客户端坏了;不要试图优化这一点,只需实现一个可靠的副本。
客户怀疑。在这种情况下,您需要将客户端与服务器进行比较,以确定客户端是否是最新的并且需要任何增量。
您应该遵循按顺序编号每个更改的数据库(和 SVN)设计模式。这样,客户端可以在尝试同步之前提出一个简单的请求(“我应该有什么修订?”)。即便如此,查询(“自 2149 年以来的所有增量”)对于客户端和服务器来说处理起来非常简单。