发明内容
有鉴于此,本发明的主要目的在于提供一种实现数据同步的系统,能高效率地实现数据同步,并将服务器端数据库表中的数据及时同步到客户端。从而提高了客户端的数据处理效率。
本发明的另一目的在于提供一种实现数据同步的方法,能高效率地实现数据同步,并将服务器端数据库表中的数据及时同步到客户端。从而提高了客户端的数据处理效率。
为达到上述目的,本发明的技术方案是这样实现的:
一种实现数据同步的系统,该系统包括客户端数据库、客户端数据库连接单元、消息服务器、服务器端数据库、服务器端数据库连接单元、消息总线单元,该系统还包括:时间调度单元和扫描单元;其中,
时间调度单元,用于定时或周期性地调用所述扫描单元,使扫描单元执行扫描程序;
扫描单元,用于根据所述时间调度单元的调用执行扫描程序,在客户端向服务器端请求读取服务器端数据库表读权限的认证且认证结果为认证成功的情况下,通过所述服务器端数据库连接单元对所述服务器端数据库表中的数据进行扫描读取后,经由所述消息服务器中的所述消息总线单元以及通过所述客户端数据库连接单元,将所述扫描读取的数据同步到客户端的所述客户端数据库;
所述客户端数据库和所述客户端数据库连接单元包括在客户端中;所述服务器端数据库和所述服务器端数据库连接单元包括在服务器端中;所述消息总线单元包括在消息服务器中;所述时间调度单元和所述扫描单元包括在客户端或消息服务器中。
其中,所述时间调度单元和所述扫描单元在所述消息服务器中;该系统还包括位于所述消息服务器中的消息队列单元,用于在客户端启动所述消息服务器后,从所述客户端接收消息事件;通过所述消息事件来激活和驱动所述时间调度单元。
其中,所述时间调度单元和所述扫描单元在客户端中,所述客户端用于在客户端启动所述消息服务器时,直接激活和驱动所述时间调度单元。
其中,所述扫描单元还包括扫描策略模块,用于存储全量数据扫描策略和增量数据扫描策略;
所述扫描单元通过读取所述扫描策略模块中的所述全量数据扫描策略,执行对所述服务器端数据库表中数据的全量数据扫描;或者,所述扫描单元通过读取所述扫描策略模块中的增量数据扫描策略,执行对所述服务器端数据库表中数据的增量数据扫描。
其中,所述消息服务器为独立部署的部件,或者与所述客户端和服务器端部署在一起的部件。
一种实现数据同步的方法,该方法包括以下步骤:
A、客户端启动消息服务器后,激活并驱动时间调度单元;所述时间调度单元调用扫描单元来执行扫描程序;
B、所述客户端向服务器端请求读取服务器端数据库表读权限的认证,所述服务器端将读权限的认证结果返回客户端;当所述认证结果为认证成功时,扫描单元开始对所述服务器端数据库表中的数据进行扫描读取;之后,所述服务器端数据库将当前扫描读取的数据通过消息总线单元同步到客户端的客户端数据库。
其中,步骤A中,所述时间调度单元进一步定时或周期性地调用扫描单元来执行扫描程序。
其中,步骤B中,所述服务器端数据库将当前扫描读取的数据同步到客户端的客户端数据库具体为:
B1、所述服务器端数据库将当前扫描读取的数据返回所述扫描单元;
B2、扫描单元将所述当前扫描读取的数据转换成消息事件的形式后,分批推入消息总线单元;消息总线单元通过客户端数据库连接单元,将当前扫描读取的数据同步到所述客户端的客户端数据库。
其中,步骤A中,所述扫描单元来执行扫描程序进一步为:
A1、根据当前业务需求采用不同的扫描策略来执行扫描程序,并执行对所述服务器端数据库表中数据的扫描读取。
其中,当采用的扫描策略为全量数据扫描策略时候,步骤A1具体为:
所述扫描单元读取扫描策略模块中的全量数据扫描策略后,通过服务器端数据库连接单元连接到服务器端数据库,执行对所述服务器端数据库表中数据的全量数据扫描。
其中,当采用的扫描策略为增量数据扫描策略时,步骤A1具体为:
扫描单元读取扫描策略模块中的增量数据扫描策略后,通过服务器端数据库连接单元连接到服务器端数据库,执行对所述服务器端数据库表中数据的增量数据扫描。
基于服务器端存储数据重要性的考虑,本发明并未开放给客户端修改服务器端数据库表配置的改权限,而将读取服务器端数据库表的读权限开放给客户端。那么通过时间调度单元定时或周期性地调用扫描单元,使扫描单元执行扫描程序对服务器端数据库表中的数据进行扫描读取,就可以获知服务器端的数据,从而将服务器端的数据及时同步到客户端。从而提高了客户端的数据处理效率。进而,扫描单元还可以根据客户端配置信息中的数据量大小及业务要求选择采用不同的扫描策略执行扫描程序,对服务器端数据库表中的数据进行扫描读取后,将服务器端的数据及时同步到客户端。这里,扫描策略包括全量数据扫描和增量数据扫描。其中,全量数据扫描指将服务器端的数据全部同步到客户端。增量数据扫描指将服务器端修改后的数据同步到客户端。
综上所述,采用本发明,在不影响服务器端数据库表操作的情况下,能高效率地实现数据同步,并将服务器端数据库表中的数据及时同步到客户端。从而提高了客户端的数据处理效率。
具体实施方式
本发明的核心思想是:通过时间调度单元定时或周期性地调用扫描单元,使扫描单元执行扫描程序对服务器端数据库表中的数据进行扫描读取,就可以获知服务器端的数据,从而将服务器端的数据及时同步到客户端。从而提高了客户端的数据处理效率。
下面结合附图对技术方案的实施作进一步的详细描述。
一种实现数据同步的系统,该系统包括:客户端数据库、客户端数据库连接单元、消息服务器、服务器端数据库、服务器端数据库连接单元、消息总线单元、时间调度单元和扫描单元。
其中,客户端数据库、客户端数据库连接单元、消息服务器、服务器端数据库、服务器端数据库连接单元、消息总线单元是现有的,以下对他们的功能分别进行阐述。
客户端数据库和服务器端数据库皆为数据库,不同的是一个针对客户端而言,另一个针对服务器端而言。数据库位于用户与操作系统之间,用于管理数据库中保存的表,数据库中保存的表可以为网状型、关系型、面向对象型等多种形式。这里,数据库中保持的表也可以简称为数据库表。客户端数据库连接单元和服务器端数据库连接单元皆为数据库连接单元,不同的是一个针对客户端而言,另一个针对服务器端而言。数据库连接单元主要用于连接各种本地及远程数据库,屏蔽不同数据库之间的访问差异和数据获取语句的差异。消息总线单元位于消息服务器中,而消息服务器用于管理消息总线上传输的数据。那么消息总线单元在消息服务器的管理下,用于从服务器端数据库接收数据,并发送到客户端数据库。这里需要指出的是,消息服务器即可独立部署,也可与客户端和服务器端部署在一起。
时间调度单元,用于定时或周期性地调用扫描单元,使扫描单元执行扫描程序。扫描单元,用于根据时间调度单元的调用执行扫描程序。并且配置数据的输入端口、数据的输出端口、扫描的表名称和需扫描的表字段的名称。
其中,扫描单元还包括扫描策略模块,用于存储全量数据扫描策略和增量数据扫描策略。那么扫描单元通过读取扫描策略模块中的全量数据扫描策略,执行对服务器端数据库表中数据的全量数据扫描;或者,扫描单元通过读取扫描策略模块中的增量数据扫描策略,执行对服务器端数据库表中数据的增量数据扫描。
具体来说,时间调度单元和扫描单元的部署包括两种情况。第一种情况是,时间调度单元和扫描单元可以部署在消息服务器中,那么,扫描单元通过服务器端数据库连接单元对服务器端数据库表中的数据进行扫描读取后,经由消息总线单元以及通过客户端数据库连接单元,将扫描读取的数据及时同步到客户端的客户端数据库。另外,在这种情况下,实现数据同步的系统还包括消息队列单元。消息队列单元位于消息服务器中,当客户端启动消息服务器时,消息服务器将从客户端接收的消息事件转发给消息队列单元,那么,消息队列单元用于通过消息事件来激活和驱动时间调度单元。从而使时间调度单元能定时或周期性地调用扫描单元,使扫描单元执行扫描程序。
这里,举例来说,当将时间调度单元和扫描单元部署在消息服务器中时,数据的输入端口为服务器端数据库连接单元与扫描单元的接口;数据的输出端口为扫描单元与消息总线的接口,扫描单元通过服务器端数据库连接单元从服务器端数据库表中获取扫描数据,并将获取的扫描数据以消息事件的方式分批推入消息总线。
第二种情况是,时间调度单元和扫描单元还可以部署在在客户端中,那么扫描单元通过服务器端数据库连接单元对服务器端数据库表中的数据进行扫描读取后,服务器端数据库连接单元将扫描读取的数据返回消息总线单元,经由消息总线单元以及通过客户端数据库连接单元,将扫描读取的数据及时同步到客户端的客户端数据库。
系统实施例一为:将时间调度单元和扫描单元部署在消息服务器中的情况。
如图1所示,本实施例中,实现数据同步的系统包括:客户端1中的客户端数据库11和客户端数据库连接单元12,消息服务器2中的消息队列单元21、时间调度单元22、扫描单元23和消息总线单元24,服务器端3中的服务器端数据库31和服务器端数据库连接单元32。
这里,当客户端1启动消息服务器2时,消息服务器2将从客户端1接收的消息事件转发给消息队列单元21,消息队列单元21通过消息事件来激活时间调度单元22。并且,消息队列单元21通过消息事件驱动时间调度单元22定时或周期性地调用扫描单元23,使扫描单元23执行扫描程序。扫描单元23通过服务器端数据库连接单元32对服务器端数据库31表中的数据进行扫描读取后,将扫描读取的数据经由消息总线单元24以及通过客户端数据库连接单元12,将扫描读取的数据及时同步到客户端1的客户端数据库11。
系统实施例二为:将时间调度单元和扫描单元部署在客户端中的情况。
如图2所示,本实施例中,实现数据同步的系统包括:客户端1中的客户端数据库11、客户端数据库连接单元12、时间调度单元22和扫描单元23,消息服务器2中的消息总线单元24,服务器端3中的服务器端数据库31和服务器端数据库连接单元32。
这里,当客户端1启动消息服务器2时,由客户端1直接驱动时间调度单元22定时或周期性地调用扫描单元23,使扫描单元23执行扫描程序。扫描单元23通过服务器端数据库连接单元32对服务器端数据库31表中的数据进行扫描读取后,服务器端数据库连接单元32将扫描读取的数据返回消息总线单元24,经由消息总线单元24以及通过客户端数据库连接单元12,将扫描读取的数据及时同步到客户端1的客户端数据库11。
对比系统实施例一与系统实施例二可知,系统实施例一中,当客户端1启动消息服务器2时,消息服务器2将从客户端1接收的消息事件转发给消息队列单元21,消息队列单元21通过消息事件来激活时间调度单元22。并且,消息队列单元21通过消息事件驱动时间调度单元22定时或周期性地调用扫描单元23,使扫描单元23执行扫描程序对服务器端数据库31表中的数据进行扫描读取后,将服务器端3的数据及时同步到客户端1。
系统实施例二中,由于将时间调度单元22和扫描单元23直接部署在客户端1,因此当客户端1启动消息服务器2时,可以由客户端1直接驱动时间调度单元22定时或周期性地调用扫描单元23,使扫描单元23执行扫描程序对服务器端数据库31表中的数据进行扫描读取后,将服务器端3的数据及时同步到客户端1。这里的消息服务器2只负责数据的接收和发送。那么,客户端1可灵活地实现对时间调度单元22进行控制,而不影响消息服务器2对数据的接收和发送。
如图3所示,一种实现数据同步的方法,该方法包括以下步骤:
步骤101、客户端启动消息服务器后,激活并驱动时间调度单元;时间调度单元调用扫描单元来执行扫描程序。
步骤102、客户端向服务器端请求读取服务器端数据库表读权限的认证,服务器端将读权限的认证结果返回客户端;当认证结果为认证成功时,扫描单元开始对服务器端数据库表中的数据进行扫描读取。
步骤103、服务器端数据库将当前扫描读取的数据同步到客户端的客户端数据库。
方法实施例一为:以图1所示的实现数据同步的系统为例,本实施例基于该系统实现数据同步的方法包括以下步骤:
步骤201、客户端启动消息服务器后,消息服务器初始化,并通过内嵌初始化程序将从客户端接收的字符串转换成消息事件,向消息队列单元发送该消息事件。
步骤202、消息队列单元通过该消息事件激活并驱动时间调度单元定时或周期性地调用扫描单元,使扫描单元执行扫描程序。
这里,扫描单元执行扫描程序时,扫描单元可以根据不同扫描策略执行对服务器端数据库表中数据的扫描读取。具体包括两种情况。
第一种情况是,当扫描策略为全量数据扫描策略时,扫描单元可以通过配置文件读取扫描策略模块中的全量数据扫描策略后,通过服务器端数据库连接单元连接到服务器端数据库,执行对服务器端数据库表中数据的全量数据扫描。并且配置数据的输入端口、数据的输出端口、扫描的表名称、需扫描的表字段的名称。通过数据库连接模块连接到服务器端数据库扫描数据。
第二种情况是,当扫描策略为增量数据扫描策略时,扫描单元可以通过配置文件读取扫描策略模块中的增量数据扫描策略后,通过服务器端数据库连接单元连接到服务器端数据库,执行对服务器端数据库表中数据的增量数据扫描。并且配置数据的输入端口、数据的输出端口、扫描的表名称、需扫描的表字段的名称。通过数据库连接模块连接到服务器端数据库扫描数据。
步骤203、客户端向服务器端发送请求读权限认证的请求消息,并向服务器端请求读取服务器端数据库表读权限的认证,服务器端将读权限的认证结果返回客户端;如果读权限的认证结果为认证成功,则执行步骤204;否则,读权限的认证结果为认证不成功,客户端重新配置向服务器端请求读权限认证的请求消息后,转入执行步骤201。
这里,针对读权限的认证而言,认证方式包括两种情况。以下分别阐述。
第一种情况是通过账号进行认证。具体来说,客户端和服务器端事先约定好账号,如果客户端向服务器端发送的请求读权限认证的请求消息中包括了该账号,则服务器端解析出该账号就可以判定该客户端有读权限。第二种情况是通过IP地址进行认证。具体来说,服务器端事先知道IP地址对应的客户端是否有读权限,那么,当服务器端收到从与该IP地址对应的客户端发来的该请求消息时,根据该IP地址就可以判定该客户端是否有读权限。
步骤204、扫描单元通过服务器端数据库连接单元连接到服务器端数据库,开始对服务器端数据库表中的数据进行扫描读取。服务器端数据库将扫描读取的数据返回扫描单元。
步骤205、扫描单元将当前扫描读取的数据转换成消息事件的形式,之后分批推入消息总线单元。消息总线单元通过客户端数据库连接单元,将当前扫描读取的数据同步到客户端的客户端数据库。
以下对步骤202中涉及到的第一种情况进行具体阐述。
当数据同步初始化或者同步的数据量较少时,可以采用全量扫描策略。那么第一种情况的具体实现流程包括以下步骤:
步骤20211、采用全量扫描策略,开始执行对服务器端数据库表中数据的全量数据扫描读取。
步骤20212、判断是否需要设置扫描次数,如果需要,则执行步骤20213;否则,执行步骤20216。
这里需要指出的是,根据业务需求在扫描过程中可以设置对服务器端数据库表以次数全量扫描的方式或以循环全量扫描的方式。
步骤20213、以次数全量扫描的方式对服务器端数据库表中的数据进行扫描读取。将当前扫描读取的数据推入消息总线单元。
步骤20214、判断客户端数据库表中是否存在该扫描读取的数据,如果存在,则更新客户端数据库表中该数据,之后执行步骤20215;否则,将该扫描读取的数据写入到客户端数据库表中,之后执行步骤20215。
步骤20215、判断扫描次数是否为零,如果是,则结束当前全量数据扫描读取的流程;否则,转入执行20213。
步骤20216、以循环全量扫描的方式对服务器端数据库表中的数据进行扫描读取。将当前扫描读取的数据推入消息总线单元。
步骤20217、判断客户端数据库表中是否存在该扫描读取的数据,如果存在,则更新客户端数据库表中该数据,之后结束当前全量数据扫描读取的流程;否则,将该扫描读取的数据写入到客户端数据库表中,之后结束当前全量数据扫描读取的流程。
以下对步骤202中涉及到的第二种情况进行具体阐述。
当同步的数据量较多时,可以采用增量数据扫描策略。那么第二种情况的具体实现流程包括以下步骤:
步骤20221、采用增量数据扫描策略,开始执行对服务器端数据库表中数据的增量数据扫描读取。
步骤20222、判断服务器端数据库表中是否存在唯一标识列值比如时间戳,如果存在,则执行步骤20223;否则,执行步骤20227。
这里,标识列值用于标识表中的每行数据。
步骤20223、从服务器端的配置表中获取上次扫描读取处理的最大唯一标识列值,记为maxValue。
步骤20224、周期性地从服务器端数据库表中获取唯一标识列值大于maxValue的数据。
步骤20225、判断从服务器端数据库表中获取数据的对应记录数是否为零,如果为零,则结束当前增量数据扫描读取的流程;否则,执行步骤20226。
步骤20226、将当前扫描读取的数据推入消息总线单元。判断客户端数据库表中是否存在该扫描读取的数据,如果存在,则更新客户端数据库表中该数据,更新唯一标识列值和配置表中的maxValue,之后结束当前增量数据扫描读取的流程;否则,将该扫描读取的数据写入到客户端数据库表中,更新唯一标识列值和配置表中的maxValue,之后结束当前增量数据扫描读取的流程。
步骤20227、通过哈希(Hash)算法,将服务器端数据库表中每行数据算出一个唯一Hash值。将该算出的唯一Hash值存入哈希表HashMap中并置入缓存。
步骤20228、周期性地从服务器端数据库表中获取数据后,判断该数据对应的Hash值是否存在于HashMap中,如果存在,则结束当前增量数据扫描读取的流程;否则,执行步骤20229。
步骤20229、将当前扫描读取的数据推入消息总线单元,并将该数据对应的Hash值写入HashMap。判断客户端数据库表中是否存在该扫描读取的数据,如果存在,则更新客户端数据库表中该数据,之后结束当前增量数据扫描读取的流程;否则,将该扫描读取的数据写入到客户端数据库表中,之后结束当前增量数据扫描读取的流程。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。