一种数据库的缓存构建系统及对应的构建方法转让专利

申请号 : CN201410512411.9

文献号 : CN104281673B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 蔡勤林徐骏钟兴飞

申请人 : 珠海许继芝电网自动化有限公司珠海许继电气有限公司国家电网公司

摘要 :

本发明公开了一种数据库的缓存构建系统及对应的构建方法,所述系统包括数据表对象模块,用于为每个需要缓存的数据表建立对应的一个类;数据表缓存模块,用于为数据库中常用的数据表建立对应的缓存对象模型,一个缓存对象模型包括一个数据表或多张数据表;视图缓存模块,用于为包括多张数据表的缓存对象模型建立对应的视图缓存模型;数据版录模块,用于为每个数据表建立并记录对应的缓存版本号,所述缓存版本号随着对应数据表的更新而更新。所述方法根据所述系统进行缓存构建。本发明可有效地实现C/S模式下多客户端之间的数据同步,提升数据库的读取速度,降低对数据库访问时服务器的压力。

权利要求 :

1.一种数据库的缓存构建系统,其特征在于,包括:

数据表对象模块,用于为每个需要缓存的数据表建立对应的一个类;

数据表缓存模块,用于基于所述数据表对象模块建立的类查找对应的数据表并建立对应的缓存对象模型,一个缓存对象模型包括一个数据表或多张数据表;

视图缓存模块,用于建立对应的视图缓存模型时,同时根据视图缓存模型中所包含的数据表,为视图缓存模型之间建立对应的关联关系,建立一个或多个视图缓存模型,根据数据表之间的关系,进行关联筛选;

数据版录模块,用于为每个数据表建立并记录对应的缓存版本号,所述缓存版本号随着对应数据表的更新而更新。

2.根据权利要求1所述的缓存构建系统,其特征在于,所述数据表缓存模块建立的缓存对象模型为Key-Value的哈希表结构。

3.根据权利要求2所述的缓存构建系统,其特征在于,所述Key-Value的哈希表结构中,以数据表的主键作为哈希表的Key值,哈希表的Value则存储数据表的所有记录。

4.根据权利要求1所述的缓存构建系统,其特征在于,所述视图缓存模块建立对应的视图缓存模型时,同时根据视图缓存模型中所包含的数据表,为视图缓存模型之间建立对应的关联关系。

5.根据权利要求1所述的缓存构建系统,其特征在于,所述数据版录模块通过数据版录表存储所有的缓存版本号,当数据库中的数据表被修改时,数据库触发器自动触发使数据版录表中对应数据表的缓存版本号更新。

6.根据权利要求5所述的缓存构建系统,其特征在于,所述数据版录表中对应据表的缓存版本号自动加1进行更新,并在超出最大设定值时,将缓存版本号置零。

7.一种数据库的缓存构建方法,其特征在于,所述缓存构建方法基于权利要求1-6中的任一所述的缓存构建系统实现,所述缓存构建方法包括:客户端发送对数据库中数据表的读取请求,对应进程根据该读取请求从数据表对象模块中检索所要读取的数据表是否已经缓存,若未缓存,则直接从数据库中读取并进行缓存,否则,客户端将对应程序中的该数据表的缓存版本号与数据版录模块中记录的该数据表的缓存版本号进行对比,若一致,则从数据表缓存模块或视图缓存模块中读取对应的数据表,否则,重新从数据库中读取该数据表,并进行缓存。

8.根据权利要求7所述的缓存构建方法,其特征在于,根据类名从数据表对象模块中检索所要读取的数据表是否已经缓存,若有相同的该数据表的类名,表示该数据表已经缓存。

9.根据权利要求7所述的缓存构建方法,其特征在于,所述对数据表进行缓存包括以下步骤:通过数据表对象模块为该数据表建立对应的一个类;

通过数据表缓存模块为该数据表建立对应的缓存对象模型;

通过视图缓存模块判断是否根据该数据表建立对应的视图缓存模型;

通过数据版录模块为该数据表建立并记录对应的缓存版本号。

说明书 :

一种数据库的缓存构建系统及对应的构建方法

技术领域

[0001] 本发明涉及开源框架下基于C/S模式的客户端数据交互领域,特别是一种数据库的缓存构建系统及对应的构建方法。

背景技术

