一种数据库之间的数据同步方法及系统与流程

文档序号:18301867发布日期:2019-07-31 10:15阅读:192来源:国知局
一种数据库之间的数据同步方法及系统与流程

本发明涉及数据库同步技术领域,特别涉及一种数据库之间的数据同步方法及系统。



背景技术:

现有的系统中的数据通常存储在数据库中,但为了容错通常会设置两台数据库存储数据,采用以下方式之一:

(1)使用数据库自身同步机制,如ora-rac方式。但这种方式的局限在于只能两台数据库之间进行数据同步。

(2)建立一个同步服务器,连接需同步的数据库。定时从数据库中查询数据然后将数据插入到另一个数据库中。但这种方式的缺陷在于,使用数据库自身机制只能在2台数据库之间进行同步。使用同步服务器需定时库中查询数据,会影响业务效率。当多个数据库不在同一地方时因为同步服务要连接数据库端口,所以需要网络开启更多策略来满足,而且数据以明文传输有很大安全隐患。



技术实现要素:

本发明的目的旨在至少解决所述技术缺陷之一。

为此,本发明的目的在于提出一种数据库之间的数据同步方法及系统。

为了实现上述目的,本发明的实施例提供一种数据库之间的数据同步方法,包括如下步骤:

步骤s1,每个客户端将要发送至服务端的数据保存到sql文件中,其中,所述sql文件包括:insert文件、modify文件和delete文件;

步骤s2,每个所述客户端定时读取所述sql文件,判断所述sql文件中的记录是否为最新记录,如果是且到达sql文件尾时,读取所述delete文件中的主键和所述modify文件中的主键,并在所述modify文件中删除与所述delete文件中的主键相同的记录,合并所述modify记录;

步骤s3,每个所述客户端将所述sql文件上传至所述服务端,并记录每个所述sql文件的最新记录时间到配置中;

步骤s4,所述服务端接收来自每个所述客户端的sql文件,并对多个客户端的sql文件进行合并,得到合并后的sql文件发送给每个所述客户端,其中,所述合并后的sql文件中记录有各个所述客户端的发送数据;

步骤s5,每个所述客户端接收并保存来自所述服务端的合并后的sql文件,通过读取所述合并后的sql文件,并在本地数据库执行sql,以实现不同客户端的数据库之间的数据同步。

进一步,每个所述客户端内设置发送数据目录,用于存储所述sql文件,所述发送数据目录下的每个表均对应有子目录,每个所述子目录中保存有所述insert文件、modify文件和delete文件。

进一步,在所述步骤s2中,所述判断所述sql文件中的记录是否为最新记录,包括如下步骤:

由所述客户端获取所述sql文件最新记录时间;

如果所述sql文件中出现小于最新时间的记录,则删除旧的记录,然后判断是否到达sql文件尾;

如果判断到达sql文件尾,则读取delete记录主键,否则返回继续判断所述sql文件中是否出现小于最新时间的记录。

进一步,在所述步骤s3中,所述客户端在将所述sql文件发给服务端的同时,记录每个所述sql文件最后一行的时间值,该时间值用于确定下次读取记录时从新的记录开始。

进一步,每个所述客户端与所述服务端之间的sql文件采用加密方式进行传输。

本发明实施例还提出一种数据库之间的数据同步系统,包括:服务端和多个客户端,其中,每个客户端内置有本地数据库,所述服务端与每个所述客户端之间数据传输;

每个所述客户端用于将要发送至服务端的数据保存到sql文件中,其中,所述sql文件包括:insert文件、modify文件和delete文件,然后定时读取所述sql文件,判断所述sql文件中的记录是否为最新记录,如果是且到达sql文件尾时,读取所述delete文件中的主键和所述modify文件中的主键,并在所述modify文件中删除与所述delete文件中的主键相同的记录,合并所述modify记录;将所述sql文件上传至所述服务端,并记录每个所述sql文件的最新记录时间到配置中;所述服务端用于接收来自每个所述客户端的sql文件,并对多个客户端的sql文件进行合并,得到合并后的sql文件发送给每个所述客户端,其中,所述合并后的sql文件中记录有各个所述客户端的发送数据;每个所述客户端还用于接收并保存来自所述服务端的合并后的sql文件,通过读取所述合并后的sql文件,并在本地数据库执行sql,以实现不同客户端的数据库之间的数据同步。

