一种列访问感知的数据缓存方法及系统的制作方法

文档序号:6525132阅读:420来源:国知局
一种列访问感知的数据缓存方法及系统的制作方法
【专利摘要】本发明公开了一种列访问感知的数据缓存方法及系统,所述方法包括用于非事务型查询操作的步骤、用于事务型增加、修改或删除操作的步骤和用于缓存监听的步骤;用于非事务型查询操作,判断是否命中缓存,如果是,就在数据缓存系统中查询数据同时修正列访问频数的步骤,如果否,就在关系数据库中查询数据同时修正列访问频数的步骤;用于事务型增加、修改或删除操作,将变化数据实时同步到缓存的步骤;用于缓存监听的步骤,用于修正列访问频数的步骤,用于修正缓存数据的步骤。本发明具有低响应时间、高缓存命中率以及高吞吐量等特性,通过列访问频率动态修正缓存数据内容。
【专利说明】一种列访问感知的数据缓存方法及系统
【技术领域】
[0001]本发明涉及一种数据缓存系统及方法,尤其涉及一种列访问感知的数据缓存方法及系统。
【背景技术】
[0002]传统关系数据库是目前Web应用中存取数据的主要形式。然而,随着Web2.0、大数据、云应用等技术的发展,传统的关系数据库在高并发读写方面遇到了瓶颈,无法满足海量数据的高效率存储和访问需求。在这个背景下,无模式数据库应运而生。无模式数据库,作为一种模式自由的数据库,其模式主要有关系、树、图、文档等多种方式,主要用于解决大数据的管理、处理和分析等问题。然而,由于数据库模式和编程接口的差异,无模式数据库短时间不可能完全取代关系数据库。因此,以关系数据库为主,无模式数据库为辅,成了工业界和产业界普遍接受的方案。由于无模式数据库具有高性能、易扩展特性,因此与关系数据库进行结合,存储海量数据。无模式数据库特点决定其同样适用于缓存数据。无模式数据库作为关系数据库的缓存是一种解决关系数据库读取瓶颈问题的解决方案。然而,现有技术中无模式数据缓存缺乏保证缓存高命中率的有效方法,无法保证频繁访问的数据均命中数据缓存。
[0003]为了提高数据的读取能力,现有技术存在四类数据缓存方法:
[0004](I)数据库查询缓存。该方法用内存、闪存等快速访问存储器缓存查询结果,降低数据库负载。当再次进行同一查询时,直接从缓存中取出数据。例如,集成Memcached的MySQL数据库产品;
[0005](2)应用级数据存储。应用程序直接缓存特定类方法或函数的返回值。在一定时间间隔内,当再次执行同一方法或函数时,只要参数相同,直接从缓存中取出数据。EHCache是实现该方法的一种Java EE缓存框架;
[0006](3)内存数据库。该方法抛弃了磁盘数据管理的传统方式,直接将数据存储在内存中,并且在数据缓存、快速算法和并行操作方面也进行了相应的改进。相对于快速访问存储控制器,内存的数据读写速度要高出几个数量级,极大地提高应用的性能;
[0007](4)无模式数据库与关系数据库集成方案。该方案对现有的关系数据库存储引擎进行改造,引入无模式键值序对缓存数据及索引,从而提升读取性能。
[0008]上述方法在适应范围上都存在不同方面的缺陷:方法(I)与方法(2)存在缓存与实际数据的一致性问题。该类方法需要修改原有应用程序。另外,如何保证较高的缓存命中率,如何对过期数据及时清理是该类方法的最大挑战。方法(2)中的缓存结构一旦崩溃,在短时间内会造成数据库负载过高而宕机。方法(3)在存储量上存在瓶颈,不适合大数据的存取访问。方法(4)需要对数据库存储引擎进行修改,修改方法与具体数据库相关,不具备普适性。数据缓存的关键问题是如何提高缓存命中率,如果保证访问频繁的数据均命中缓存。
【发明内容】

