解决方案之数据同步

解决方案之数据同步

ID:38369878

大小:25.50 KB

页数:5页

时间:2019-06-11

解决方案之数据同步_第1页
解决方案之数据同步_第2页
解决方案之数据同步_第3页
解决方案之数据同步_第4页
解决方案之数据同步_第5页
资源描述:

《解决方案之数据同步》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、解决方案之数据同步本篇要讲的是数据库数据的同步方案,关于局域网,或者两台数据库IP可见的同步情况,这里不给出方案,因为这种情况数据库本身就提供了有很多种性能卓越的方案,看帮助文档就可以解决。本文要讲的案例是:有A,B两台或者更多的数据库服务器,分处于不同的网络,数据库IP不可见,端口不可见,现在需要A中的t1表----->单向同步到B中的t1表A中的t2表<----->双向同步到B中的t2表也就是AB两数据库服务器的单向同步和双向同步应该怎么做?在internet网中必须考虑网络速度,所以应该保证传输的

2、数据量尽量小一点再小一点。双向同步就是做两次单向同步而已,我们以从A服务器上的t1表单向同步到B服务器的t1表为例子说明同步方案。我们来看看三种方案,然后比较一下。方案一:·将A站的t1表的数据(DateTable类型)直接传送到B站的t1表;·B端修改式插入t1表中,所谓修改式插入就是当不存在就insert当存在就update;(相当于mysql里面的:insertintot1()values()onduplicatekeyupdate语法)·完成。(简单吧)点评:这是最直接最粗暴也最安全的方案,但是

3、如果同步的表数据比较多,这种方案肯定是行不通的。不过当数据量比较少时,比如说100条以内,则这种方案也凸现出了它的优点:安全,简单。所以这种方案也是有用武之地的。方案二:·在同步源一端表中(如案例中的A站t1表)增加is_syncis_del两个tinyint类型或者bite类型的字段;·当作Insert或者Update操作时,同时将is_sync设置成0,等待同步;·当作Delete操作时,将is_del设置成1,is_sync设置成0,而不是物理删除;·在A端查询所有is_sync=0的数据,传递到

4、B端;·B端接收到数据之后将B表中已经存在的数据作物理增删改并将成功的结果返回给A;·A端收到B操作成功的结果,将is_sync=0且在返回成功中的数据设置is_sync=1,另外如果还is_del=1则物理删除。点评:这种方案是比较常见但我觉得还不明智的方案,虽然它做到了进行细粒度的同步,但却添加了很多附加操作,如增删改操作都要更改is_sync的值,如果正好项目已经做到收尾阶段,所有的数据层已经实现了,再要加同步的话改动就比较大了,所以这种方案优点是同步精度提高,传输的数据量减少,但对原本的增删改代

5、码影响较大。与之相似的方案还有增加相同结构的表(称为它的待同步表),用触发器将增删改操作记录到这种待同步表中,然后按上面的流程实现的同步,那种方案也有同样的许多附加内容,如新增触发器和待同步表,也对现行系统造成增加负担和复杂度的负面影响。方案三:看方案三之前先介绍一下Rowversion这种字段类型,在mysql中是TIMESTAMP类型。LongLongago,MSDN说:“每个数据库都有一个计数器,当对数据库中包含rowversion列的表执行插入或更新操作时,该计数器值就会增加。此计数器是数据库行

6、版本。这可以跟踪数据库内的相对时间,而不是时钟相关联的实际时间。一个表只能有一个rowversion列。每次修改或插入包含rowversion列的行时,就会在rowversion列中插入经过增量的数据库行版本值。”具体的关于Rowversion类型的说明就不详细写出来了,读者可以在msdn上搜一下。总之,这种类型的字段会更着数据库的记录自动改变,不需手工操作,利用这个特性,设计出第三种同步方案。·在同步源一端(A中的t1表)表中增加如下三个字段(以mssql字段类型为例子)row_versionrowv

7、ersion,--当前版本sync_versionbinary(8),--已同步版本is_delbitdefault0,--是否删除·当A中t1表进行增加或修改操作时,row_version字段的值会自动变成当前时间,而sync_version的值不会变,当做删除操作的时候,需要将is_del设置成1,而不做物理删除;·查询A中所有row_version!=sync_version的数据,传送到B端;·B接收到数据之后做物理增删改,并将成功的结果返回给A;·A接收到B返回的结果之后,将sync_vers

8、ion与row_version的值设置成相同,如果其中有is_del=1的则物理删除;点评:这种方案我觉得是同步大表的最优方案,它只有在做删除操作的时候改成逻辑删除,其他操作不用考虑到同步的问题,对已经存在的系统影响最少,而且也是精确同步,不占用紧张的网络资源,这种方案是本篇的主角,也是我大力推荐的方案。在mysql中可以用TIMESTAMP类型实现,mysql的表中只要含有TIMESTAMP字段(且是无默认值的),则当表有更新或增加时就会

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。