进一步,每个所述客户端内设置发送数据目录,用于存储所述sql文件,所述发送数据目录下的每个表均对应有子目录,每个所述子目录中保存有所述insert文件、modify文件和delete文件。

进一步,所述客户端还用于获取所述sql文件最新记录时间;如果所述sql文件中出现小于最新时间的记录,则删除旧的记录,然后判断是否到达sql文件尾;如果判断到达sql文件尾,则读取delete记录主键,否则返回继续判断所述sql文件中是否出现小于最新时间的记录。

进一步,所述客户端在将所述sql文件发给服务端的同时,记录每个所述sql文件最后一行的时间值,该时间值用于确定下次读取记录时从新的记录开始。

进一步,每个所述客户端与所述服务端之间的sql文件采用加密方式进行传输。

根据本发明实施例的数据库之间的数据同步方法及系统,将客户端安装在程序本地,从同一ip连接数据库端口,网络无需开放更多策略。获取同步数据时无需连接数据库进行查询,节约数据库意资源。服务端客户端通信可以进行加密传输提高安全性。利用服务端与多个客户端进行数据通信,以服务端作为桥梁,实现不同客户端的数据库之间的数据同步。

本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:

图1为根据本发明实施例的数据库之间的数据同步方法的流程图;

图2为根据本发明实施例的数据库之间的数据同步方法的示意图;

图3为根据本发明实施例的数据库之间的数据同步系统的结构图。

具体实施方式

下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。

本发明提出一种数据库之间的数据同步方法及系统,具有效率高、安全性强的特点。

如图1和图2所示,本发明实施例的数据库之间的数据同步方法,包括如下步骤:

步骤s1,每个客户端将要发送至服务端的数据保存到sql文件中,其中,sql文件包括:insert文件、modify文件和delete文件。

在本发明的一个实施例中,每个客户端内设置发送数据目录send,用于存储sql文件,发送数据目录下的每个表均对应有子目录,每个子目录中保存有insert文件、modify文件和delete文件。每个表主键值要具有唯一性,不同数据库中同一个表记录主键值不能相同。各个数据库服务器操作系统时间保持一致。

其中,insert文件、modify文件和delete文件的内容结构为:时间值+记录主键+具体sql内容。

步骤s2,每个客户端定时读取sql文件,判断sql文件中的记录是否为最新记录,如果是且到达sql文件尾时,读取delete文件中的主键和modify文件中的主键,并在modify文件中删除与delete文件中的主键相同的记录,合并modify记录。

具体的,参考图2,判断sql文件中的记录是否为最新记录,包括如下步骤:

由客户端获取sql文件最新记录时间;

如果sql文件中出现小于最新时间的记录,则删除旧的记录,然后判断是否到达sql文件尾;

如果判断到达sql文件尾,则读取delete记录主键,否则返回继续判断sql文件中是否出现小于最新时间的记录。

然后,由客户端定时读取delete文件中的主键,再读取modify文件中的记录。当modify文件中的主键跟delete文件中的主键相同时,删除掉modify文件中与delete文件中的主键相同的记录。重新读取modify文件,当多个行有相同主键时合并sql,字段相同时取时间靠后的,字段不同时合并字段保证modify文件同一主键只有一行记录。

步骤s3,每个客户端将sql文件上传至服务端,并记录每个sql文件的最新记录时间到配置中。

在本步骤中,客户端在将sql文件发给服务端的同时,记录每个sql文件最后一行的时间值,该时间值用于确定下次读取记录时从新的记录开始。

步骤s4,服务端接收来自每个客户端的sql文件,并为每个客户端均新建一个目录,由该目录保存对应客户端发送来的sql文件。

然后由服务端对多个客户端的sql文件进行合并,得到合并后的sql文件发送给每个客户端,其中,合并后的sql文件中记录有各个客户端的发送数据。

具体的,服务端执行与步骤s2中合并modify记录相似的手段,对接收到的不同客户端的sql文件进行合并,最终每个表只保留三个sql文件,作为合并后的sql文件发送给各个客户端。

在本发明的实施例中,服务端对多个客户端的sql文件进行合并方式如下:根据主键合并sql文件。例如,客户端一对字段一进行modify(修正),客户端二对字段二进行modify(修正),则可以合并成一个modify字段一、字段二的sql文件,减少modifysql语句的执行次数。例如,客户端一根据主键delete(删除)一条记录,客户端二也delete了一条记录且主键相同那这两条deletesql可以合并为一条deletesql文件。