[0009]本发明的目的就是提高缓存命中率,通过一系列方法保证频繁访问的数据均命中缓存,提供一种列访问感知的数据缓存方法及系统,基于列访问频率修正缓存数据,大数据下查询时,本系统具有低响应时间、高缓存命中率以及高吞吐量等特性,通过列访问频率动态修正缓存数据内容。
[0010]为实现上述目的,本发明采用如下技术方案:
[0011 ] 一种列访问感知的数据缓存方法,步骤为:
[0012]用于非事务型查询操作的步骤、用于事务型增加、修改或删除操作的步骤和用于缓存监听的步骤;
[0013](I)如果是非事务型查询操作,判断是否命中缓存:
[0014](1.1)如果命中缓存,就在数据缓存中查询数据同时使用频数计数器中修正列访问频数,
[0015](1.2)如果未命中缓存,就在关系数据库中查询数据同时使用频数计数器中修正列访问频数;
[0016](2)如果是事务型增加、修改或删除操作,将关系数据库的变化数据实时同步到数据缓存系统;
[0017](3)如果是缓存监听,先使用频数计数器中修正列访问频数,再使用缓存监听器修正缓存数据。
[0018]所述事务型增加、修改或删除操作的具体步骤如下:
[0019]步骤111:应用程序连接关系数据库,增加、修改或删除数据;
[0020]步骤112:基于日志的变化数据捕获器监听到变化前后的数据;
[0021]步骤113:从变化数据中选择一列;
[0022]步骤114:判断步骤113的变化数据中的数据列是否存在于数据缓存,若变化数据存在于数据缓存中,转步骤115 ;若变化数据不存在于数据缓存中,转步骤116 ;
[0023]步骤115:修改数据缓存中数据,达到数据缓存与实际数据一致;
[0024]步骤116:判断变化数据是否还有下一列;若存在,转步骤113,否则转步骤117 ;
[0025]步骤117:结束。
[0026]所述非事务型查询操作的具体步骤如下:
[0027]步骤121:判断查询是否命中数据缓存;若数据命中缓存,则在数据缓存系统中查询数据,转步骤122,否则在关系数据库中查询数据,转步骤123 ;
[0028]步骤122:增大该列的列访问频数,并计算新的列访问频率,转步骤126 ;
[0029]步骤123:增大该列的列访问频数,并计算新的列访问频率,转步骤124 ;
[0030]步骤124:根据变化后列访问频率与变化前列访问频率差的绝对值,判断是否需要将数据移入到数据缓存系统;若需要移入到数据缓存系统,转步骤125 ;否则转步骤126 ;
[0031]步骤125:将数据列移入到数据缓存系统,转步骤126 ;
[0032]步骤126:结束。
[0033]所述缓存监听的步骤如下:
[0034]步骤131:判断最近一次列访问频率与平均列访问频率大小;若最近一次列访问频率大于平均列访问频率,说明该数据列仍然是访问频繁列,不做任何处理,转步骤135 ;若最近一次列访问频率小于等于平均列访问频率,说明该数据列最近一段时间内访问频繁程度降低,转步骤132;
[0035]步骤132:减小该列的列访问频数;
[0036]步骤133:判断平均列访问频率与最近一次列访问频率的差的绝对值是否大于设定阈值;若满足,转步骤134:否则转步骤135 ;
[0037]步骤134:在数据缓存中移除该列。
[0038]步骤135:结束。
[0039]一种列访问感知的数据缓存系统,包括:
[0040]用于非事务型查询操作的访问判别器、用于事务型增加、修改或删除操作的基于日志的变化数据捕获器、缓存监听器、数据缓存、频数计数器和关系数据库;
[0041]所述访问判别器用于判断是否命中缓存;
[0042]如果命中缓存,就从所述数据缓存系统中查询数据同时使用频数计数器修正数据缓存内列访问频数,
[0043]如果未命中缓存,就从所述关系数据库中查询数据的关系数据库同时使用频数计数器修正数据缓存内的列访问频数;
[0044]所述基于日志的变化数据捕获器用于将关系数据库变化的数据实时同步到数据缓存;
[0045]所述缓存监听器用于对数据缓存进行缓存监听;先在频数计数器中修正列访问频数,然后使用缓存监听器修正缓存数据。
[0046]专业术语解释:
[0047]所述列访问频数,是一种广义的列访问频数,该列数据每被访问(查询、缓存命中、缓存未命中等)一次,列访问频数增加特定数值,该数值为该访问方式的权值。若该列数据长时间未被访问,该列访问频数减小特定数值,该数值为该列访问方式的权值。
[0048]所述列命中系数,用于修正列访问频数,计算新的列访问频率。当数据访问命中缓存时,说明此列一段时间内有访问需求,此时新的列访问频数=原列访问频数+列命中系数。
[0049]所述列未命中系数,用于修正列访问频数,计算新的列访问频率。当数据访问未命中缓存时,说明此列一段时间内有访问需求,此时新的列访问频数=原列访问频数+列未命中系数。由于缓存命中比缓存未命中更能说明该列访问频繁,设定列未命中系数远小于列命中系数。
[0050]所述列不长访问系数,用于修正列访问频数,计算新的列访问频率。当缓存监听器发现数据列长时间不被访问时,说明此列一段时间内无访问需求,此时新的列访问频数=原列访问频数-列不长访问系数。
[0051]所述基于日志的变化数据捕获是从数据库二进制日志中及时获取到变化前后的数据。
[0052]本发明中的列访问感知的数据缓存方法,具有六个特点:
[0053]( I)是基于广义列访问频率感知后动态修正的;
[0054](2)设计有缓存监听器,将不频繁访问的列移除于数据缓存,及时清理过期的数据缓存;
[0055](3)设计有访问判别器,用于判定访问请求的数据是否命中缓存;
[0056](4)设计有频数计数器,根据不同类型访问动态修正列访问频数;
[0057](5)设计有基于日志的变化数据捕获器,用于保证关系数据库与缓存的数据一致性;
[0058](6)设计有无模式缓存,按照数据列的方式缓存数据。
[0059]该方式具有以下有益效果:
[0060](I)列访问感知的数据缓存系统中的数据缓存,具有低查询时间、高吞吐量等特
占.[0061](2)通过对列访问频数的动态修正,动态调整数据缓存内容,提高了缓存的命中率;
[0062](3)列访问感知的数据缓存系统中变化数据捕获器,可以将数据的变化同步于缓存,从而保证了数据缓存的一致性;
[0063](4)列访问感知的数据缓存系统中缓存监听器,及时清理缓存中的过期数据;
[0064](5)列访问感知的数据缓存系统独立于应用程序,对应用本身透明。现有的遗留系统可以在不进行任何修改的情况下引入该数据缓存方案;
[0065](6)在列访问感知的数据缓存系统中缓存崩溃后,列访问感知的数据缓存系统中的访问判别器可以保证数据的正常访问;
[0066](7)采用列存储型的无模式数据库对访问频繁的关系数据库列进行存储。所述数据缓存中的数据列随列访问频数与频率动态变化,从而保证频繁访问的数据列命中缓存。
【专利附图】

