公开/公告号CN104281673A
专利类型发明专利
公开/公告日2015-01-14
原文格式PDF
申请/专利号CN201410512411.9
申请日2014-09-22
分类号G06F17/30(20060101);G06F9/44(20060101);
代理机构44205 广州嘉权专利商标事务所有限公司;
代理人谭志强
地址 519060 广东省珠海市南屏科技园屏北二路12号
入库时间 2023-12-17 03:00:17
法律状态公告日
法律状态信息
法律状态
2018-10-02
授权
授权
2015-02-11
实质审查的生效 IPC(主分类):G06F17/30 申请日:20140922
实质审查的生效
2015-01-14
公开
公开
技术领域
本发明涉及开源框架下基于C/S模式的客户端数据交互领域,特别是一种数据库的缓存构建系统及对应的构建方法。
背景技术
在网络应用中,数据库数据的读写往往需要消耗较多的时间和系统资源(如CPU、内存等系统资源),因此数据库读写往往成为制约整个网络应用效率的瓶颈。为减少数据库访问压力,当前广泛是采用缓存(Cache)技术,将数据预先加载到内存中进行缓存,以减少应用服务器对数据库的访问次数,降低负载,提高相应读写速度。
但当前几乎所有的第三方开源框架(如Oscache、Hibernate等),这些框架的缓存机制都适合于开发服务器端应用,即适合开发B/S模式的WEB应用,对于C/S模式的软件,还必须解决多客户端程序之间的缓存同步的问题。
发明内容
为解决上述问题,本发明的目的在于提供一种数据库的缓存构建系统及对应的构建方法,在兼顾访问性能的同时,解决C/S模式下多客户端缓存同步的问题。
本发明解决其问题所采用的技术方案是:
一种数据库的缓存构建系统,包括:
数据表对象模块,用于为每个需要缓存的数据表建立对应的一个类;
数据表缓存模块,用于为数据库中常用的数据表建立对应的缓存对象模型,一个缓存对象模型包括一个数据表或多张数据表;
视图缓存模块,用于为包括多张数据表的缓存对象模型建立对应的视图缓存模型;
数据版录模块,用于为每个数据表建立并记录对应的缓存版本号,所述缓存版本号随着对应数据表的更新而更新。
进一步,所述数据表缓存模块建立的缓存对象模型为Key-Value的哈希表结构。
进一步,所述Key-Value的哈希表结构中,以数据表的主键作为哈希表的Key值,哈希表的Value则存储数据表的所有记录。
进一步,所述视图缓存模块建立对应的视图缓存模型时,同时根据视图缓存模型中所包含的数据表,为视图缓存模型之间建立对应的关联关系。
进一步,所述数据版录模块通过数据版录表存储所有的缓存版本号,当数据库中的数据表被修改时,数据库触发器自动触发使数据版录表中对应数据表的缓存版本号更新。
进一步,所述数据版录表中对应据表的缓存版本号自动加1进行更新,并在超出最大设定值时,将缓存版本号置零。
一种数据库的缓存构建方法,所述缓存构建方法基于以上所述的缓存构建系统实现,所述缓存构建方法包括:
客户端发送对数据库中数据表的读取请求,对应进程根据该读取请求从数据表对象模块中检索所要读取的数据表是否已经缓存,若未缓存,则直接从数据库中读取并进行缓存,否则,客户端将对应程序中的该数据表的缓存版本号与数据版录模块中记录的该数据表的缓存版本号进行对比,若一致,则从数据表缓存模块或视图缓存模块中读取对应的数据表,否则,重新从数据库中读取该数据表,并进行缓存。
进一步,根据类名从数据表对象模块中检索所要读取的数据表是否已经缓存,若有相同的该数据表的类名,表示该数据表已经缓存。
进一步,所述对数据表进行缓存包括以下步骤:
通过数据表对象模块为该数据表建立对应的一个类;
通过数据表缓存模块为该数据表建立对应的缓存对象模型;
通过视图缓存模块判断是否根据该数据表建立对应的视图缓存模型;
通过数据版录模块为该数据表建立并记录对应的缓存版本号。
本发明的有益效果是:
本发明采用一种数据库的缓存构建系统及对应的构建方法,所述系统包括数据表对象模块、数据表缓存模块、视图缓存模块和数据版录模块,通过此四个模块,可有效地实现C/S模式下多客户端之间的数据同步,提升数据库的读取速度,降低对数据库访问时服务器的压力。其中,视图缓存模块替代了现有的数据库视图,解决了数据库视图将太多数据表进行关导致联读取数据时速度慢的问题,大幅度地提升了读取效率;在C/S模式下,每个客户端都有自己的缓存,可缓存包括缓存版本号在内数据,客户端的缓存可及时更新,大幅度提升客户端本身界面的响应速度,同时又可根据缓存版本号提升对应数据的读取效率。
附图说明
下面结合附图和实例对本发明作进一步说明。
图1是本发明所述系统的结构示意图;
图2是本发明所述方法的流程示意图。
具体实施方式
参照图1所示,本发明提供了一种数据库的缓存构建系统,包括:
数据表对象模块,用于为每个需要缓存的数据表建立对应的一个类;
数据表缓存模块,用于为数据库中常用的数据表建立对应的缓存对象模型,一个缓存对象模型包括一个数据表或多张数据表;
视图缓存模块,用于为包括多张数据表的缓存对象模型建立对应的视图缓存模型;
数据版录模块,用于为每个数据表建立并记录对应的缓存版本号,所述缓存版本号随着对应数据表的更新而更新。
本发明通过以上所述缓存构建系统,可实现C/S模式下多客户端之间的数据同步,提升数据库的读取速度,降低对数据库访问时服务器的压力。
为每个要缓存的数据表建立一个类,类不分配实际存储空间,有效节省了存储容量,不同数据表的类名唯一确定,通过类名可有效地对数据表进行搜索,以判断该数据表是否缓存。
为提升对数据表的检索速度,数据表缓存模块建立的缓存对象模型为Key-Value的哈希表结构,所述Key-Value的哈希表结构中,以数据表的主键作为哈希表的Key值,哈希表的Value则存储数据表的所有记录。例如:HashMap<String, TUser> h_users,这种顺序查找的方式,有利于更快速地实现对缓存数据表的查找,快速读取。
数据表缓存模块所建立的缓存对象模型可能包含多张数据表,视图缓存模块为其建立对应的视图缓存模型,且视图缓存模块建立对应的视图缓存模型时,同时根据视图缓存模型中所包含的数据表,为视图缓存模型之间建立对应的关联关系。本发明可根据业务的需要,建立一个或多个视图缓存模型,根据数据表之间的关系,进行关联筛选,起到以取代数据库视图的作用,解决数据库视图多表关联,读取速度很慢的问题。
为了方便缓存版本号的更新,所述数据版录模块通过数据版录表存储所有的缓存版本号,当数据库中的数据表被修改时,数据库触发器自动触发使数据版录表中对应数据表的缓存版本号更新。所述缓存版本号在随着数据表更新时,自动将该数据表所对应的缓存版本号加1进行更新,并在超出最大设定值时,将缓存版本号置零,重新进行版本号的更新,有利于减少数据存储,提升访问速度。本发明由于所有数据表的缓存版本号均被存储在数据版录表中,当某个数据表数据被修改时,数据库触发器将触发使数据版录表中对应的版本号记录加1,客户端在读取缓存数据时,将首先进行缓存版本号检查,即将客户端程序中的缓存版本号与数据库中的缓存版本号进行对比,如果数据库中的版本号更大,则重新从数据库中读取相关数据,并刷新缓存中的数据。此方法以数据库为介质,解决了多客户端程序之间缓存版本的同步问题。
本发明还提供了.一种数据库的缓存构建方法,所述缓存构建方法基于以上所述的缓存构建系统实现,所述缓存构建方法包括:
客户端发送对数据库中数据表的读取请求,对应进程根据该读取请求从数据表对象模块中检索所要读取的数据表是否已经缓存,若未缓存,则直接从数据库中读取并进行缓存,否则,客户端将对应程序中的该数据表的缓存版本号与数据版录模块中记录的该数据表的缓存版本号进行对比,若一致,则从数据表缓存模块或视图缓存模块中读取对应的数据表,否则,重新从数据库中读取该数据表,并进行缓存。
本发明中,C/S模式下的软件程序或每个客户端都有自己的缓存,至少缓存有对应数据表的缓存版本号,当数据库记录发生改变时,各个客户端的缓存都能同步更新。因此,通过该缓存可有效提升访问效率,使客户端程序界面的响应速度得到极大提高。
由于建立类时的唯一性,本发明根据类名从数据表对象模块中检索所要读取的数据表是否已经缓存,若有相同的该数据表的类名,表示该数据表已经缓存。
进行缓存时,可根据以上所述系统进行缓存。所述对数据表进行缓存包括以下步骤:
通过数据表对象模块为该数据表建立对应的一个类;
通过数据表缓存模块为该数据表建立对应的缓存对象模型;
通过视图缓存模块判断是否根据该数据表建立对应的视图缓存模型;
通过数据版录模块为该数据表建立并记录对应的缓存版本号。
以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。
机译: 数据库扩展/构建系统,数据库扩展/构建设备,数据库扩展/构建程序,数据库扩展/构建方法,数据库构建系统,数据库构建设备,数据库构建程序和数据库构建方法
机译: 地址数据库的构建设备,地址数据库的构建系统和地址数据库的构建方法
机译: 数据库构建方法,数据库构建系统和数据库构建程序