根据delete删除掉modify中相同主键的记录,只为了减少modify的次数,deletesql还是会正常执行的。

步骤s5,每个客户端接收并保存来自服务端的合并后的sql文件。在本步骤中,客户端收到服务器发来的sql文件建立execute目录按表子目录结构保存sql文件。然后,通过读取合并后的sql文件,并在本地数据库执行sql,以实现不同客户端的数据库之间的数据同步。

需要说明的是,每个客户端与服务端之间的sql文件采用加密方式进行传输。在本发明的实施例中,数据加密传输可使用tsl或自定义的对称加密方式,在此不再赘述。

如图3所示,本发明实施例还提供一种数据库之间的数据同步系统,包括:服务端200和多个客户端100,其中,每个客户端100内置有本地数据库,服务端200与每个客户端100之间数据传输。

每个客户端100用于将要发送至服务端200的数据保存到sql文件中,其中,sql文件包括:insert文件、modify文件和delete文件。具体来说,每个客户端100内设置发送数据目录send,用于存储sql文件,发送数据目录下的每个表均对应有子目录,每个子目录中保存有insert文件、modify文件和delete文件。每个表主键值要具有唯一性,不同数据库中同一个表记录主键值不能相同。各个数据库服务器操作系统时间保持一致。

然后每个客户端100定时读取sql文件,判断sql文件中的记录是否为最新记录。

具体的,客户端100通过以下方式判断sql文件中的记录是否为最新记录:

获取sql文件最新记录时间;如果sql文件中出现小于最新时间的记录,则删除旧的记录,然后判断是否到达sql文件尾;如果判断到达sql文件尾,则读取delete记录主键,否则返回继续判断sql文件中是否出现小于最新时间的记录。

如果判断是最新记录且到达sql文件尾时,读取delete文件中的主键和modify文件中的主键,并在modify文件中删除与delete文件中的主键相同的记录。重新读取modify文件,当多个行有相同主键时合并sql,字段相同时取时间靠后的,字段不同时合并字段保证modify文件同一主键只有一行记录,以实现合并modify记录。然后客户端100将sql文件上传至服务端200,并记录每个sql文件的最新记录时间到配置中。

需要说明的是,客户端100在将sql文件发给服务端200的同时,记录每个sql文件最后一行的时间值,该时间值用于确定下次读取记录时从新的记录开始。

服务端200接收来自每个客户端100的sql文件,并对多个客户端100的sql文件进行合并,得到合并后的sql文件发送给每个客户端100,其中,合并后的sql文件中记录有各个客户端100的发送数据。

具体的,服务端200执行与客户端100中合并modify记录相似的手段,对接收到的不同客户端100的sql文件进行合并,最终每个表只保留三个sql文件,作为合并后的sql文件发送给各个客户端100。

在本发明的实施例中,服务端200对多个客户端100的sql文件进行合并方式如下:根据主键合并sql文件。例如,客户端一对字段一进行modify(修正),客户端二对字段二进行modify(修正),则可以合并成一个modify字段一、字段二的sql文件,减少modifysql语句的执行次数。例如,客户端一根据主键delete(删除)一条记录,客户端二也delete了一条记录且主键相同那这两条deletesql可以合并为一条deletesql文件。

根据delete删除掉modify中相同主键的记录,只为了减少modify的次数,deletesql还是会正常执行的。

每个客户端100还用于接收并保存来自服务端200的合并后的sql文件。客户端100收到服务器发来的sql文件建立execute目录按表子目录结构保存sql文件。通过读取合并后的sql文件,并在本地数据库执行sql,以实现不同客户端100的数据库之间的数据同步。

在本发明的一个实施例中,每个客户端100与服务端200之间的sql文件采用加密方式进行传输。在本发明的实施例中,数据加密传输可使用tsl或自定义的对称加密方式,在此不再赘述。

根据本发明实施例的数据库之间的数据同步方法及系统,将客户端安装在程序本地,从同一ip连接数据库端口,网络无需开放更多策略。获取同步数据时无需连接数据库进行查询,节约数据库意资源。服务端客户端通信可以进行加密传输提高安全性。利用服务端与多个客户端进行数据通信,以服务端作为桥梁,实现不同客户端的数据库之间的数据同步。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在不脱离本发明的原理和宗旨的情况下在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。本发明的范围由所附权利要求极其等同限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1