数据缓存系统和数据缓存方法
【专利摘要】本发明提供了一种数据缓存系统和一种数据缓存方法,其中,该数据缓存系统包括:缓存划分单元,用于查询待存储数据的类型,为每个类型的数据设置相应的标识,并为所述每个类型的数据分别划分相应的缓存区域;存储单元,用于将每个缓存区域中的数据存储存至操作系统的内存中,并将所述每个缓存区域中的数据分别对应的元数据、标识和/或属性信息存储至虚拟机的内存中。通过本申请的技术方案,能够在进行大内存缓存的情况下,将KEY值集合与真实数据分离存储,并实现缓存数据版本控制和自动更新档案级别的监听器,以及提高监控粒度。
【专利说明】数据缓存系统和数据缓存方法【技术领域】
[0001]本发明涉及数据存储【技术领域】,具体而言,涉及一种数据缓存系统和一种数据缓存方法。
【背景技术】
[0002]在越来越多的J2EE应用中,利用缓存技术存储业务数据以减少频繁数据库链接造成的资源消耗的技术应用愈加普遍。
[0003]由于内存对于数据的读写速度是数据库操作等硬盘读写速度的100倍甚至更高,所以内存缓存可以有效的提升运行效率。业界比较流行的缓存技术也都对内存缓存做了实现,较为常见的如EhCache、OSCache> JbossCache、MemCache等。各种缓存技术各有所长,适合不同业务场景。
[0004]业务上常常把数据量大、变化性小的一类数据归为一类档案数据,各类档案数据分别维护和使用,更加清晰、简洁。例如公文、人员身份、币种、邮编、地区名称等。这些数据都是变化小又经常会使用到的档案数据,不应该在每次查询时进行数据库操作,更适合利用缓存来存储。可以在内存中申请几块缓存区域,分别存储各类档案的数据和各次查询的结果。较为常见的使用方式(人员参照)如图1A所示。
[0005]对人员档案数据的查找功能,每查询的数据变化性不大,数据总量较大,适用缓存来存储常用的数据和查询结果,以便下次查询是快速定位。
[0006]然而,对于此类应用场景,以上的缓存技术并没有太合适的解决方案,逐步显现出一些问题,诸如:缓存数据量较大时占用JVM虚拟机缓存太大,影响JVM运行;档案类数据量大,适合用大内存来存储,各技术对大内存支持的不完善;缓存区域数据偏大时,对Cache数据频繁序列化引起 的效率问题;缓存数据的版本监控与数据变化时自动更新问题针对具体档案数据的缓存监控问题。
[0007]大多缓存技术中采用的是JVM虚拟机内存的方式来进行数据存储,如果针对数量不大的数据,此方式比较适合且存取速率较快。常用缓存技术内存使用情况如图1B所示。
[0008]但是JVM对内存的使用有最大值限制,一般最优的空间并不是很大。如果是档案类数据,数据量较大,如果设置的缓存区域空间较小,会频繁的根据缓存策略进行数据的淘汰;如果设置缓存空间过大,又会影响JVM本身的运行。
[0009]利用NC63中提供的大内存缓存技术,采用JVM之外的操作系统级内存存储缓存数据,充分利用了服务器高配置的大内存空间。且随着硬件技术的发展,64位计算机渐渐占据主流,服务器配置越来越高,内存的容量也很大,满足大内存的缓存需要。内存使用情况如上面右侧示意图所示。
[0010]使用大内存缓存技术的优势显而易见,然而在档案类数据缓存过程中的问题也随之而来,主要体现在以下两个方面:
[0011]问题一:缓存区域的划分与数据序列化与反序列化问题。
[0012]缓存的调用通常有统一的入口,类似CacheManager。入口根据缓存区域的名字对Cache进行获取操作。缓存的使用方式一般如下:
[0013]//获取缓存区
[0014]Cache cache=CacheManager. getCache (,cacheName);
[0015]//放置缓存数据
[0016]cache, put (key, obj);
[0017]//获取缓存数据
[0018]cahce. get (key);
[0019]如果动态的为每类档案申请ー块缓存区域的话,即每个cacheName对应ー类档案(一个Cache对应一个cacheconfig,即分配一块内存区域),大内存的总量不容易控制。考虑到对缓存数据总量的限制,不能每ー类档案数真实的分配ー块大内存区域。
[0020]一般缓存方案的存储方式应该是一个缓存区域中存放多个Map,每个Map中存放具体某ー类型的档案数据。
[0021]如图IC所示,如果使用的是操作系统内存(大内存)存储的数据,每个Map对应ー类档案数据,在get的时候,cacheName为档案的编码,获取结果为一类档案的缓存,由java对象转化到大内存中时需要进行对象的序列化;同理,由已经缓存在大内存的数据转化成java对象的时候,需要进行反序列化。序列化与反序列化的过程是高消耗的,对CPU和服务器都有压力,频繁的进行此操作势必造成效率问题,甚至会低于数据库的存储。
[0022]例如:如果缓存区(ca`che)的占用空间较大(如2G),则姆次调用getCache (key)方法获取ー类档案缓存的Map对象时都要对数据进行一次序列化或者反序列化动作,消耗CPU等资源。
[0023]另外在缓存监控方面,常用的缓存技术监控的粒度在Cache级别,即整个缓存区域的大小、命中率、刷新次数等特性。针对此类档案数据的监控业务,监控的层次较笼统。
[0024]只能监控到整体档案总Cache的使用情況,不利于对各种类型的档案数据缓存情况进行分别监控。
[0025]所以以上的多类档案数据直接存储在ー个大内存的Cache中的方式不可取。这也是本专利方案需要解决的问题之一。
[0026]须解决问题二 :缓存数据版本的控制和更新。
[0027]缓存数据版本问题一直是缓存技术需要解决的问题之一,一般情况是设置刷新时间,每隔一段时间进行一次缓存数据的清理。设置方式通常如下:
[0028]〈property name="flushInterval"value="3000"/>
[0029]针对档案类数据数据量大、变化性不大的特点,如果刷新间隔设置的太大,则数据的真确性会有延迟,如果时间较短,大量数据会被清除掉,缓存特性利用不充分。所以此种缓存更新策略不太适合档案数据的缓存。
【发明内容】
[0030]本发明正是基于上述问题,提出了ー种数据缓存技术,能够在进行大内存缓存的情况下,将KEY值集合与真实数据分离存储,并实现缓存数据版本控制和自动更新档案级别的监听器,以及提高监控粒度。
[0031]有鉴于此,本发明提出了ー种数据缓存系统,包括:缓存划分単元,用于查询待存储数据的类型,为每个类型的数据设置相应的标识,并为所述每个类型的数据分别划分相应的缓存区域;存储单元,用于将每个缓存区域中的数据存储存至操作系统的内存中,并将所述每个缓存区域中的数据分别对应的元数据、标识和/或属性信息存储至虚拟机的内存中。
[0032]在上述技术方案中,优选地,还包括:监听单元,设置于所述每个类型的数据分别对应的缓存区域中,用于分别监听所述每个类型的数据的版本信息;缓存刷新单元,用于在所述监听单元监听到所述版本信息发生变化时,根据变化的版本信息刷新相应类型的数据所在的缓存区域。
[0033]在上述技术方案中,优选地,所述监听单元用于实时监听相应类型的数据的档案数据,并根据所述档案数据的变化获取更新的版本;所述缓存刷新单元根据所述更新的版本刷新相应类型的数据所在的缓存区域。
[0034]在上述技术方案中,优选地,所述监听单元还用于记录相应类型数据的档案数据、所占缓存区域的大小、被访问的次数、和/或被命中的次数。
[0035]在上述技术方案中,优选地,所述监听单元还用于根据相应的标识判断相应类型的数据是否已缓存至相应的缓存区域,若没有缓存,则根据所述相应的标识获取所述相应类型的数据,根据所述相应的标识将所述相应类型的数据写入相应的缓存区域,并将所述相应类型的数据进行序列化,以存储至所述操作系统的内存中,同时将所述相应类型的数据对应的元数据、标识和/或属性信息进行序列化,以存储至所述虚拟机的内存中。
[0036]本申请还提出了一种数据缓存方法,包括:步骤202,查询待存储数据的类型,为每个类型的数据设置相应的标识,并为所述每个类型的数据分别划分相应的缓存区域;步骤204,将每个缓存区域中的数据存储存至操作系统的内存中,并将所述每个缓存区域中的数据分别对应的元数据、标识和/或属性信息存储至虚拟机的内存中。
[0037]在上述技术方案中,优选地,还包括:步骤206,根据所述每个类型的数据分别对应的缓存区域中的监听器,分别监听所述每个类型的数据的版本信息,并在所述版本信息发生变化时,根据变化的版本信息刷新相应类型的数据所在的缓存区域。
[0038]在上述技术方案中,优选地,所述步骤206包括:通过所述监听器实时监听相应类型的数据的档案数据,并根据所述档案数据的变化获取更新的版本,根据所述更新的版本刷新相应类型的数据所在的缓存区域。
[0039]在上述技术方案中,优选地,还包括:通过所述监听器记录相应类型数据的档案数据、所占缓存区域的大小、被访问的次数、被命中的次数。
[0040]在上述技术方案中,优选地,还包括:所述监听器根据相应的标识判断相应类型的数据是否已缓存至相应的缓存区域,若没有缓存,则根据所述相应的标识获取所述相应类型的数据,根据所述相应的标识将所述相应类型的数据写入相应的缓存区域,并将所述相应类型的数据进行序列化,以存储至所述操作系统的内存中,同时将所述相应类型的数据对应的元数据、标识和/或属性信息进行序列化,以存储至所述虚拟机的内存中。
[0041]通过以上技术方案,能够在进行大内存缓存的情况下,将KEY值集合与真实数据分离存储,并实现缓存数据版本控制和自动更新档案级别的监听器,以及提高监控粒度。
【专利附图】
【附图说明】[0042]图IA至图IC示出了相关技术中数据缓存的示意图;
[0043]图2示出了根据本发明的实施例的数据缓存系统的示意框图;
[0044]图3示出了根据本发明的实施例的数据缓存方法的示意流程图;
[0045]图4示出了根据本发明的实施例的缓存数据的示意图;
[0046]图5示出了根据本发明的实施例的监听数据的示意图;
[0047]图6示出了根据本发明的实施例的缓存数据存取和版本控制的示意流程图;
[0048]图7示出了根据本发明的实施例的监听数据的具体示意图;
[0049]图8示出了根据本发明的实施例的监听器的结构示意图。
【具体实施方式】
[0050]为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和【具体实施方式】对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
[0051]在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。
[0052]图2示出了根据本发明的实施例的数据缓存系统的示意框图。
[0053]如图2所示,根`据本发明的实施例的数据缓存系统100包括:缓存划分单元102,用于查询待存储数据的类型,为每个类型的数据设置相应的标识,并为所述每个类型的数据分别划分相应的缓存区域;存储单元104,用于将每个缓存区域中的数据存储存至操作系统的内存中,并将所述每个缓存区域中的数据分别对应的元数据、标识和/或属性信息存储至虚拟机的内存中。
[0054]在该技术方案中,由于数据对应的元数据、标识和/或属性信息数据量较小,在写入到虚拟机内存时,序列化的数据量也较小,而且先将不同类型的数据划分在不同的缓存区域中,再将其写入操作系统的内存,也可以降低序列化的数据量,降低序列化的消耗,以减轻系统的压力。
[0055]在上述技术方案中,优选地,还包括:监听单元106,设置于所述每个类型的数据分别对应的缓存区域中,用于分别监听所述每个类型的数据的版本信息;缓存刷新单元108,用于在所述监听单元监听到所述版本信息发生变化时,根据变化的版本信息刷新相应类型的数据所在的缓存区域。
[0056]在上述技术方案中,优选地,所述监听单元106用于实时监听相应类型的数据的档案数据,并根据所述档案数据的变化获取更新的版本;所述缓存刷新单元108根据所述更新的版本刷新相应类型的数据所在的缓存区域。
[0057]在上述技术方案中,优选地,所述监听单元106还用于记录相应类型数据的档案数据、所占缓存区域的大小、被访问的次数、和/或被命中的次数。
[0058]在上述技术方案中,优选地,所述监听单元106还用于根据相应的标识判断相应类型的数据是否已缓存至相应的缓存区域,若没有缓存,则根据所述相应的标识获取所述相应类型的数据,根据所述相应的标识将所述相应类型的数据写入相应的缓存区域,并将所述相应类型的数据进行序列化,以存储至所述操作系统的内存中,同时将所述相应类型的数据对应的元数据、标识和/或属性信息进行序列化,以存储至所述虚拟机的内存中。
[0059]图3示出了根据本发明的实施例的数据缓存方法的示意流程图。
[0060]如图3所示,根据本发明的实施例的数据缓存方法包括:步骤202,查询待存储数据的类型,为每个类型的数据设置相应的标识,并为所述每个类型的数据分别划分相应的缓存区域;步骤204,将每个缓存区域中的数据存储存至操作系统的内存中,并将所述每个缓存区域中的数据分别对应的元数据、标识和/或属性信息存储至虚拟机的内存中。
[0061]在该技术方案中,由于数据对应的元数据、标识和/或属性信息数据量较小,在写入到虚拟机内存时,序列化的数据量也较小,而且先将不同类型的数据划分在不同的缓存区域中,再将其写入操作系统的内存,也可以降低序列化的数据量,降低序列化的消耗,以减轻系统的压力。
[0062]在上述技术方案中,优选地,还包括:步骤206,根据所述每个类型的数据分别对应的缓存区域中的监听器,分别监听所述每个类型的数据的版本信息,并在所述版本信息发生变化时,根据变化的版本信息刷新相应类型的数据所在的缓存区域。
[0063]在上述技术方案中,优选地,所述步骤206包括:通过所述监听器实时监听相应类型的数据的档案数据,并根据所述档案数据的变化获取更新的版本,根据所述更新的版本刷新相应类型的数据所在的缓存区域。
[0064]在上述技术方案中,优选地,还包括:通过所述监听器记录相应类型数据的档案数据、所占缓存区域的大小、被访问的次数、被命中的次数。
[0065]在上述技术方案中,优选地,还包括:所述监听器根据相应的标识判断相应类型的数据是否已缓存至相应的缓存区域,若没有缓存,则根据所述相应的标识获取所述相应类型的数据,根据所述相应的标识将所述相应类型的数据写入相应的缓存区域,并将所述相应类型的数据进行序列化,以存储至所述操作系统的内存中,同时将所述相应类型的数据对应的元数据、标识和/或属性信息进行序列化,以存储至所述虚拟机的内存中。
[0066]图4示出了根据本发明的实施例的缓存数据的示意图。
[0067]如图4A所示,为清晰的存储基础档案类数据,就需要进行缓存区域的碎片化,为每一类档案数据分配一个区域,分别设置缓存区域的信息。Key值对应的数据量要小,每次序列化的数据量降到最低。
[0068]针对此情况,本解决方案采用多档案多缓存配置的方式,将每类档案的基本信息记录下来,存储在JVM内存中长驻;将所有的缓存真实数据存放在大内存中,KEY值与真实缓存数据分离,将离散的片段化的真实数据放置到操作系统大内存中。有效的解决了序列化的问题。
[0069]JVM内存中只存储各类档案数据的基本信息、缓存的key值信息、统计信息等,真实的数据存储于操作系统内存中。在JVM中将各类型的档案分类存储,加以区分方便将来的统计和刷新。
[0070]在操作系统内存中为所有档案分配统一的大内存缓存区BigMemCache,统一管理数据,如此,真实数据的每一项都会占用比较小的空间。避免了大数据序列化与反序列化的问题。
[0071]图5示出了根据本发明的实施例的监听数据的示意图。
[0072]如图5所示,考虑到真实大缓存区域总数必须控制的问题和分类监控的需要,本方案采取对各类型缓存KEY值和真实数据分离存储的方式,存储结构如上图。
[0073]对于版本和数据更新方面,根据监控数据的变化来自动更新缓存的数据是较好的解决方法。
[0074]本存储机制为每类型的档案数据创建ー个版本敏感的VersionSensitiveHashMap,其主要功能就包括存储key值、绑定档案基础信息与表名,绑定监听器。
[0075]本方案针对每ー类档案数据添加一个监听器(Listener),对数据的版本进行监控。
[0076]监听器中记录档案对应的数据表名和版本(比如时间戳),当档案数据变化时,会更新数据表的版本,监听器在得知版本变化后,更新缓存数据。实现缓存数据存取和版本控制的流程图如图6所示。
[0077]图7示出了根据本发明的实施例的监听数据的具体示意图。
[0078]如图7所示,针对数据内容,本方案采用碎片化缓存区域的方式,每种档案分配一个缓存区域,添加一个监听器,监听器负责对本档案数据的使用情况进行监控并根据档案的数据表名来控制版本。大内存区负责数据的存储、缓存策略、大小控制等。
[0079]图8示出了根据本发明的实施例的监听器的结构示意图。
[0080]档案大内存缓存技术的主要框架,主要由两部分组成:档案的缓存KEY值集合和监听器集合。
[0081]缓存区域的碎片化将原本分配的ー个缓存存储区,根据档案的种类分配成多个区域(VersionSensitiveMap),并为姆个区域添加一个监听器。
[0082]每个监听器中记录了档案的名称、对应的数据表名、档案数据的最新版本、以及访问次数、命中次数等统计信息。
[0083]此处体现了缓存key与数据的分离存储,每个缓存数据对应的key在VersionSensitiveMap中都有记录。姆次访问缓存数据时,首先根据key值信息进行判断是否存在缓存,并根据访问进行信息的统计。
[0084]在访问的同时,查询监听器中表名对应的最新版本,实现版本的控制。解决了上述问题中的版本控制和自动刷新的问题,同时对各类档案进行了监控。
[0085]大内存缓存存储区域BigMemCache。利用操作系统内存存储缓存数据在其他缓存技术中也有实现,如EhCache等,但是针对本场景,对版本控制不够完善。本方案采用NC63的缓存技术,和版本上的VersionSensitiveMap集成,解决了大数据存储与版本更新上的统一。
[0086]大数据是存储在操作系统内存上,不占用JVM内存,且不受JVM内存GC的影响,充分利用了 64为操作系统对大内存容量的支持。
[0087]在以上两块主要技术点之上,本存储机制对入口进行封装,对监听器和版本敏感的Map进行绑定,将大内存缓存技术与本方案合理的集成在一起,形成完整的档案类数据大内存缓存的实现机制。
[0088]本方案在缓存监控粒度方面,细化到业务的档案类型层面,更加清晰明了,易于管理。采用本方案进行档案数据的缓存,突破了内存容量的限制,降低了服务器的压力,減少了对数据库的链接次数,提升了数据的访问效率。[0089]另外,本方案在与NC63提供的大内存缓存技术结合的基础上,实现了档案层级的数据监控和缓存数据版本的自动更新。
[0090]以上结合附图详细说明了本发明的技术方案,考虑到相关技术中,进行大内存缓存时,缓存区域的划分与数据序列化与反序列化问题,以及缓存数据版本的控制和更新等为题。通过本申请的技术方案,能够在进行大内存缓存的情况下,将KEY值集合与真实数据分离存储,并实现缓存数据版本控制和自动更新档案级别的监听器,以及提高监控粒度。
[0091]以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种数据缓存系统,其特征在于,包括: 缓存划分单元,用于查询待存储数据的类型,为每个类型的数据设置相应的标识,并为所述每个类型的数据分别划分相应的缓存区域; 存储单元,用于将每个缓存区域中的数据存储存至操作系统的内存中,并将所述每个缓存区域中的数据分别对应的元数据、标识和/或属性信息存储至虚拟机的内存中。
2.根据权利要求1所述的数据缓存系统,其特征在于,还包括: 监听单元,设置于所述每个类型的数据分别对应的缓存区域中,用于分别监听所述每个类型的数据的版本信息; 缓存刷新单元,用于在所述监听单元监听到所述版本信息发生变化时,根据变化的版本信息刷新相应类型的数据所在的缓存区域。
3.根据权利要求2所述的数据缓存系统,其特征在于,所述监听单元用于实时监听相应类型的数据的档案数据,并根据所述档案数据的变化获取更新的版本;所述缓存刷新单元根据所述更新的版本刷新相应类型的数据所在的缓存区域。
4.根据权利要求2所述的数据缓存系统,其特征在于,所述监听单元还用于记录相应类型数据的档案数据、所占缓存区域的大小、被访问的次数、和/或被命中的次数。
5.根据权利要求2至4中任一项所述的数据缓存系统,其特征在于,所述监听单元还用于根据相应的标识判断相应类型的数据是否已缓存至相应的缓存区域,若没有缓存,则根据所述相应的标识获取所述相应类型的数据,根据所述相应的标识将所述相应类型的数据写入相应的缓存区域,并将所述相应类型的数据进行序列化,以存储至所述操作系统的内存中,同时将所述相应类型的数据对应的元数据、标识和/或属性信息进行序列化,以存储至所述虚拟机的内存中。
6.一种数据缓存方法,其特征在于,包括: 步骤202,查询待存储数据的类型,为每个类型的数据设置相应的标识,并为所述每个类型的数据分别划分相应的缓存区域; 步骤204,将每个缓存区域中的数据存储存至操作系统的内存中,并将所述每个缓存区域中的数据分别对应的元数据、标识和/或属性信息存储至虚拟机的内存中。
7.根据权利要求6所述的数据缓存方法,其特征在于,还包括: 步骤206,根据所述每个类型的数据分别对应的缓存区域中的监听器,分别监听所述每个类型的数据的版本信息,并在所述版本信息发生变化时,根据变化的版本信息刷新相应类型的数据所在的缓存区域。
8.根据权利要求7所述的数据缓存方法,其特征在于,所述步骤206包括:通过所述监听器实时监听相应类型的数据的档案数据,并根据所述档案数据的变化获取更新的版本,根据所述更新的版本刷新相应类型的数据所在的缓存区域。
9.根据权利要求7所述的数据缓存方法,其特征在于,还包括:通过所述监听器记录相应类型数据的档案数据、所占缓存区域的大小、被访问的次数、被命中的次数。
10.根据权利要求7至9中任一项所述的数据缓存方法,其特征在于,还包括:所述监听器根据相应的标识判断相应类型的数据是否已缓存至相应的缓存区域,若没有缓存,则根据所述相应的标识获取所述相应类型的数据,根据所述相应的标识将所述相应类型的数据写入相应的缓存区域,并将所述相应类型的数据进行序列化,以存储至所述操作系统的内存中,同时将所述相应类型的数据对应的元数据、标识和/或属性信息进行序列化,以存 储至所述虚拟机的内存中。
【文档编号】G06F17/30GK103488581SQ201310397394
【公开日】2014年1月1日 申请日期:2013年9月4日 优先权日:2013年9月4日
【发明者】刘建民 申请人:用友软件股份有限公司