需求:
1、现有一台Server装有ServerDB;Client若干,每台都装有ClientDB。
2、Client端有UI,执行上传,可以将ClientDB数据上传到ServerDB。
要求:
1、.net环境下用代码的方式实现,不希望使用数据库本身的同步机制。
2、使用的SqlServer数据库。 用其中的一张表,举例说明:
IDKey 主键 uniqueidentifier
MchID Client端的编号 int
Field1 其它字段
Field2 其它字段
Field3 其它字段
...... 需要注意的问题:
已经上传过的数据有可能在本地被修改过,也有可能被删除。也就是说本地执行上传后,Server上的数据要和本地一致。
1、现有一台Server装有ServerDB;Client若干,每台都装有ClientDB。
2、Client端有UI,执行上传,可以将ClientDB数据上传到ServerDB。
要求:
1、.net环境下用代码的方式实现,不希望使用数据库本身的同步机制。
2、使用的SqlServer数据库。 用其中的一张表,举例说明:
IDKey 主键 uniqueidentifier
MchID Client端的编号 int
Field1 其它字段
Field2 其它字段
Field3 其它字段
...... 需要注意的问题:
已经上传过的数据有可能在本地被修改过,也有可能被删除。也就是说本地执行上传后,Server上的数据要和本地一致。
http://syncdbmssql.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=12614我虽然没有测试过,但大致看过这个代码,它是通过sqlserver的smo当中的DependencyWalker相关功能实现的。
你的表设计要做些调整: 数据表增加2个个字段;
1:lastUpdateTime 时间戳,最近更新时间;知道哪些记录被修改
2:Deleted 是否已被删除; 知道哪些记录被修改新增记录是根据日志可确定哪些是新记录;同步的内容分3部分来实现:
1.客户端新增的记录
2.客户端修改的记录
3.客户端删除的记录如果数量量大,或要求同步的可靠性,如同步过程中,同步未完成,数据连接断了。日志功能就强大一些;
按每行记录(Id)来确定是不是已经同步成功来记日志。一旦中间失败,根据日志可以知道哪些已经完成了。
另外:我的需求中,Client端的用户比较少的,同时执行上传得可能性不大.
你可以给每个表追加一个字段交行ID(guid),用于唯一标示行。
客户端程序每次删除、更新、追加任何一条记录,采用如下结构进行保存
我曾经做了一个,但在字段之间有约束关系时问题会比较多。
你可以给每个表追加一个字段交行ID(guid),用于唯一标示行。客户端程序每次删除、更新、追加任何一条记录,
采用如下结构进行保存
ID---行ID,唯一标示行
Action---动作类型,Insert,Delete,Update
记录客户端操作数据库的流水。然后用上传程序,执行你记录的流水日志,清除成功执行的流水,如果中途有执行出错,不执行后续流水。---------------------------------------------------------
你这个同步还是单向的还相对简单,我们现在遇到双向同步也就是服务器端也需要更改,问题就很复杂了
注意:
客户端每次修改一条数据必须更新ts,删除数据的话dr 写入状态并不要真正删除。
方案:
查询server端数据与客户端数据 主键 一致 但是 ts 不一致的 说明次行数据已经更新;执行同步更新操作。不知是否能够给楼主提供一点思路。