zoukankan      html  css  js  c++  java
  • 全网首发:原创SQL数据库同步工具

    程序设计

            设计需求

                    数据同步是分布式系统常常需要考虑的问题,即把分散的数据收集在一起,进行汇总统计。例如,耐克在全球均有分店,假如总店需要掌握分店的销售信息,就需要把分店的销售数据同步到总店。

                    目前主流数据库主要有两个:SQL Server和Oracle。对于Oracle数据库,有着比较成熟的同步技术,但SQL数据库则没有太好的解决方案,虽然已经有公司研发了同步程序,但是价格过于昂贵。

                    同时,数据库同步技术是一种常用技术,因此有必要开发出一套独立的数据库同步系统,避免重复劳动。

                    综上需求,特提出“SQL Server数据库同步系统”开发。

            运行环境

                    程序采用.NET 4.0开发,因此只能运行于Windows操作系统,同时需要.NET Framwork 4.0的支持。

                    程序中使用了SQLite本地数据库系统,但已经自行支持,无需安装其他组件。

                    程序针对SQL Server数据库开发,因此只支持SQL Server数据库,目前已知支持SQL Server 2003、SQL Server 2005、SQL Server 2008。

            技术内幕

                    回复超100公布 哈哈~~~

    程序使用说明

            系统部署示意图

            

            客户端使用说明

                    概述

                            本系统分为客户端和服务器两个部分,其中客户端承担了系统绝大数事务,服务器只是简单的执行客户端传送的命令,属于典型的C/S胖客户端瘦服务器模式。这样设计的目的是为了减轻服务器的压力,让系统更加流畅。

                             客户端负责采集分布数据库中的数据,然后汇总到服务器。客户端需要配置的数据库连接字符串是指分布数据库的连接字符串,连接成功后才可以向主数据库同步数据。例如,有A、B、C三个分布数据库,需要把数据汇总到D数据库,那么需要三个客户端,分别连接A、B、C数据库,客户端运行在哪无所谓,只要能连接数据库即可。

                    主页说明

     

                            主页显示一些公共信息。

                            程序启动日期有助于您分析日志同步状况;

                            扫描引擎同步引擎是本系统两大核心引擎,扫描引擎负责获取分布数据库的数据变动,同步引擎负责向服务器发送需要同步的数据。如果数据库连接字符串未设置,引擎不会开启,否则,引擎自动开启,无需人工干预。

                            数据库占用空间是指程序本地的SQLite数据库占用空间,由于长期使用会有大量日志信息,占用过大空间会使程序效率降低,可以及时清理。清理界面如下:

     

                            选择好要清除的日志类型,然后选择日期,提交后会清除该日期之前的所有记录。

                    活动日志说明

                      

                            该页面可以查询程序的活动状况,以日期查询可以显示某个日期的记录。

                            程序活动日志是扫描记录,详细记录了扫描信息。

                            程序同步活动日志是同步记录,详细记录了同步信息。

                    同步说明

                      

                            同步界面用来配置需要同步的表和同步时间,如果已经配置数据库连接字符串,将会显示数据库中的所有表,用户可根据需要选择要同步的表。

                            在要同步的表列表中,如果表间有外键约束,一定要把主表靠前排列。

                            同步时间即何时同步数据,用户可根据实际需要选择闲时同步,建议多个客户端选择不同的时间段同步,避免冲突。支持多个时间,以逗号分隔,24小时制表示,时间格式举例:20:33,22:12。

                            成功提交设置后,会自动开启扫描引擎和同步引擎。

                    参数设定说明

                      

                            参数设定界面用来配置程序的基本参数。

                            数据库连接字符串是指分布数据库的连接字符串,不是主数据库的连接字符串,一旦成功设置,不能更改,如需更改,要重新安装程序!

                            扫描间隔时间是指扫描引擎获取变动数据的时间间隔,建议设置为30分钟,用户可根据需求自行更改。

                            主服务器IP地址是指服务器所在电脑的IP地址,客户端将发送同步数据到服务器。

                    补充说明

                            程序一旦进步同步状态,将出现同步进度界面,此界面自动出现,自动关闭,无需干预,请耐心等待,千万不要在同步时关闭程序!

          服务器使用说明

                    概述

                            服务器功能比较简单,负责收集客户端发送过来的同步数据,然后添加到主数据库中,只需设置主数据库的连接字符串即可,成功连接后服务器启动。

                            服务器会自动保存成功连接的主数据库连接字符串。

                            服务器对同步不做任何记录。

                    使用说明                

                            设置好数据库连接字符串后,点击启动服务,如果连接成功,服务自动启动。

                            同时,界面上显示正在同步的客户端数量,正在同步客户端数量不为0时,无法关闭服务器,如果强行关闭,造成的一切后果自行负责。

                    补充说明

                            理论上应该先启动服务器,再启动客户端。

    程序使用注意事项

            1.必须确保您的数据库没有修改主键的操作。由于修改主键会引起很多问题,如果一定要修改主键,建议把修改拆分成删除→添加。

            2.必须确保您的数据库没有使用自增长的字段,因为自增长字段本程序无法干涉。

            3.支持所有SQL数据类型(除SQL2008新增的geography、geometry、hierarchyid)。

            4.数据库连接字符串一旦成功设置,不能更改!如需更改,需要重新安装程序。

    产品特点

            l  设计新颖。

            l  安全性高。

            l  稳定性强。

            l  效率高。

            l  占用资源低。

    已经修正BUG

            l  同步时间正则判断错误,少写了一个+。

            l  表删除按钮无效。

            l  主键检索错误,检索反了。

            l  点活动日志应该清空界面表格显示,点查询应该清空界面表格显示。

            l  SQL语句按照执行顺序构造,应该在配置里放最小LSN。

            l  同步时间判断不合理,一个时间点可能会同步两次,应该缩小同步条件。

            l  SQL日志读取异常,应该跳过无日志的记录。

            l  扫描引擎和同步引擎冲突,有交叉现象,通过对线程运行标记添加线程锁解决。

    版权信息

             作者:杨元。

    声明

            本程序属于免费程序,严禁用于商业用途。

            如果您喜欢此程序,可以向作者捐款。

     

    程序升级——2013年3月27日——增加表前缀(V2.0)

             由于产品开发初期设计不足,后期使用出现了一个问题:没办法区分数据来自哪个客户端,也就是没有区分分布数据库,最终数据将混在一起。

             经过考虑,提出表前缀概念。原理如下图:

             如果没有表前缀,那么所有分布数据库中的表名字都一样,在本例中都是t_Syn1或t_Syn2,如果不加区分,A、B、C三个分布数据库中的信息都会同步到主数据库的t_Syn1、t_Syn2表中,造成数据混乱。

             为了区分不同的分布数据库,采用表前缀的解决方案。

             根据图中的原理,假如分布数据库中有一个表是“t_Syn1”,如果想同步这个表的数据,那么主数据库中需要有一个名字叫“前缀_t_Syn1”的表,结构和分布数据库中的“t_Syn1”一样。

             这样一来,分布数据库“t_Syn1”表中的数据会同步到主数据库“前缀_t_Syn1”表中。

             前缀可以在客户端“参数设定”选项卡中设置,每个分布数据库具体用什么前缀由用户自己商定。

             注意:程序不会创建表,也就是说,用户必须手动创建主数据库中的表,主数据库表名=前缀+分布数据库表名,主数据库表结构必须和分布数据库表结构相同,只是名字不同而已。

    程序下载地址

    点击下载V1.0

    点击下载V2.0

  • 相关阅读:
    JDK6和JDK7中的substring()方法
    考试结束
    今天之总结
    暂别
    珍惜
    放弃
    我男神
    心态
    稳住,我或许能赢
    还是做好自己吧
  • 原文地址:https://www.cnblogs.com/iyangyuan/p/2943660.html
Copyright © 2011-2022 走看看