发明内容
针对现有技术的以上缺陷或改进需求,本发明解决了事件触发式刷新策略控制方式复杂的问题。
本发明实施例采用如下技术方案:
第一方面,本发明提供了一种数据库缓存的刷新方法,其特征在于:将数据库日志解析为数据变更事件的记录,其中,数据变更事件的记录的字段包括表名、事件类型、更新字段和记录数据;将数据变更事件的记录存入变更事件队列中;依次获取变更事件队列中的每一条数据变更事件的记录;根据数据变更事件的各字段的值获取数据库缓存的配置规则;根据数据变更事件和配置规则对数据库缓存进行刷新。
优选的,将数据库日志解析为数据变更事件的记录,具体为:查找变更事件在数据库日志中的记录,变更事件包括更新、删除和创建事件;根据查找到的数据库日志中的记录,获取发生事件变更的表名,将表名写入数据变更事件的表名字段;根据查找到的数据库日志中的记录,获取变更事件的类型,将变更事件的类型写入数据变更事件的事件类型字段;根据查找到的数据库日志中的记录,获取数据库记录变更前后的数据,将发生变更的字段名写入数据变更事件的更新字段字段,将变更后的数据写入数据变更事件的记录数据字段。
优选的,根据数据变更事件的属性获取数据库缓存的配置规则,具体为:若数据变更事件的事件类型为更新事件,通过表名、事件类型和更新字段获取配置规则;若数据变更事件的事件类型为删除事件或创建事件,通过表名和事件类型获取配置规则。
优选的,数据库缓存的主键包括静态主键和动态主键,静态主键具体为预设的主键字符串,动态主键具体为数据更新事件对应的数据库记录中的至少一个字段的值。
优选的,根据数据变更事件和配置规则对数据库缓存进行刷新,具体为,若数据变更事件的事件类型为删除事件:若需删除的数据库缓存中的记录主键为静态主键,将数据库缓存中对应的数据变更事件的缓存记录删除;若需删除的数据库缓存中的记录主键为动态主键,按照构造规则由数据变更事件生成主键,将缓存中与生成的主键相应的缓存记录删除。
优选的,按照构造规则由数据变更事件生成主键,具体为:根据构造规则获取数据变更事件中的更新字段和/或记录数据中相应的字段的值,根据字段的值生成主键。
优选的:将数据变更事件的记录存入变更事件队列中和根据数据变更事件和配置规则对数据库缓存进行刷新两个步骤并发执行。
优选的,变更事件队列采用持久化存储,以便于在系统断电时保存数据变更事件,避免数据库和数据库缓存中数据不同步。
另一方面,本发明还提供了一种数据库的缓存刷新的系统,包括数据库、缓存系统、缓存刷新系统;缓存系统内持久化存储需缓存的数据库的记录;缓存刷新系统由数据库日志中获取数据变更事件,将数据变更事件解析为数据变更事件记录,根据数据变更事件的属性获取变更事件队列的配置规则将数据变更事件记录存入缓存系统,或从缓存系统中删除数据变更事件记录,根据数据变更队列中的记录对数据库缓存进行刷新。
另一方面,本发明还提供了一种数据库的缓存刷新的装置,包括至少一个处理器和存储器,至少一个处理器和存储器之间通过数据总线连接存储器存储能被至少一个处理器执行的指令,指令在被处理器执行后,用于完成第一方面所述的数据库的缓存刷新的装置方法。
与现有技术相比,本发明实施例的有益效果在于:通过使用变更事件队列将数据库读写的业务代码和数据库缓存中数据的过期淘汰解耦合,提升了缓存刷新系统的通用性,减少应用的处理复杂度。
进一步的,本发明实施例还提供了一种数据库的缓存刷新的系统,通过独立的缓存刷新系统监听数据库的更新日志,通过变更事件队列管理缓存系统的刷新和过期,以便于简化缓存系统中数据的管理和动态刷新。本发明实施例还提供了一种数据库的缓存刷新的装置,通过处理器和存储器的硬件执行实现数据库的缓存刷新。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明是一种特定功能系统的体系结构,因此在具体实施例中主要说明各结构模组的功能逻辑关系,并不对具体软件和硬件实施方式做限定。
此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。下面就参考附图和实施例结合来详细说明本发明。
实施例1:
在数据库读写过程中,为了保证数据库和缓存系统的同步性,并简化读写时的控制复杂度,本实施例中在数据库缓存之外设立了变更事件队列,使用变更事件队列对数据库中的变更事件事实同步保证数据的一致性,使用配置规则过滤需缓存中的过期数据,解除了数据库和数据库缓存之间的耦合。
如图1所示,本发明实施例提供的数据库缓存的刷新方法的方法具体步骤如下:
步骤101:将数据库日志解析为数据变更事件的记录,数据变更事件的记录的字段包括表名、事件类型、更新字段、记录数据。
在数据库系统中,数据的会因为更新、删除、创建而产生变化。因此,数据变更事件的记录中使用表名、事件类型、更新字段和记录数据字段保存数据的变化事件。表名为发生数据变化的表名称;事件类型包括更新、删除、创建三种;更新字段标记了表中哪些字段发生了变化,记录数据保存了变化后的现有数据。每一条数据变更事件的记录对应数据库日志中一次变更事件,通过数据变更事件的记录可以还原数据库中每一次数据变更事件,因此缓存系统可以直接通过数据变更事件的记录进行数据刷新,而不需要向数据库请求数据读取。
步骤102:将数据变更事件的记录存入变更事件队列中。
在本实施例提供的数据库缓存的刷新方法,采用单独的变更事件队列保存数据库中的数据变化情况,再根据变更事件队列中的数据变更事件对数据库缓存进行更新,而不是直接由数据库记录中获取数据对数据库缓存进行更新,将数据库本身的读写事件和缓存的读写事件相互独立,减少了读写时的控制复杂度,避免读写冲突。
步骤103:依次获取变更事件队列中的每一条数据变更事件的记录。
变更事件队列中保存所有的数据变更事件的记录,在一般的实施场景中,变更事件队列采用先进先出模式,新生成的数据变更事件的记录添加在队尾,缓存系统由队列头依次获取数据变更事件的记录进行刷新,每条数据变更事件的记录被取出刷新完成后删除。使用先进先出模式的情况下,先发生的变更事件先更新至缓存系统中,以避免因变更顺序混乱而导致的数据同步错误。
步骤104:根据数据变更事件的属性获取数据库缓存的配置规则;
根据时间变更队列对数据库缓存进行数据刷新时,对于不同类型的数据可以设置不同的配置规则,根据不同的而配置规则对不同类型的数据变更时间进行不同的刷新操作,如直接删除、查找对应记录后删除等。配置规则的存在可以使数据库缓存能够根据不同用户的实施场景对数据库缓存中的记录进行合理的更新和删除,使数据库缓存中保存的数据极可能匹配读取请求所需要的数据,不因为过期删除而导致无法直接由缓存中获取数据,而对数据库提出读取请求,降低响应效率。
步骤105:根据数据变更事件和配置规则对数据库缓存进行刷新
根据获取到的每一条数据变更事件中各字段的内容,可以还原每一条需要刷新的缓存在数据库中的原记录内容,根据原纪录内容,依照配置规则对数据库缓存中的数据进行刷新。具体的,数据库缓存的刷新方式包括更新、过滤删除、添加,分别对应了数据变更事件中的事件类型更新、删除、创建。
经过本实施例中提供的步骤101-步骤105后,即可完成数据库缓存系统的刷新。将数据库日志中的数据变化转换为数据变更事件,并使用变更事件队列将数据库的读写和数据库缓存的读写相互独立,在保证数据更新实时性的基础上使得缓存管理更加简化。
在某些具体实施场景中,应用系统已有自带的缓存模块,为了保证本实施例提供的缓存刷新方法的可通用性,步骤105中对数据库缓存刷新仅仅完成过滤删除的操作,而不包括更新、添加的操作,更新和添加的操作由应用系统自带的缓存模块完成。
进一步的,为了保证变更事件队列的通用性,可以通过消息队列中间件对变更事件队列进行实现,通过消息队列中间件提高队列管理的效率和安全性。
在一般的数据库系统和应用系统中,数据库缓存的存储空间大小固定,无法对所有可能被读取的数据进行缓存,因此,应用系统接收到请求时,首先尝试从缓存中读取,如果读取到,直接将数据返回;若未读取到,则向数据库发送读请求,将数据放入缓存后再将数据结果返回。
在本实施例的不同实施场景中,应用系统对不同类型数据的实时性、更新频率等有着不同的要求。为了适应应用系统的实际需求,可以将数据变更事件设定不同的优先级,如为实时性要求较高、更新频率较高的事件设定较高优先级,优先级较高的事件在变更事件队列中排序更靠前,可以使优先级较高的数据变更事件较早进行刷新,避免因刷新不及时导致的读取错误。
为了将不同数据库表中的数据进行分类缓存,便于读取时查找,在数据库缓存中,可以对不同的数据库表使用不同的存储区域,并对每一个数据库表使用相应的变更事件队列进行存储,针对不同的数据库表采用不同的配置规则进行刷新,提高数据库缓存的刷新效率。
为了避免进行数据库缓存时出现数据传输错误,数据变更事件中还包括数据完整性校验字段。具体的,数据校验字段可为需缓存的数据库记录的MD5校验码。数据库缓存刷新后,对缓存中的记录进行校验,校验通过说明数据正确可以使用;校验不通过,说明数据错误,对本次缓存进行相应的错误处理,如重新由数据库中提取数据进行缓存、将错误写入系统日志等。
本实施例提供的数据库缓存的刷新方法的方法,都可以简便高效的完成数据库缓存的刷新,使数据库缓存在管理复杂度较低的前提下,保持较高实时性和较短的响应时间。
实施例2:
基于实施例1提供的数据库缓存的刷新方法,在不同的具体应用场景中,还可以使用下列方法进行具体的实施,或根据使用需求和实际场景的不同进行补充和调整。
在本实施例的具体实施场景中,如图2所示,使用如下步骤将数据库日志解析为数据变更事件。
步骤201:查找变更事件在数据库日志中的记录。
步骤202:根据查找到的记录,获取发生事件变更的表名,写入数据变更事件的表名字段。
步骤203:根据查找到的记录,获取变更事件的类型,写入数据变更事件的事件类型字段。
步骤204:根据查找到的记录,获取数据库记录变更前后的数据,写入数据变更事件的更新字段和记录数据字段。
通过上述步骤,可以将数据库日志中保存的数据库更新、删除、创建事件提取出来,并转换为数据变更事件,以便于后续使用变更事件队列进行单独保存,使用变更数据队列中的数据对数据库缓存进行刷新,避免数据库日志的读写和数据库缓存刷新的冲突。
在本实施例的某些具体实施场景中,针对不同数据变更事件的不同事件类型,需要根据不同的标准选择配置规则。对于删除事件或创建事件,数据的改变仅通过表名和事件类型即可确认,因此仅通过表名和事件类型即可确定需要使用的配置规则。对于更新事件,针对同一张表中不同的字段的更新,可能存在不同的配置规则,因此,需要根据表名、事件类型和更新字段确定需要使用的配置规则。
在本实施例提供的数据库缓存中,为了将数据库缓存中的记录和数据库中的记录相对应,对数据库缓存中的记录设置主键,在本实施例中,为了满足不同的使用需求,数据库缓存中的记录可以使用静态主键和动态主键两种形式。静态主键为一个固定的字符串,可以使用数据库记录的某个字段名,或者根据缓存记录的内容自定义类型名,如热点新闻信息缓存,可以采用自定义的字符串FocusNewsList作为主键,数据库记录中所有的热点新闻信息列表序列化后的字符串作为缓存内容,静态主键可以对同一类型的数据库缓存统一管理,便于统一进行刷新动作。动态主键可以根据数据库记录中的某些字段内容具体生成,以便于通过每一条数据库记录的内容查找对应的数据库缓存记录的内容,对每一条缓存记录单独进行刷新。
进一步的,对于不同的主键类型,数据库缓存在刷新时需要使用不同的配置规则。具体的,当主键为静态主键时,同一主键对应数据库缓存中同一类型的所有记录,在进行刷新时,对相应类型的数据库缓存全部进行刷新操作,如需刷新的主键为FocusNewsList时,数据库缓存中所有主键相同的和热点新闻对应的记录全部进行刷新。当主键为动态主键时,需要确定和需刷新的数据库记录对应的数据库缓存。如图3所示,可以根据以下步骤对数据库缓存进行刷新:
步骤301:获取需刷新的数据库记录的数据。
在本发明实施例中,变更事件包括更新事件、删除事件和创建事件这些会导致数据库中数据变更的事件,不包括数据库查询、备份等不会导致数据库中数据变更的事件。
步骤302:根据数据库记录中相应字段的值和构造规则,生成数据库记录对应的动态主键。
步骤303:根据构造出的动态主键,查找数据库缓存中相应的记录。
步骤304:对查找到的数据库缓存中的记录进行刷新。
为了进一步提高数据库缓存刷新时的响应速度,充分利用变更事件队列带来的数据库和数据库缓存的独立性,进行数据库缓存刷新时,数据库和变更数据队列之间的读写操作,以及数据变更队列和数据库缓存之间的读写操作,都可以采用并发执行的模式。具体的,进行数据库刷新时需要对硬件操作而耗时较长的步骤102和步骤105,两步骤可以并发执行,以减少系统总体的响应时间。
为了避免因系统关机或断电导致的变更事件队列存储丢失,导致变更事件队列中未及时被数据库缓存刷新的事件丢失,造成数据库缓存和数据库中的数据不同步,因此变更事件队列需要采用持久化存储。具体的,可以采用磁盘进行存储,同时可以在本地或远程进行备份,以确保存储安全,并方便进行回滚。
本实施例中的数据库缓存的刷新方法,在实施例1所提供的方法基础上,进一步提供了具体的实施方案,以及可选用的附加方案。在不同的具体实施场景中,可以根据不同的需求对方案进行选择和组合,以满足数据库缓存刷新时的效率和稳定性等问题。
实施例3:
基于实施例1和实施例2中提供的数据库缓存的刷新方法,本实施例提供了一种数据库缓存的刷新系统,通过系统模块完成数据库缓存的刷新。
如图4所示的数据库缓存的刷新系统,包括日志解析模块、事件队列、配置管理模块、事件调度模块、缓存刷新模块。
其中,日志解析模块、配置管理模块、事件调度模块和缓存刷新模块使用处理器进行实现,可以共用一个处理器,也可以使用多个处理器以便于同步处理。事件队列使用非易失性存储器实现,可以使用多个存储器进行热备份或分布式存储,以保证数据安全。
日志解析模块读取数据库日志,并执行步骤101中将数据库日志解析为数据库变更事件的操作、步骤102中将数据变更事件的记录存入变更事件队列的操作。
事件队列模块对变更事件队列进行保存,接受日志解析模块的写入操作,接受配置管理模块读写操作,接受事件调度模块的读取操作。
配置管理模块对数据库、变更事件队列、数据库缓存中的记录进行匹配。在使用动态主键的情况下,配置管理模块对动态主键进行生成。
事件调度模块对数据库缓存的刷新进行调度,执行步骤103中从事件队列模块中的变更事件队列中读取数据变更事件,并根据步骤104中通过数据变更事件的内容获取到的配置规则调用缓存刷新模块的接口,以便对数据库缓存中的记录进行刷新。
缓存刷新模块具体执行步骤105中数据库缓存的刷新操作。在一部分应用系统中,会有自带的缓存刷新系统,为了保证系统的通用性,缓存刷新模块仅执行删除类型事件的刷新,更新和创建类型的事件由应用系统自带的缓存刷新系统完成。
进一步的,由于数据库缓存的存储空间有限,无法保存数据库中所有数据,应用系统接收到请求时首先会先尝试从数据库缓存中读取,如果读取到直接将数据返回,若未读取到,则将数据库中相应的数据放入缓存后再将数据结果返回。
通过将数据库缓存的刷新方法拆分后,将不同步骤的执行和存储分配至多个独立的模块,可以进一步的提高各步骤的独立性和并发性,简化事件提取和刷新的控制复杂度,缩短响应时间、提高系统稳定性。
实施例4:
在上述实施例1至实施例2提供的数据库缓存的刷新方法,和实施例3提供的数据库缓存的刷新系统的基础上,本发明还提供了一种可用于实现上述方法的数据库缓存的刷新装置,如图5所示,是本发明实施例的装置架构示意图。本实施例的图-关系数据库混合存储的装置包括一个或多个处理器21以及存储器22。其中,图5中以一个处理器21为例。
处理器21和存储器22可以通过总线或者其他方式连接,图5中以通过总线连接为例。
存储器22作为一种数据库缓存的刷新方法非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如实施例1至实施例2中的数据库缓存的刷新方法。处理器21通过运行存储在存储器22中的非易失性软件程序、指令以及模块,从而执行数据库缓存的刷新装置的各种功能应用以及数据处理,即实现实施例1至实施例2的数据库缓存的刷新方法。
存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
程序指令/模块存储在存储器22中,当被一个或者多个处理器21执行时,执行上述实施例1至实施例2中的数据库缓存的刷新方法,例如,执行以上描述的图1-图3所示的各个步骤。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁盘或光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。