数据同步的方法和***
技术领域
本发明涉及同步技术,特别是涉及一种数据同步的方法和***。
背景技术
现代软件技术中,数据库的应用非常广泛。一个软件的具体功能通过应用层实现,达成用户的需求。在用户和软件的交互过程中,数据库扮演重要的角色:保存用户数据、应用层数据,以便完成数据的可回溯性、可重现性、持久性。而应用层为了提高效率,会在内存中保存常用的数据库记录。
因此,在这个交互过程中:用户、应用层和数据库,会存在一些问题:比如,数据库内部表格之间数据记录一致性、数据库和应用层数据一致性以及用户界面数据更新等。
目前,现有技术中提供一种数据同步的原理示意图,详见图1。如图1所示,所述数据同步的实现过程为:
首先,用户通过图形用户界面(GUI,Graphical User Interface)进行数据增加/删除/修改操作;即所述GUI把用户请求发送给应用层;所述应用层(如图1中的功能模块A、B、C、D)接收到GUI下发请求,解析该请求消息;并根据解析消息的内容,构造新数据(增加操作情况)或者从数据层(图1中数据库DATABASE)读取需要删除/修改的数据(删除/修改操作情况);并在内存中完成数据的增加/删除/修改操作。
所述应用层完成数据加工后(增加/删除/修改),向数据层发出更新请求,要求数据层更新数据记录信息;所述数据层完成数据更新后,向应用层返回更新结束信息;所述应用层不同功能模块间相互发送数据同步请求(如图1中功能模块A、B、C、D),完成应用层内数据一致。
然后,所述应用层构造用户返回消息,所述消息内容包含了增加/删除/修改后的最新数据;所述应用层向GUI发送数据更新消息(数据更新由不同的功能模块独立发送)。
最后,当GUI接收到应用层返回消息时,更新显示信息,提示用户操作完成。
由上述公开的技术方案可知:当用户需要对数据进行删除或修改时,应用层需要从数据层读取数据,存在读取数据这个冗余步骤,且效率不高,容易出错。当数据层发生变化,应用层需要修改处理过程时,才能正确实现其功能,缺少可扩展性。例如:数据层接口发生变化,数据层记录信息增加/删除/修改等。在应用层中模块间(比如A、B、C和D)消息发送关系繁多,容易造成遗漏或重复发送情况,不同模块接收到同步消息后,则会发送响应消息给GUI,容易因为上报消息先后顺序原因,造成GUI更新错误。当存在网络通信延时问题,导致删除消息先于更新消息到达GUI,这时GUI先删除再更新,而不是正确步骤的先更新再删除。易造成用户界面不能正确更新。
因此,现有技术的缺点为:1)在应用层完成数据更新,过程复杂,容易出错;2)数据层发生变化,应用层需要修改处理过程,才能正确处理,缺少可扩展性;3)模块间消息发送关系繁多,容易造成遗漏或重复发送情况;4)不同模块发送消息给用户界面,容易因为上报消息先后顺序原因,造成用户界面不能正确更新。
发明内容
本发明解决的技术问题是提供一种数据同步的方法和***,以简化目前技术中应用层和数据层数据更新的交互次数;当数据层发生变化时,应用层不需要修改处理过程,减少应用层各个模块间消息的发送;此外,本发明还统一完成用户界面的数据更新,以提高***的效率。
为解决上述问题,本发明提供一种数据同步的方法,所述方法包括:
A、用户通过图形用户界面将用户请求消息发送给应用层;
B、应用层根据所述请求消息构造新数据,并向数据层发送给更新请求;
C、数据层完成数据更新,并向应用层反馈更新结束消息;
D、应用层接收到更新结束消息后,更新内存中的数据信息,构造用户返回消息,并向图形用户界面异步反馈用户返回消息;
E.所述图形用户界面接收到更新消息后更新显示信息。
步骤B中应用层根据所述用户请求构造新数据的具体过程为:
应用层解析所述请求消息,得到所述请求消息的增加操作;
根据所述增加操作构造新数据。
所述应用层解析所述请求消息,得到所述请求消息的增加操作的具体实现过程为:根据增加操作的动作类型和操作对象填写预定义的数据结构,完成新数据构造。
步骤C中所述数据层完成数据更新的过程为:数据层通过监控触发器自动完成相关数据表格间数据记录一致的更新,并通过结构式询问语言的***指令,记录在操作记录跟踪日志中,以供应用层读取。
步骤D中所述应用层接收到更新消息后,更新内存中的数据信息的具体过程为:应用层接收到更新消息后,通过读取操作记录跟踪日志中的内容,更新内存数据信息。
应用层通过主动刷新、定时刷新的方式更新内存数据信息,其,
所述定时刷新方式的实现过程为:
应用层调用数据层接口,修改表格数据;
数据层通过创建触发器、删除触发器、修改触发器,将应用层修改的数据操作记录到操作记录跟踪日志中;
应用层定时读取操作记录跟踪日志的记录,更新内存中的公共数据;
所述主动刷新方式的实现过程:
应用层调用数据层接口,修改表格数据;
数据层通过创建触发器、删除触发器、修改触发器,将应用层修改的数据操作记录到操作记录跟踪日志中;
若定时刷新时间还没有到,应用层调用数据层接口,访问内存数据;
应用层主动读取操作记录跟踪日志的记录,更新内存中的公共数据。
步骤D中所述构造用户返回消息的过程为:
如果数据层反馈更新结束消息为成功,且应用层更新内存数据成功,则返回消息携带成功操作;
如果数据层反馈更新结束消息和应用层更新内存数据有任意一项不成功的情况,则返回消息携带失败操作。
另外,本发明还提供一种数据同步的***,所述***包括:
图形用户界面,即人机接口,用于向应用层发送用户的请求信息;
功能模块,位于应用层,用于接收用户发送的请求信息,并根据该信息构造新数据后,向数据层发送更新请求信息;
触发器,位于数据层,用于在填写触发器内容后,完成数据的更新,以及完成存在外键关系的表格之间记录相互一致,将所述更新及记录一致的过程记录在数据库的操作记录跟踪日志中;
虚拟拓扑模块,位于数据层,是由数据库中一张或若干张表组成,用于配置数据变化的监控记录;
公共模块,位于应用层,用于内存数据信息的管理,并根据所述操作记录跟踪日志完成内存数据的刷新以及支持存在外键关系的表格之间的同步;
独立模块,位于应用层,用于实现虚拟拓扑模块配置数据变化的监控记录异步上报至图形用户界面。
所述触发器包括:创建触发器、删除触发器和更新触发器,分别用于实现外键检查、可配置的外键检查、级联删除。
所述公共模块的刷新方式包括主动刷新方式和定时刷新方式。
由以上本发明提供的技术方案可以看出,本发明在现有技术的基础上增加了触发器、公共模块、虚拟拓扑模块和独立模块四个组件,所述公共模块和独立模块位于应用层,而所述触发器和虚拟拓扑模块位于数据层。触发器用于完成相关数据表格间数据记录一致的维护功能,并将其写入操作记录跟踪日志中,公共模块通过触发器跟踪数据库表格记录的创建、删除和更新过程,而虚拟拓扑模块依赖创建在各个主要表的触发器来完成数据的更新,由独立模块负责维护,并定时上报或主动触发上报界面的刷新。由此可见,本发明所述方案有益效果为:1)存取速度快,不但降低了数据库操作的频率,也降低了复杂数据构造时对数据库的大量关联查询操作,同时给需要大量数据库操作的模块提供了充足的数据库操作资源和时间;2)应用层处理过程不需要考虑数据更新后,数据一致性维护问题,只需要调用数据层接口;3)简化应用层和数据层交互次数,减少人为因素、通讯错误引起的操作失败;4)当数据层发生变化,应用层不需要修改处理过程,可扩展性强;5)GUI的更新消息统一由独立模块完成,减少消息交互,提高效率;6)由于使用触发器方式的数据跟踪,内存数据的完整性和可靠性很高。
附图说明
图1是现有技术数据同步的实现原理示意图;
图2是本发明所述数据同步方法的流程图;
图3是本发明所述数据同步***的结构示意图;
图4是本发明公共模块刷新的原理示意图。
具体实施方式
本发明的核心是当用户需要进行数据的增加、删除和更新操作时,主要是通过数据层的触发器完成数据的更新,当数据层发生变化时,应用层不需要修改处理过程,通过公共模块定时读取操作记录跟踪日志的内容,更新内存数据信息,以减少功能模块间消息的发送,保证数据层和应用层数据的统一。另外,独立模块通过读取虚拟拓扑模块的内容,统一完成用户界面数据更新。
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和实施方式对本发明作进一步的详细说明。
请参阅图2,为本发明所述数据同步方法的流程图。所述方法包括:
步骤S10:用户通过图形用户界面将用户请求消息发送给应用层;
步骤S11:应用层根据所述请求消息构造新数据,并向数据层发送更新请求;
步骤S12:数据层完成数据更新,并向应用层反馈更新结束消息;
步骤S13:应用层接收到更新结束消息后,更新内存中的数据信息,构造用户返回消息,并向图形用户界面异步反馈用户返回消息;
步骤S14:所述图形用户界面接收到更新消息后更新显示信息。
当用户需要对数据进行增加、删除或修改操作时,通过图形用户界面(GUI,Graphical User Interface)进行数据的增加、删除或修改操作;所述GUI向应用层发送用户请求消息,所述请求消息的内容包括:对数据的增加、删除或修改操作。其中所述GUI是一种计算机的人机接口,它允许用户利用鼠标器点击图形进行访问应用程序。
所述应用层中的功能模块(比如图3中的功能模块A、B)接收到GUI下发的用户请求消息,并解析该请求消息,然后根据该解析该请求消息的内容构造新数据,所述构造新数据的过程为:根据解析请求消息内容的动作类型和操作对象,填写预定义的数据结构,完成新数据构造。该过程只包括增加操作的情况。对于删除/修改数据的,因为通过解析该请求消息,已经包含足够的数据层存储过程调用信息,而不用再从数据层读取需要删除或修改的数据。之后,所述应用层向数据层发出更新请求,要求数据层更新数据记录信息;数据层完成数据更新后,向应用层返回更新结束信息。在数据更新过程中,触发器主要完成以下功能:数据层通过触发器自动完成相关数据表格间数据记录一致的更新,其中,所述相关数据表格只要存在外键关系的表格都可以成为相关数据表格;并通过标准结构式询问语言(SQL,St ructured QueryLanguage)的指令:IF EXIST,SELECT组合判断,实现外键检查的功能;通过标准SQL指令:SELECT,读取配置表格字段,实现外键检查功能的可配置。以及将其记录在操作记录跟踪日志(比如vs_ace_log表,除此之外,也可以记录在vs_trace_log1,vs_trace_log2表中等,本发明以vs_trace_log表为例来说明)中,以供应用层读取。也就是说,数据层完成数据更新的操作过程,并将其记录在vs_trace_log表格中,数据库通过“触发器”或“监控触发器”自动完成相关数据的更新(触发自动更新机制是数据库标准功能,不需要自己实现)过程,且“触发器”实时更新虚拟拓扑模块。
所述应用层接收到数据层发送的更新结束信息,构造用户返回信息,并向GUI发送返回消息。其中所述构造用户返回消息的过程包括:如果数据层反馈更新结束消息为成功,且应用层更新内存数据成功,则返回消息携带成功操作;否则,返回消息携带失败操作。由此可见,所述返回信息的内容只需要填写操作是否成功;即如果成功,就填写操作成功,否则,填写操作失败。也就是说,应用层接收到更新结束信息后,一方面,启动公共模块读取vs_trace_log表格的内容。并更新内存的数据信息,保证应用层与数据层的数据一致;另一方面启动独立模块读取虚拟拓扑模块中的内容,构造并异步发送用户返回消息。最后,所述GUI收到用户返回消息后,更新显示信息。
其中,所述应用层中的公共模块主要通过主动刷新、定时刷新的方式更新内存数据信息。所述主动刷新方式的实现为:应用层先调用数据层接口,修改表格中的数据;数据层通过创建触发器、删除触发器或修改触发器,将应用层修改的数据操作记录到操作记录跟踪日志(vs_trace_log)中;公共模块定时读取操作记录跟踪日志,更新内存中的公共数据。所述定时刷新方式的实现过程为:应用层先调用数据层接口,修改表格中的数据;数据层通过创建触发器、删除触发器或修改触发器,将应用层修改的数据操作记录到操作记录跟踪日志中;若定时器刷新时间还没有到,应用层模块调用公共模块接口,访问内存数据;公共模块主动读取vs_trace_log记录,更新内存中的公共数据。
另外,本发明还提供一种数据同步的***,该***的流程图详见图3。所述***包括:图形用户界面11、功能模块12(以功能模块A和功能模块B为例)、触发器13、虚拟拓扑模块14、公共模块15、独立模块16以及数据库中的操作记录跟踪日志17。所述图形用户界面11,即计算机的人机接口,用于发送用户的请求信息;所述功能模块12,位于应用层,用于接收用户发送的请求信息,并根据该信息构造新数据后,向数据层发送更新请求信息;所述触发器13,位于数据层,用于完成数据的更新,以及完成相关数据表格间记录一致,将其记录在数据库的操作记录跟踪日志17中;所述虚拟拓扑模块14,位于数据层,是由数据库中一张或若干张表组成,用于配置数据变化的监控记录;所述公共模块15,位于应用层,用于内存数据信息的管理,并根据所述操作记录跟踪日志17完成内存数据的刷新以及支持相关数据表格间的同步;所述独立模块16,位于应用层,用于实现虚拟拓扑模块配置数据变化的监控记录异步上报至图形用户界面。
本发明所述数据同步原理主要是在现有技术中增加四个组件:触发器13、虚拟拓扑模块14、公共模块15和独立模块16。下面分别对各个模块的功能进行详细的说明。
所述触发器13,是基于关键表而设置的,完成相关数据表格间数据记录一致的维护功能,也就是说通过数据库提供的触发器自动更新功能,只需要填写触发器内容即可完成各个相关数据表格间数据记录一致的维护功能。其中,所述相关数据表格,是指只要存在外键关系的表格都可以成为相关数据表格。所述触发器将完成数据记录一致的操作动作,通过标准SQL指令:***(INSERT),记录到操作记录跟踪日志17(比如vs_trace_log表格等)中,以供给应用层读取。为此而将触发器分为:***或创建触发器、删除触发器以及更新触发器。在触发器中,可以通过标准SQL指令:IF EXIST,SELECT组合判断,实现外键检查的功能;也可以通过标准SQL指令:SELECT,读取配置表格字段,实现外键检查功能的可配置性;还可以通过嵌套触发器(数据库标准功能),实现了级联删除。此外,数据层提供自定义扩展存储过程,供应用层调用,通过执行x_ProcedureA,完成数据记录一致性维护。
例如:
Create Procedure x ProcedureA
as
BEGIN
处理标准SQL命令。。。。。。END。
其中,所述Create Procedure x_ProcedureA定义一个存储过程,名称叫做x_ProcedureA;as为标准SQL保留关键字,说明后面的内容都是属于过程x_ProcedureA;BEGIN、END也是标准SQL保留关键字,在两个关键字中间的标准SQL命令都是属于存储过程x_ProcedureA。
所述公共模块15,通过触发器13跟踪了数据库表格记录(所述表格不是特指那张表格,而是指存在于数据层的所有表格)的创建、删除和改变的过程,数据库触发器将这一过程记录在操作记录跟踪日志17中。公共模块还提供两种自我维护的刷新方式:即主动刷新方式和定时刷新方式,来完成内存数据的刷新操作。此外,公共模块15根据操作记录跟踪日志17中的内容,还可以知道当前哪些数据记录要发生,可以“顺带”完成一些用户需要的特定的功能。例如:在操作记录跟踪日志17中记录了新增加的操作数据,在把数据上报给GUI前,公共模块在记录的名称前,添加日期,等等诸如此类的特定操作。
其中,所述公共模块15自我维护刷新的原理示意图如图4所示,包括公共模块14中的内存维护子模块151、公共内存子模块152、公共模块接口153以及数据层中的创建触发器131、删除触发器132、修改触发器133和操作记录跟踪日志17。其刷新的原理分别为:所述定时器定时刷新的方式:定时向内存维护子模块151发送刷新请求,应用层调用数据层接口,修改表格数据;数据层通过创建触发器131、删除触发器132、修改触发器133,将应用层修改的数据操作记录到操作记录跟踪日志(比如vs_trace_log等)表中,所述内存维护子模块151定时读取vs_trace_log表中的记录,更新公共内存子模块152中的公共数据。所述主动刷新的方式:外界向内存维护子模块151主动请求刷新内存;应用层调用数据层接口,修改表格数据;数据层通过创建触发器131、删除触发器132、修改触发器133,记录应用层修改的数据操作到vs_trace_log表中;若定时刷新的时间还没有到,应用层调用公共模块接口153,访问内存数据;内存维护子模块151主动读取vs_trace_log表中的记录,更新公共内存子模块152中的数据。
所述虚拟拓扑模块14,是由保存在数据库中的一张或者若干张表组成,主要为用户界面提供服务;代替分散在各模块中用于处理用户界面各种***变化数据的上报。所述虚拟拓扑模块依赖创建在各主要表上的触发器完成数据更新,由后台的独立模块负责维护,并定时周期上报或者主动触发上报界面刷新。
所述独立模块16,定时读取虚拟拓扑模块14的内容,构造并异步发送GUI更新消息。
所述图形用户界面11和功能模块12的具体功能对于本领域的技术人员来说,已是公知技术,在此不再赘述。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。