【附图说明】
[0067]图1列访问感知的数据缓存系统结构图;
[0068]图2列访问感知的数据缓存方法流程图;
[0069]图3事务型增加、修改或删除操作后变化数据到数据缓存的同步过程;
[0070]图4非事务型查询操作修正列访问频数和数据缓存流程图;
[0071]图5缓存监听器修正列访问频数和数据缓存流程图。
【具体实施方式】
[0072]实施本发明中的数据缓存系统后,应用程序由直接访问关系数据库改为访问数据缓存系统。
[0073]下面结合附图与实施例对本发明作进一步说明。
[0074]如图1所示,一种列访问感知的数据缓存系统,包括:
[0075]访问判别器202,分别与数据缓存、频数计数器和关系数据库通信,用于接收访问请求并判定访问请求的数据是否命中缓存;若命中缓存,则从数据缓存系统中查询数据;若未命中缓存,则从关系数据库中获取查询数据;
[0076]频数计数器203,分别与数据缓存系统、访问判别器和关系数据库通信,用于计算列访问频数和列访问频率;
[0077]基于日志的变化数据捕获器204,分别与数据缓存系统和关系数据库通信,用于监听关系数据库日志中的事件,捕获关系数据库的变化量,将其同步到目标数据缓存系统中;
[0078]数据缓存205,分别与缓存监听器、访问判别器、频数计数器和基于日志的变化数据捕获器通信,是频繁访问的数据集合,采用列存储型的无模式数据库对访问频繁的关系数据库中的数据列进行实时动态存储;所述数据缓存中的数据列随列访问频数与频率动态变化,从而保证频繁访问的数据列命中缓存;
[0079]缓存监听器201,监听数据缓存系统中的数据缓存,并移除数据缓存系统中最近不频繁访问的数据;
[0080]关系数据库206,分别与访问判别器、频数计数器和基于日志的变化数据捕获器通信。
[0081]如图2所示,列访问感知的数据缓存方式流程图,给出了访问数据缓存系统的流程。在此过程中修正新的列访问频数。一种列访问感知的数据缓存方法,步骤为:
[0082]启动数据缓存系统,应用程序通过JDBC等方式访问数据缓存系统;如果是非事务型查询操作就进入步骤102 ;如果是事务型增加、修改或删除操作就进入步骤105 ;如果缓存监听器拦截到缓存变化就进入步骤107 ;
[0083]步骤102:判断请求数据是否命中数据缓存,如果命中数据缓存转步骤103 ;如果未命中数据缓存就转步骤104 ;
[0084]步骤103:在数据缓存系统中查询数据,同时修正列访问频数,转步骤106 ;新的列访问频数=原列访问频数+列命中系数;
[0085]步骤104:在关系数据库中查询数据,同时修正列访问频数,转步骤106 ;新的列访问频数=原列访问频数+列未命中系数;设定列未命中系数远小于列命中系数;
[0086]步骤105:将关系数据库变化增量动态同步到数据缓存系统,转步骤106 ;
[0087]步骤107:修正列访问频率,缓存监听器修正缓存数据,转步骤106 ;
[0088]步骤106:结束。
[0089]如图3所示,变化数据到数据缓存的同步过程,给出了基于日志的变化数据捕获器将变化数据同步到数据缓存的同步过程。所述步骤105的具体步骤如下:
[0090]步骤111:应用程序通过JDBC等方式连接关系数据库,增加、修改或删除数据;
[0091]步骤112:基于日志的变化数据捕获器监听到变化前后的数据;
[0092]步骤113:从变化数据中选择一列;
[0093]步骤114:判断步骤113的变化数据中的数据列是否存在于数据缓存系统,若变化数据存在于数据缓存系统中,转步骤115 ;若变化数据不存在于数据缓存系统中,转步骤116 ;
[0094]步骤115:修改数据缓存系统中数据,达到数据缓存系统与实际数据一致;若为新增数据,则将该数据同时存储于缓存;若为修改数据,则修改缓存中相对应的数据;若为删除数据,则将缓存中相对应数据删除;
[0095]步骤116:判断变化数据是否还有下一列;若存在,转步骤113,否则转步骤117 ;
[0096]步骤117:结束。
[0097]如图4所示,非事务型查询操作修正列访问频数和数据缓存流程图,给出了查询类操作修正列访问频数的方法。所述非事务型查询操作的具体步骤如下:[0098]步骤121:判断查询是否命中数据缓存;若数据命中缓存,则在数据缓存中查询数据,转步骤122,否则在关系数据库中查询数据,转步骤123 ;
[0099]步骤122:增大该列的列访问频数,并计算新的列访问频率,转步骤126 ;新的列访问频数=原列访问频数+命中系数,新的列访问频率=新的列访问频数/时间;
[0100]步骤123:增大该列的列访问频数,并计算新的列访问频率,转步骤124 ;新的列访问频数=原列访问频数+未命中系数,新的列访问频率=新的列访问频数/时间。设定未命中系数远小于命中系数;
[0101]步骤124:根据变化后列访问频率与变化前列访问频率差的绝对值,判断是否需要将数据移入到数据缓存系统;若需要移入到数据缓存系统,转步骤125 ;否则转步骤126 ;
[0102]步骤125:将数据列移入到数据缓存系统,转步骤126 ;
[0103]步骤126:结束。
[0104]所述步骤124的详细步骤如下:
[0105]步骤124-1,计算当前列访问频率与上次计算的列访问频率;
[0106]步骤124-2,若当前列访问频率小于上次计算的列访问频率,将该数据移入到数据缓存;
[0107]步骤124-3,若当前列访问频率大于等于上次计算的列访问频率,不做任何处理。
[0108]如图5所示,所述步骤107的步骤如下:
[0109]步骤131:判断最近一次列访问频率与平均列访问频率大小;若最近一次列访问频率大于平均列访问频率,说明该数据列仍然是访问频繁列,不做任何处理,转步骤135 ;若最近一次列访问频率小于等于平均列访问频率,说明该数据列最近一段时间内访问频繁程度降低,转步骤132;
[0110]步骤132:减小该列的列访问频数;新的列访问频数=原列访问频数-列不长访问系数,新的列访问频数=新的列访问频数/时间。
[0111]步骤133:判断平均列访问频率与最近一次列访问频率的差的是否大于设定阈值;若满足,转步骤134:否则转步骤135 ;
[0112]步骤134:在数据缓存中移除该列。
[0113]步骤135:结束。
[0114]上述虽然结合附图对本发明的【具体实施方式】进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。
【权利要求】
1.一种列访问感知的数据缓存方法,其特征是,步骤为: 用于非事务型查询操作的步骤、用于事务型增加、修改或删除操作的步骤和用于缓存监听的步骤; (1)如果是非事务型查询操作,判断是否命中缓存: (1.1)如果命中缓存,就在数据缓存中查询数据同时使用频数计数器中修正列访问频数, (1.2)如果未命中缓存,就在关系数据库中查询数据同时使用频数计数器中修正列访问频数; (2)如果是事务型增加、修改或删除操作,将关系数据库的变化数据实时同步到数据缓存系统; (3)如果是缓存监听,先使用频数计数器中修正列访问频数,再使用缓存监听器修正缓存数据。
2.如权利要求1所述的一种列访问感知的数据缓存方法,其特征是,所述事务型增加、修改或删除操作的具体步骤如下: 步骤111:应用程序连接关系数据库,增加、修改或删除数据; 步骤112:基于日志的变化数据捕获器监听到变化前后的数据; 步骤113:从变化数据中选择一列; 步骤114:判断步骤113的变化数据中的数据列是否存在于数据缓存,若变化数据存在于数据缓存中,转步骤115 ;若变化数据不存在于数据缓存中,转步骤116 ; 步骤115:修改数据缓存中数据,达到数据缓存与实际数据一致; 步骤116:判断变化数据是否还有下一列;若存在,转步骤113,否则转步骤117 ; 步骤117:结束。
3.如权利要求1所述的一种列访问感知的数据缓存方法,其特征是,所述非事务型查询操作的具体步骤如下: 步骤121:判断查询是否命中数据缓存;若数据命中缓存,则在数据缓存中查询数据,转步骤122,否则在关系数据库中查询数据,转步骤123 ; 步骤122:增大该列的列访问频数,并计算新的列访问频率,转步骤126 ; 步骤123:增大该列的列访问频数,并计算新的列访问频率,转步骤124 ; 步骤124:根据变化后列访问频率与变化前列访问频率差的绝对值,判断是否需要将数据移入到数据缓存系统;若需要移入到数据缓存系统,转步骤125 ;否则转步骤126 ; 步骤125:将数据列移入到数据缓存系统,转步骤126 ; 步骤126:结束。
4.如权利要求1所述的一种列访问感知的数据缓存方法,其特征是,所述缓存监听的步骤如下: 步骤131:判断最近一次列访问频率与平均列访问频率大小;若最近一次列访问频率大于平均列访问频率,说明该数据列仍然是访问频繁列,不做任何处理,转步骤135 ;若最近一次列访问频率小于等于平均列访问频率,说明该数据列最近一段时间内访问频繁程度降低,转步骤132 ; 步骤132:减小该列的列访问频数;步骤133:判断平均列访问频率与最近一次列访问频率的差的绝对值是否大于设定阈值;若满足,转步骤134:否则转步骤135 ; 步骤134:在数据缓存中移除该列; 步骤135:结束。
5.一种列访问感知的数据缓存系统,其特征是,包括: 用于非事务型查询操作的访问判别器、用于事务型增加、修改或删除操作的基于日志的变化数据捕获器、缓存监听器、数据缓存、频数计数器和关系数据库; 所述访问判别器用于判断是否命中缓存; 如果命中缓存,就从所述数据缓存系统中查询数据同时使用频数计数器修正数据缓存内列访问频数, 如果未命中缓存,就从所述关系数据库中查询数据的关系数据库同时使用频数计数器修正数据缓存内的列访问频数; 所述基于日志的变化数据捕获器用于将关系数据库变化的数据实时同步到数据缓存; 所述缓存监听器用于对数据缓存进行缓存监听;先在频数计数器中修正列访问频数,然后使用缓存监听器修 正缓存数据。
【文档编号】G06F17/30GK103631972SQ201310716863
【公开日】2014年3月12日 申请日期:2013年12月23日 优先权日:2013年12月23日
【发明者】马坤, 杨波 申请人:济南大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1