[0002] 在网络应用中,数据库数据的读写往往需要消耗较多的时间和系统资源(如CPU、内存等系统资源),因此数据库读写往往成为制约整个网络应用效率的瓶颈。为减少数据库访问压力,当前广泛是采用缓存(Cache)技术,将数据预先加载到内存中进行缓存,以减少应用服务器对数据库的访问次数,降低负载,提高相应读写速度。
[0003] 但当前几乎所有的第三方开源框架(如Oscache、Hibernate等),这些框架的缓存机制都适合于开发服务器端应用,即适合开发B/S模式的WEB应用,对于C/S模式的软件,还必须解决多客户端程序之间的缓存同步的问题。

发明内容

[0004] 为解决上述问题,本发明的目的在于提供一种数据库的缓存构建系统及对应的构建方法,在兼顾访问性能的同时,解决C/S模式下多客户端缓存同步的问题。
[0005] 本发明解决其问题所采用的技术方案是:
[0006] 一种数据库的缓存构建系统,包括:
[0007] 数据表对象模块,用于为每个需要缓存的数据表建立对应的一个类;
[0008] 数据表缓存模块,用于为数据库中常用的数据表建立对应的缓存对象模型,一个缓存对象模型包括一个数据表或多张数据表;
[0009] 视图缓存模块,用于为包括多张数据表的缓存对象模型建立对应的视图缓存模型;
[0010] 数据版录模块,用于为每个数据表建立并记录对应的缓存版本号,所述缓存版本号随着对应数据表的更新而更新。
[0011] 进一步,所述数据表缓存模块建立的缓存对象模型为Key-Value的哈希表结构。
[0012] 进一步,所述Key-Value的哈希表结构中,以数据表的主键作为哈希表的Key值,哈希表的Value则存储数据表的所有记录。
[0013] 进一步,所述视图缓存模块建立对应的视图缓存模型时,同时根据视图缓存模型中所包含的数据表,为视图缓存模型之间建立对应的关联关系。
[0014] 进一步,所述数据版录模块通过数据版录表存储所有的缓存版本号,当数据库中的数据表被修改时,数据库触发器自动触发使数据版录表中对应数据表的缓存版本号更新。
[0015] 进一步,所述数据版录表中对应据表的缓存版本号自动加1进行更新,并在超出最大设定值时,将缓存版本号置零。
[0016] 一种数据库的缓存构建方法,所述缓存构建方法基于以上所述的缓存构建系统实现,所述缓存构建方法包括:
[0017] 客户端发送对数据库中数据表的读取请求,对应进程根据该读取请求从数据表对象模块中检索所要读取的数据表是否已经缓存,若未缓存,则直接从数据库中读取并进行缓存,否则,客户端将对应程序中的该数据表的缓存版本号与数据版录模块中记录的该数据表的缓存版本号进行对比,若一致,则从数据表缓存模块或视图缓存模块中读取对应的数据表,否则,重新从数据库中读取该数据表,并进行缓存。
[0018] 进一步,根据类名从数据表对象模块中检索所要读取的数据表是否已经缓存,若有相同的该数据表的类名,表示该数据表已经缓存。
[0019] 进一步,所述对数据表进行缓存包括以下步骤:
[0020] 通过数据表对象模块为该数据表建立对应的一个类;
[0021] 通过数据表缓存模块为该数据表建立对应的缓存对象模型;
[0022] 通过视图缓存模块判断是否根据该数据表建立对应的视图缓存模型;
[0023] 通过数据版录模块为该数据表建立并记录对应的缓存版本号。
[0024] 本发明的有益效果是:
[0025] 本发明采用一种数据库的缓存构建系统及对应的构建方法,所述系统包括数据表对象模块、数据表缓存模块、视图缓存模块和数据版录模块,通过此四个模块,可有效地实现C/S模式下多客户端之间的数据同步,提升数据库的读取速度,降低对数据库访问时服务器的压力。其中,视图缓存模块替代了现有的数据库视图,解决了数据库视图将太多数据表进行关导致联读取数据时速度慢的问题,大幅度地提升了读取效率;在C/S模式下,每个客户端都有自己的缓存,可缓存包括缓存版本号在内数据,客户端的缓存可及时更新,大幅度提升客户端本身界面的响应速度,同时又可根据缓存版本号提升对应数据的读取效率。

附图说明

[0026] 下面结合附图和实例对本发明作进一步说明。
[0027] 图1是本发明所述系统的结构示意图;
[0028] 图2是本发明所述方法的流程示意图。

具体实施方式

