话不多说,直接上表。原文链接
数据结构表 : (a => 增加 , u => 更新 , r =>删除)
ID | 操作类型 | 数据(文件名/字段名称等) | 版本号 | 其他字段…… |
a | file1 | 11 | ||
u | file2 | 11 | ||
r | file3 | 11 | ||
... | ... | ... | ... | ... |
r | file1 | 22 | ||
u | file2 | 22 | ||
a | file3 | 22 |
算法:
对于某个文件 fileN 的更新方法:
设 客户端的文件版本号 为 clientVersion ,服务器上最高版本号为 maxVersion。
opt1 = fileN 在 (clientVersion , maxVersion] 之间的"版本号"最小的一条数据的“操作类型”;
opt2 = fileN 在 (clientVersion , maxVersion] 之间的"版本号"最大的一条数据的“操作类型”;
然后,除 (opt1 == null && opt2 == null) || opt1 == opt2 之外的情况,有此口诀:
opt1 | opt2 | result |
a | u | a |
a | r | null |
u | a | u |
u | r | r |
r | a/u | u |
钦此。
好吧。。我承认上面在写天书。。这段是对公司的同步系统设计构想,可太过麻烦,所以没用,记录在这,有朝一日,万一又要搞呢。。。