数据缓存系统和数据缓存方法技术方案

技术编号:9519270 阅读:105 留言:0更新日期:2014-01-01 16:55
本发明专利技术提供了一种数据缓存系统和一种数据缓存方法,其中,该数据缓存系统包括:缓存划分单元,用于查询待存储数据的类型,为每个类型的数据设置相应的标识,并为所述每个类型的数据分别划分相应的缓存区域;存储单元,用于将每个缓存区域中的数据存储存至操作系统的内存中,并将所述每个缓存区域中的数据分别对应的元数据、标识和/或属性信息存储至虚拟机的内存中。通过本申请的技术方案,能够在进行大内存缓存的情况下,将KEY值集合与真实数据分离存储,并实现缓存数据版本控制和自动更新档案级别的监听器,以及提高监控粒度。

【技术实现步骤摘要】
【专利摘要】本专利技术提供了一种数据缓存系统和一种数据缓存方法,其中,该数据缓存系统包括:缓存划分单元,用于查询待存储数据的类型,为每个类型的数据设置相应的标识,并为所述每个类型的数据分别划分相应的缓存区域;存储单元,用于将每个缓存区域中的数据存储存至操作系统的内存中,并将所述每个缓存区域中的数据分别对应的元数据、标识和/或属性信息存储至虚拟机的内存中。通过本申请的技术方案,能够在进行大内存缓存的情况下,将KEY值集合与真实数据分离存储,并实现缓存数据版本控制和自动更新档案级别的监听器,以及提高监控粒度。【专利说明】
本专利技术涉及数据存储
,具体而言,涉及一种数据缓存系统和一种数据缓存方法。
技术介绍
在越来越多的J2EE应用中,利用缓存技术存储业务数据以减少频繁数据库链接造成的资源消耗的技术应用愈加普遍。由于内存对于数据的读写速度是数据库操作等硬盘读写速度的100倍甚至更高,所以内存缓存可以有效的提升运行效率。业界比较流行的缓存技术也都对内存缓存做了实现,较为常见的如EhCache、OSCache> JbossCache、MemCache等。各种缓存技术各有所长,适合不同业务场景。业务上常常把数据量大、变化性小的一类数据归为一类档案数据,各类档案数据分别维护和使用,更加清晰、简洁。例如公文、人员身份、币种、邮编、地区名称等。这些数据都是变化小又经常会使用到的档案数据,不应该在每次查询时进行数据库操作,更适合利用缓存来存储。可以在内存中申请几块缓存区域,分别存储各类档案的数据和各次查询的结果。较为常见的使用方式(人员参照)如图1A所示。对人员档案数据的查找功能,每查询的数据变化性不大,数据总量较大,适用缓存来存储常用的数据和查询结果,以便下次查询是快速定位。然而,对于此类应用场景,以上的缓存技术并没有太合适的解决方案,逐步显现出一些问题,诸如:缓存数据量较大时占用JVM虚拟机缓存太大,影响JVM运行;档案类数据量大,适合用大内存来存储,各技术对大内存支持的不完善;缓存区域数据偏大时,对Cache数据频繁序列化引起 的效率问题;缓存数据的版本监控与数据变化时自动更新问题针对具体档案数据的缓存监控问题。大多缓存技术中采用的是JVM虚拟机内存的方式来进行数据存储,如果针对数量不大的数据,此方式比较适合且存取速率较快。常用缓存技术内存使用情况如图1B所示。但是JVM对内存的使用有最大值限制,一般最优的空间并不是很大。如果是档案类数据,数据量较大,如果设置的缓存区域空间较小,会频繁的根据缓存策略进行数据的淘汰;如果设置缓存空间过大,又会影响JVM本身的运行。利用NC63中提供的大内存缓存技术,采用JVM之外的操作系统级内存存储缓存数据,充分利用了服务器高配置的大内存空间。且随着硬件技术的发展,64位计算机渐渐占据主流,服务器配置越来越高,内存的容量也很大,满足大内存的缓存需要。内存使用情况如上面右侧示意图所示。使用大内存缓存技术的优势显而易见,然而在档案类数据缓存过程中的问题也随之而来,主要体现在以下两个方面:问题一:缓存区域的划分与数据序列化与反序列化问题。缓存的调用通常有统一的入口,类似CacheManager。入口根据缓存区域的名字对Cache进行获取操作。缓存的使用方式一般如下://获取缓存区Cache cache=CacheManager. getCache (,cacheName);//放置缓存数据cache, put (key, obj);//获取缓存数据cahce. get (key);如果动态的为每类档案申请ー块缓存区域的话,即每个cacheName对应ー类档案(一个Cache对应一个cacheconfig,即分配一块内存区域),大内存的总量不容易控制。考虑到对缓存数据总量的限制,不能每ー类档案数真实的分配ー块大内存区域。一般缓存方案的存储方式应该是一个缓存区域中存放多个Map,每个Map中存放具体某ー类型的档案数据。如图IC所示,如果使用的是操作系统内存(大内存)存储的数据,每个Map对应ー类档案数据,在get的时候,cacheName为档案的编码,获取结果为一类档案的缓存,由java对象转化到大内存中时需要进行对象的序列化;同理,由已经缓存在大内存的数据转化成java对象的时候,需要进行反序列化。序列化与反序列化的过程是高消耗的,对CPU和服务器都有压力,频繁的进行此操作势必造成效率问题,甚至会低于数据库的存储。例如:如果缓存区(ca`che)的占用空间较大(如2G),则姆次调用getCache (key)方法获取ー类档案缓存的Map对象时都要对数据进行一次序列化或者反序列化动作,消耗CPU等资源。另外在缓存监控方面,常用的缓存技术监控的粒度在Cache级别,即整个缓存区域的大小、命中率、刷新次数等特性。针对此类档案数据的监控业务,监控的层次较笼统。只能监控到整体档案总Cache的使用情況,不利于对各种类型的档案数据缓存情况进行分别监控。所以以上的多类档案数据直接存储在ー个大内存的Cache中的方式不可取。这也是本专利方案需要解决的问题之一。须解决问题二 :缓存数据版本的控制和更新。缓存数据版本问题一直是缓存技术需要解决的问题之一,一般情况是设置刷新时间,每隔一段时间进行一次缓存数据的清理。设置方式通常如下:〈property name="flushInterval"value="3000"/>针对档案类数据数据量大、变化性不大的特点,如果刷新间隔设置的太大,则数据的真确性会有延迟,如果时间较短,大量数据会被清除掉,缓存特性利用不充分。所以此种缓存更新策略不太适合档案数据的缓存。
技术实现思路
本专利技术正是基于上述问题,提出了ー种数据缓存技术,能够在进行大内存缓存的情况下,将KEY值集合与真实数据分离存储,并实现缓存数据版本控制和自动更新档案级别的监听器,以及提高监控粒度。有鉴于此,本专利技术提出了ー种数据缓存系统,包括:缓存划分単元,用于查询待存储数据的类型,为每个类型的数据设置相应的标识,并为所述每个类型的数据分别划分相应的缓存区域;存储单元,用于将每个缓存区域中的数据存储存至操作系统的内存中,并将所述每个缓存区域中的数据分别对应的元数据、标识和/或属性信息存储至虚拟机的内存中。在上述技术方案中,优选地,还包括:监听单元,设置于所述每个类型的数据分别对应的缓存区域中,用于分别监听所述每个类型的数据的版本信息;缓存刷新单元,用于在所述监听单元监听到所述版本信息发生变化时,根据变化的版本信息刷新相应类型的数据所在的缓存区域。在上述技术方案中,优选地,所述监听单元用于实时监听相应类型的数据的档案数据,并根据所述档案数据的变化获取更新的版本;所述缓存刷新单元根据所述更新的版本刷新相应类型的数据所在的缓存区域。在上述技术方案中,优选地,所述监听单元还用于记录相应类型数据的档案数据、所占缓存区域的大小、被访问的次数、和/或被命中的次数。在上述技术方案中,优选地,所述监听单元还用于根据相应的标识判断相应类型的数据是否已缓存至相应的缓存区域,若没有缓存,则根据所述相应的标识获取所述相应类型的数据,根据所述相应的标识将所述相应类型的数据写入相应的缓存区域,并将所述相应类型本文档来自技高网
...

【技术保护点】
一种数据缓存系统,其特征在于,包括:缓存划分单元,用于查询待存储数据的类型,为每个类型的数据设置相应的标识,并为所述每个类型的数据分别划分相应的缓存区域;存储单元,用于将每个缓存区域中的数据存储存至操作系统的内存中,并将所述每个缓存区域中的数据分别对应的元数据、标识和/或属性信息存储至虚拟机的内存中。

【技术特征摘要】

【专利技术属性】
技术研发人员:刘建民
申请(专利权)人:用友软件股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1