[0029] 参照图1所示,本发明提供了一种数据库的缓存构建系统,包括:
[0030] 数据表对象模块,用于为每个需要缓存的数据表建立对应的一个类;
[0031] 数据表缓存模块,用于为数据库中常用的数据表建立对应的缓存对象模型,一个缓存对象模型包括一个数据表或多张数据表;
[0032] 视图缓存模块,用于为包括多张数据表的缓存对象模型建立对应的视图缓存模型;
[0033] 数据版录模块,用于为每个数据表建立并记录对应的缓存版本号,所述缓存版本号随着对应数据表的更新而更新。
[0034] 本发明通过以上所述缓存构建系统,可实现C/S模式下多客户端之间的数据同步,提升数据库的读取速度,降低对数据库访问时服务器的压力。
[0035] 为每个要缓存的数据表建立一个类,类不分配实际存储空间,有效节省了存储容量,不同数据表的类名唯一确定,通过类名可有效地对数据表进行搜索,以判断该数据表是否缓存。
[0036] 为提升对数据表的检索速度,数据表缓存模块建立的缓存对象模型为Key-Value的哈希表结构,所述Key-Value的哈希表结构中,以数据表的主键作为哈希表的Key值,哈希表的Value则存储数据表的所有记录。例如:HashMap h_users,这种顺序查找的方式,有利于更快速地实现对缓存数据表的查找,快速读取。
[0037] 数据表缓存模块所建立的缓存对象模型可能包含多张数据表,视图缓存模块为其建立对应的视图缓存模型,且视图缓存模块建立对应的视图缓存模型时,同时根据视图缓存模型中所包含的数据表,为视图缓存模型之间建立对应的关联关系。本发明可根据业务的需要,建立一个或多个视图缓存模型,根据数据表之间的关系,进行关联筛选,起到以取代数据库视图的作用,解决数据库视图多表关联,读取速度很慢的问题。
[0038] 为了方便缓存版本号的更新,所述数据版录模块通过数据版录表存储所有的缓存版本号,当数据库中的数据表被修改时,数据库触发器自动触发使数据版录表中对应数据表的缓存版本号更新。所述缓存版本号在随着数据表更新时,自动将该数据表所对应的缓存版本号加1进行更新,并在超出最大设定值时,将缓存版本号置零,重新进行版本号的更新,有利于减少数据存储,提升访问速度。本发明由于所有数据表的缓存版本号均被存储在数据版录表中,当某个数据表数据被修改时,数据库触发器将触发使数据版录表中对应的版本号记录加1,客户端在读取缓存数据时,将首先进行缓存版本号检查,即将客户端程序中的缓存版本号与数据库中的缓存版本号进行对比,如果数据库中的版本号更大,则重新从数据库中读取相关数据,并刷新缓存中的数据。此方法以数据库为介质,解决了多客户端程序之间缓存版本的同步问题。
[0039] 本发明还提供了.一种数据库的缓存构建方法,所述缓存构建方法基于以上所述的缓存构建系统实现,所述缓存构建方法包括:
[0040] 客户端发送对数据库中数据表的读取请求,对应进程根据该读取请求从数据表对象模块中检索所要读取的数据表是否已经缓存,若未缓存,则直接从数据库中读取并进行缓存,否则,客户端将对应程序中的该数据表的缓存版本号与数据版录模块中记录的该数据表的缓存版本号进行对比,若一致,则从数据表缓存模块或视图缓存模块中读取对应的数据表,否则,重新从数据库中读取该数据表,并进行缓存。
[0041] 本发明中,C/S模式下的软件程序或每个客户端都有自己的缓存,至少缓存有对应数据表的缓存版本号,当数据库记录发生改变时,各个客户端的缓存都能同步更新。因此,通过该缓存可有效提升访问效率,使客户端程序界面的响应速度得到极大提高。
[0042] 由于建立类时的唯一性,本发明根据类名从数据表对象模块中检索所要读取的数据表是否已经缓存,若有相同的该数据表的类名,表示该数据表已经缓存。
[0043] 进行缓存时,可根据以上所述系统进行缓存。所述对数据表进行缓存包括以下步骤:
[0044] 通过数据表对象模块为该数据表建立对应的一个类;
[0045] 通过数据表缓存模块为该数据表建立对应的缓存对象模型;
[0046] 通过视图缓存模块判断是否根据该数据表建立对应的视图缓存模型;
[0047] 通过数据版录模块为该数据表建立并记录对应的缓存版本号。
[0048] 以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。