一种实现数据一致性的方法及其系统
技术领域
本发明涉及计算机数据处理技术领域,尤其是涉及一种应用于计算机信息技术领域的基于缓存技术的实现数据一致性的方法及其系统。
背景技术
缓存技术应用广泛,该技术有以下优点:
(1)减少网络带宽,从而减轻网络拥塞;
(2)减少客户端访问延迟;
(3)由于有些数据可以直接从缓存返回给客户端,从而可以减轻服务器的负载;
(4)如果远程服务器故障或网络故障造成远程服务器无法响应客户端的要求,客户端可以从缓存中取得数据,从而增加了远程服务器的健壮性。
在信息化工程中,大量研究主要关注在客户端与服务器缓存之间数据一致性上,而在服务器缓存与数据库之间的数据一致性的研究较少。
当前服务器缓存数据与关系数据库保持一致性的技术主要有以下几种方式:
(1)直接从数据库中获取数据,没有设置缓存,如图1所示。应用对象获取数据时,通过访问对象联接数据库,数据库执行相应操作返回数据。采用这种方式,每次数据获取都要建立一个新的连接,数据获取都是从数据库中获取,不会有缓存数据与关系数据库的数据一致性问题。对于访问量大的服务器,连接池的资源有限,新的连接需要进行排队等候,从而造成了访问速度慢、效率低。
(2)采用TTL(Time-to-Live)缓存技术,在这种方法中,每个对象赋予一个对象生存期t,用来记录缓存副本的有效时间,当客户机对服务器进行请求时,如果请求时间小于TTL,则认为缓存副本是有效的,缓存将不向服务器进行请求。当请求时间大于TTL时,我们称TTL失效,此时缓存收到的第一个对某个对象的请求时,会向服务器发送GET请求,更新缓存信息。TTL机制实现比较容易,但是在TTL未失效的时间内网站的源对象版本发生更改时,无法保持缓存对象与服务器的原始版本数据一致性。也就是说客户端可能访问到过时的数据。
(3)与当前发明最相近似的现有技术方案国际商业机器公司于2005年10月26日申请,2006年06月28日公开,公开号为CN1794207A的中国发明专利申请《实现缓存一致性的方法和系统》。该发明的主要内容为:一种用于当允许应用继续将改变写入数据文件时支持由服务器对数据文件的改变进行并行记录的系统和方法。响应于数据文件的改变,创建该文件的近即时版本。将反映数据文件的改变的元数据与缓存中的文件中的版本同步,并将其记录到持久性存储器中。在记录文件的元数据改变的过程中,可继续进行随后的对数据文件的改变,且可将反映所述改变的元数据记录到该文件的即时版本中,也可将该版本与持久性存储器中的元数据的版本同步。但是该发明主要是研究客户端与服务器缓存之间的数据一致性问题。
发明内容
本发明提供一种实现数据一致性的方法及其系统,该方法及其系统解决了服务器缓存与关系数据库之间的数据一致性问题,保证服务器缓存数据的有效性,减少对关系数据库的连接访问,提高访问速度及效率。
本发明提供实现数据一致性的方法的技术实现方案,一种实现数据一致性的方法,包括以下步骤:
S101:数据访问组件对象接受用户消息,根据用户消息生成动态SQL;
S102:如果动态SQL是数据获取,则执行步骤S103;否则,数据访问组件对象根据XML数据库配置文件连接关系数据库,获取数据,数据访问组件对象再将数据传给应用层,流程结束;
S103:数据访问组件对象根据全局性质的数据访问组件对象名、数据获取对象名查询全局的缓存数据集合,若存在数据,则说明缓存数据有效,返回数据给数据访问组件对象,由数据访问组件对象传递给应用层,流程结束;若没有数据,根据数据访问组件对象名、数据获取对象名,创建一个全局缓存组件对象,并将获取的数据动态SQL、数据访问组件对象名、数据获取对象名传给该缓存组件对象;
S104:缓存组件对象解析XML缓存配置文件、XML数据库配置文件,查看该数据访问组件对象是否设置缓存,若设置缓存,则说明全局缓存组件对象监测本地依赖文件,当依赖文件发生变化时,系统删除数据访问组件对象的缓存以及全局缓存对象;若没有设置缓存,则执行步骤S106;
S105:缓存组件对象根据数据访问组件对象名解析XML缓存初始化文件,若有数据,则获取一条记录并生成一个触发器SQL,连接关系数据库并执行,同时删除这条XML文件记录,依次循环,直至文件中找不到数据为止;
S106:缓存组件对象连接关系数据库,执行数据访问组件对象所传入的获取数据动态SQL,获取数据,若该数据访问组件对象设置缓存,则更新缓存数据;
S107:缓存组件对象将数据传给数据访问组件对象,由数据访问组件对象传递给应用层,流程结束。
作为本发明实现数据一致性的方法技术方案的进一步改进,实现数据一致性的方法包括缓存组件获取数据过程,该过程包括以下步骤:
S201:缓存组件对象的中心控制器接收数据访问组件对象的重要属性,该重要属性包括获取数据动态SQL、数据访问组件对象名、数据获取对象名,将重要属性写入公共属性集合中;
S202:中心控制器解析包括有关系数据库类型、数据库名的XML数据库配置文件,并将解析内容写入公共属性集合;
S203:中心控制器通过数据访问组件对象名查找XML缓存配置文件,若找到数据,则解析包括数据访问组件对象名、本地依赖文件全局路径在内的相关属性,写入缓存数据集合;若没有找到数据,则说明该数据访问组件对象没有设置缓存,执行步骤S208;
S204:中心控制器通过数据访问组件对象名查找XML缓存初始化文件,若有数据,找到一条记录,并解析包括数据库表名、数据库服务器的本地依赖文件在内的相关属性,写入公共属性集合中,完成后,中心控制器向触发器生成器发送创建触发器消息;
S205:触发器生成器调用动态SQL拼装生成器和公共属性集合动态产生一个创建触发器SQL,并将该SQL发送给连接器;
S206:连接器收到创建触发器的SQL,连接关系数据库,关系数据库执行创建触发器SQL,将结果返回给连接器,连接器将消息传给中心控制器;否则若连接器超时,则中心控制器发送一个错误信息,流程结束;
S207:中心控制器收到创建触发器成功消息,在XML缓存初始化文件中删除该记录,重复执行步骤S204至步骤S206,直至XML缓存初始化文件中找不到数据访问组件对象名的相关节点;
S208:中心控制器将公共属性集合中的获取数据动态SQL发送给连接器;
S209:连接器收到获取数据动态SQL,连接关系数据库,关系数据库执行该SQL,将数据返回给连接器,连接器将数据传给中心控制器;否则若连接器超时,则中心控制器发送一个错误信息,流程结束;
S210:中心控制器将数据传给数据访问组件对象,若该数据访问组件对象设置了缓存,则将该数据以数据访问组件对象名和数据获取对象名组合一起作为关键字查询插入缓存数据集合;
S211:中心控制器向依赖文件监测器发送监测消息,执行缓存组件监测过程。
作为本发明实现数据一致性的方法技术方案的进一步改进,缓存组件监测过程包括以下步骤:
S301:依赖文件监测器收到中心控制器所发送的监测消息后,从公共属性集合中获取到本地依赖文件路径;
S302:依赖文件监测器开始监测本地依赖文件;
S303:依赖文件监测器发现本地依赖文件发生变化时,向中心控制器发送缓存无效消息;
S304:中心控制器收到缓存无效消息后,通过公共属性集合中的数据访问组件对象名、数据获取对象名查询缓存数据集合,找到该数据后进行删除;
S305:中心控制器向依赖文件监测器发送停止监测消息,依赖文件监测器收到消息后停止监测工作;
S306:系统删除该缓存组件对象。
作为本发明实现数据一致性的方法技术方案的进一步改进,实现数据一致性的方法包括依赖文件同步过程,该过程包括以下步骤:
S401:数据库服务器中的文件发送组件监测关系数据库,应用服务器的文件接收组件监听通讯端口;
S402:当数据库表执行插入、更新及删除操作时,表触发器执行更新本地依赖文件,并向监测表插入一条包括应用服务器的IP地址,应用服务器的本地依赖文件的全局路径和数据库服务器的本地依赖文件全局路径的新记录;
S403:文件发送组件发现监测表中有新记录后,获取该记录;
S404:文件发送组件与文件接收组件进行通讯,应用服务器的本地依赖文件实现更新,与数据库服务器的本地依赖文件保持一致;
S405:文件发送组件重复执行步骤S403和步骤S404,直到监测表中没有新记录;
S406:数据库服务器中的文件发送组件监测关系数据库,应用服务器的文件接收组件监听通讯端口。
本发明还提供一种采用上述实现数据一致性的方法实现数据一致性的系统的技术实现方案,包括:应用服务器和数据库服务器,应用服务器进一步包括数据访问组件、缓存组件、文件接收组件和缓存数据集合,数据库服务器进一步包括文件发送组件和关系数据库;
数据访问组件与缓存组件、关系数据库相连,数据访问组件接受用户消息,根据用户消息生成动态SQL;数据访问组件根据XML数据库配置文件连接关系数据库并获取数据,数据访问组件再将数据传给应用层;
数据访问组件与缓存数据集合相连,根据全局性质的数据访问组件对象名、数据获取对象名查询全局的缓存数据集合,若存在数据则返回数据给数据访问组件,由数据访问组件传递给应用层;若没有数据,则根据数据访问组件对象名、数据获取对象名,创建一个全局的缓存组件,并将获取的数据动态SQL、数据访问组件对象名、数据获取对象名传送给缓存组件;
缓存组件解析XML缓存配置文件、XML数据库配置文件,查看数据访问组件是否设置缓存,若设置缓存,则数据访问组件的缓存被删除,同时该全局缓存对象被删除,更新缓存数据;若没有设置缓存,则缓存组件连接关系数据库,执行数据访问组件所传入的获取数据动态SQL,并获取数据;
缓存组件根据数据访问组件对象名解析XML缓存初始化文件,若有数据,则获取一条记录由内部机制生成一个触发器SQL,连接关系数据库并执行,同时删除该条XML文件记录,依次循环,直至文件中找不到数据为止,缓存组件将数据传给数据访问组件,由数据访问组件传递给应用层;
文件发送组件与关系数据库相连,文件接收组件与文件发送组件相连。
作为本发明实现数据一致性的系统技术方案的进一步改进,缓存组件包括中心控制器、触发器生成器、依赖文件监测器、动态SQL拼装生成器、公共属性集合、连接器;
中心控制器与数据访问组件相连,接收外部消息,返回数据或提示信息;解析XML缓存初始化文件、XML缓存配置文件并写入公共属性集合;向触发器生成器、依赖文件监测器发送动作消息;接收触发器生成器、依赖文件监测器的消息;接收关系数据库的返回结果;
触发器生成器根据不同的关系数据库通过动态SQL拼装生成器创建一个触发器的动态SQL,在关系数据库执行后,当触发器监测到表中数据发生变化,更新数据库服务器中所设定的本地依赖文件;并向数据库中的监测表中插入一条记录;
依赖文件监测器监测本地依赖文件,当本地依赖发生变化时,向中心控制器发送缓存无效消息;
动态SQL拼装生成器根据公共属性集合进行SQL的拼装,实现动态SQL;
公共属性集合存储XML缓存初始化文件或XML缓存配置文件的解析信息;
连接器分别与中心控制器、触发生成器、关系数据库相连接。
作为本发明实现数据一致性的系统技术方案的进一步改进,XML数据库配置文件属性包括:数据库类型、服务器名、数据库名、登录数据库用户名、登录数据库密码。
作为本发明实现数据一致性的系统技术方案的进一步改进,XML缓存配置文件属性包括:数据对象名和本地依赖文件的全局路径。
作为本发明实现数据一致性的系统技术方案的进一步改进,XML缓存初始化文件属性包括:数据对象名、建立触发器所依赖的数据表、数据库服务器中的本地依赖文件的全局路径。
通过应用上述本发明技术方案所描述的一种实现数据一致性的方法及其系统,应用服务器采用缓存技术,减少对数据库服务器的访问压力,加快访问速度,提高访问效率;根据数据访问频率,可自定义数据库中数据块在服务器是否设置缓存;实现应用服务器缓存数据与数据库的数据一致性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术一种具体实施方式所描述的无缓存下应用对象获取数据过程示意图;
图2为本发明一种具体实施方式所描述的一种实现数据一致性的系统的工作原理图;
图3为本发明一种具体实施方式所描述的一种实现数据一致性的系统中缓存组件的功能结构框图;
图4为本发明一种具体实施方式所描述的一种实现数据一致性的方法中依赖文件同步过程的程序流程图;
其中,1-应用服务器,2-数据库服务器,3-数据访问组件,4-缓存组件,5-文件接收组件,6-缓存数据集合,7-文件发送组件,8-关系数据库,9-中心控制器,10-触发器生成器,11-依赖文件监测器,12-动态SQL拼装生成器,13-公共属性集合,14-连接器,15-触发器生成接口,18-关系数据库触发器生成器组件。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如附图2、3、4所示,给出了本发明一种实现数据一致性的方法及其系统应用于计算机信息技术领域数据处理的具体实施例,下面结合附图和具体实施例对本发明作进一步说明。
本发明将缓存数据与数据库的数据一致性设计为一种文件依赖关系,其系统结构组成和工作原理如图2所示。
一种实现数据一致性的系统的具体实施方式,该系统包括应用服务器1和数据库服务器2,应用服务器1进一步包括数据访问组件3、缓存组件4、文件接收组件5和缓存数据集合6,数据库服务器2进一步包括文件发送组件7和关系数据库8;
数据访问组件3与缓存组件4、关系数据库8相连,数据访问组件3接受用户消息,根据用户消息生成动态SQL;数据访问组件3根据XML数据库配置文件连接关系数据库8并获取数据,数据访问组件3再将数据传给应用层;
数据访问组件3与缓存数据集合6相连,根据全局性质的数据访问组件对象名、数据获取对象名查询全局的缓存数据集合6,若存在数据则返回数据给数据访问组件3,由数据访问组件3传递给应用层;若没有数据,则根据数据访问组件对象名、数据获取对象名,创建一个全局的缓存组件4,并将获取的数据动态SQL、数据访问组件对象名、数据获取对象名传送给缓存组件4;
缓存组件4解析XML缓存配置文件、XML数据库配置文件,查看数据访问组件3是否设置缓存,若设置缓存,则数据访问组件3的缓存被删除,同时该全局缓存对象被删除,更新缓存数据;若没有设置缓存,则缓存组件4连接关系数据库8,执行数据访问组件3所传入的获取数据动态SQL,并获取数据;
缓存组件4根据数据访问组件对象名解析XML缓存初始化文件,若有数据,则获取一条记录由内部机制生成一个触发器SQL,连接关系数据库8并执行,同时删除该条XML文件记录,依次循环,直至文件中找不到数据为止,缓存组件4将数据传给数据访问组件3,由数据访问组件3传递给应用层;
文件发送组件7与关系数据库8相连,文件接收组件5与文件发送组件7相连。
一种实现数据一致性的方法的具体实施方式,其工作过程包括以下步骤:
S101:数据访问组件3对象接受用户消息,根据用户消息生成动态SQL;
S102:如果动态SQL是数据获取,则执行步骤S103;否则,数据访问组件3对象根据XML数据库配置文件连接关系数据库8,获取数据,数据访问组件3对象再将数据传给应用层,流程结束;
S103:数据访问组件3对象根据全局性质的数据访问组件对象名、数据获取对象名查询全局的缓存数据集合6,若存在数据,则说明缓存数据有效,返回数据给数据访问组件3对象,由数据访问组件3对象传递给应用层,流程结束。若没有数据,根据数据访问组件3对象名、数据获取对象名,创建一个全局缓存组件对象,并将获取的数据动态SQL、数据访问组件对象名、数据获取对象名传给该缓存组件4对象;
S104:缓存组件4对象解析XML缓存配置文件、XML数据库配置文件,查看该数据访问组件3对象是否设置缓存,若设置缓存,则说明全局缓存组件对象监测本地依赖文件(应用服务器的本地依赖文件与数据库服务器的本地依赖文件通过文件接收组件、文件发送组件进行同步)。当依赖文件发生变化时,系统删除数据访问组件3对象的缓存以及全局缓存对象;若没有设置缓存,则执行步骤S106;
S105:缓存组件4对象根据数据访问组件3对象名解析XML缓存初始化文件,若有数据,则获取一条记录由内部机制生成一个触发器SQL,连接关系数据库8,并执行,同时删除这条XML文件记录,依次循环,直至文件中找不到数据为止;
S106:缓存组件4对象连接关系数据库8,执行数据访问组件3对象所传入的获取数据动态SQL,获取数据,若该数据访问组件3对象设置缓存,则更新缓存数据;
S107:缓存组件4对象将数据传给数据访问组件3对象,由数据访问组件3对象传递给应用层,流程结束。
一种实现数据一致性的系统进一步包括缓存组件4,缓存组件4由中心控制器9、触发器生成器10、依赖文件监测器11、动态SQL拼装生成器12、公共属性集合13组成。其中,触发器生成器10进一步包括触发器生成接口15和若干个关系数据库触发器生成器组件16。缓存组件4各个组成部分的功能结构说明如下表1所示。
表1缓存组件4的功能结构说明
实现数据一致性的方法进一步包括缓存组件获取数据过程,该过程包括以下步骤:
S201:缓存组件4对象的中心控制器9接收数据访问组件3对象的几个重要属性,包括获取数据动态SQL、数据访问组件对象名、数据获取对象名,将这些属性写入公共属性集合13中;
S202:中心控制器9解析XML数据库配置文件(包括关系数据库类型、数据库名等)并将这些解析内容写入公共属性集合13中;
S203:中心控制器9通过数据访问组件3对象名查找XML缓存配置文件,若找到数据,则解析相关属性(包括数据访问组件对象名、本地依赖文件全局路径等),写入缓存数据集合6中;若没有找到数据,则说明该数据访问组件3对象没有设置缓存,执行步骤S208;
S204:中心控制器9通过数据访问组件对象名查找XML缓存初始化文件,若有数据,找到一条记录,并解析相关属性(包括数据库表名、数据库服务器的本地依赖文件),写入公共属性集合13中,完成后,中心控制器9向触发器生成器10发送创建触发器消息;
S205:触发器生成器10调用动态SQL拼装生成器12和公共属性集合13动态产生一个创建触发器SQL,并将该SQL发送给连接器14;
S206:连接器14收到创建触发器的SQL,连接关系数据库8,关系数据库8执行创建触发器SQL,将结果返回给连接器14,连接器14将消息传给中心控制器9;否则若连接器14超时,则中心控制器9发送一个错误信息,流程结束;
S207:中心控制器9收到创建触发器成功消息,在XML缓存初始化文件中删除该记录,重复执行步骤S204至步骤S207,直至XML缓存初始化文件中找不到数据访问组件对象名的相关节点;
S208:中心控制器9将公共属性集合13中的获取数据动态SQL发送给连接器14;
S209:连接器14收到获取数据动态SQL,连接关系数据库8,关系数据库8执行该SQL,将数据返回给连接器14,连接器14将数据传给中心控制器9;否则若连接器14超时,则中心控制器9发送一个错误信息,流程结束;
S210:中心控制器9将数据传给数据访问组件3对象,若该数据访问组件3对象设置了缓存,则将该数据以数据访问组件对象名和数据获取对象名组合一起作为关键字查询插入缓存数据集合6;
S211:中心控制器9向依赖文件监测器11发送监测消息,执行缓存组件监测流程。
实现数据一致性的方法进一步包括缓存组件监测过程,该过程包括以下步骤:
S301:依赖文件监测器11收到中心控制器9所发送的监测消息后,从公共属性集合13中获取到本地依赖文件路径;
S302:依赖文件监测器11开始监测本地依赖文件;
S303:依赖文件监测器11发现本地依赖文件发生变化时,向中心控制器9发送缓存无效消息;
S304:中心控制器9收到缓存无效消息后,通过公共属性集合13中的数据访问组件对象名、数据获取对象名查询缓存数据集合6,找到该数据后进行删除;
S305:中心控制器9向依赖文件监测器11发送停止监测消息,依赖文件监测器11收到消息后停止监测工作;
S306:系统删除该缓存组件4对象。
实现数据一致性的方法进一步包括依赖文件的同步过程,该过程包括以下步骤:
S401:数据库服务器2中的文件发送组件7监测关系数据库8,应用服务器1的文件接收组件5监听通讯端口;
S402:当数据库表执行插入、更新及删除操作时,表触发器执行两个工作,首先更新本地依赖文件,其次向监测表中插入一条新记录(包括应用服务器1的IP地址,应用服务器1的本地依赖文件的全局路径,数据库服务器2的本地依赖文件的全局路径);
S403:文件发送组件7发现监测表中有新记录后,获取该记录;
S404:文件发送组件7与文件接收组件5进行通讯,应用服务器1的本地依赖文件实现更新,与数据库服务器2中的本地依赖文件保持一致;
S405:文件发送组件7重复执行步骤S403和步骤S404,直到监测表中没有新记录;
S406:数据库服务器2中的文件发送组件7监测关系数据库8,应用服务器1的文件接收组件5监听通讯端口。
XML数据库配置文件设计采用XML格式文件实现配置,配置文件的属性如下:
(1)dbType:数据库类型(如Oracle);
(2)connect-server:服务器名;
(3)connect-dataBase:数据库名;
(4)connect-user:登录数据库用户名;
(5)connect-password:登录数据库密码;
具体如下:
XML缓存配置文件的结构设计如下表2所示。
表2 XML缓存配置文件的结构设计说明表
具体如下:
XML缓存初始化文件的结构设计如下表3所示。
表3 XML缓存初始化文件的结构设计说明表
具体如下:
本发明具体实施方式所描述的一种实现数据一致性的方法及其系统通过文件依赖实现了应用服务器缓存与数据库之间的数据一致性,解决了服务器缓存与关系数据库之间的数据一致性问题,保证服务器缓存数据的有效性,减少对关系数据库的连接访问,提高访问速度及效率。其中,应用服务器采用缓存技术,减少对数据库服务器的访问压力,加快访问速度,提高访问效率;根据数据访问频率,可自定义数据库中数据块在服务器是否设置缓存。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。任何熟悉本领域的技术人员,在不脱离本发明技术方案范围情况下,都可利用上述揭示的方法和技术内容对本发明技术方案做出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同替换、等效变化及修饰,均仍属于本发明技术方案保护的范围内。