《一种高效利用存储空间的自适应自组织塔式缓存方法.pdf》由会员分享,可在线阅读,更多相关《一种高效利用存储空间的自适应自组织塔式缓存方法.pdf(12页完整版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103077125 A(43)申请公布日 2013.05.01CN103077125A*CN103077125A*(21)申请号 201210540057.1(22)申请日 2012.12.13G06F 12/08(2006.01)(71)申请人北京锐安科技有限公司地址 100044 北京市海淀区中关村南大街乙56号方圆大厦9层(72)发明人郭俸明(74)专利代理机构北京君尚知识产权代理事务所(普通合伙) 11200代理人余功勋(54) 发明名称一种高效利用存储空间的自适应自组织塔式缓存方法(57) 摘要本发明涉及一种高效利用存储空间的自适应自组织塔式缓存方法,其步骤。
2、包括:在缓存服务器上建立以数据尺寸为阀值的多级缓存容器,各级缓存容器串联成一个数组,构成塔式缓存结构;所述缓存服务器从数据中心接收数据,根据接收的数据的大小自动选择合适的缓存容器进行存储;在保持存储空间容量总量不变的前提下,根据各级缓存容器在指定时间段内的命中率动态调节各级缓存容器的容量值,使命中率越高的缓存容器的容量越大。本发明可以自动根据数据自身的尺寸选择合适的缓存,并通过自动调节缓存的容量来最大化缓存的命中率,具有自适应性和自组织性。(51)Int.Cl.权利要求书1页 说明书5页 附图5页(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书1页 说明书5页 附图5页(10。
3、)申请公布号 CN 103077125 ACN 103077125 A1/1页21.一种自适应自组织塔式缓存方法,其步骤包括:1)在缓存服务器上建立以数据尺寸为阀值的多级缓存容器,各级缓存容器串联成一个数组,构成塔式缓存结构;2)所述缓存服务器从数据中心接收数据,根据接收的数据的大小自动选择合适的缓存容器进行存储;3)在保持存储空间容量总量不变的前提下,根据各级缓存容器在指定时间段内的命中率动态调节各级缓存容器的容量值,使命中率越高的缓存容器的容量越大。2.如权利要求1所述的方法,其特征在于:根据缓存点击率来设定各级缓存容器的访问优先级,点击率越高则优先级越高。3.如权利要求1所述的方法,其特。
4、征在于:所述多级缓存容器对外提供统一的数据获取接口,并隐藏数据存储实现细节。4.如权利要求1所述的方法,其特征在于:每级缓存容器含有一个用于保存数据的键值对的数据映射,以及一个数据特征值队列。5.如权利要求4所述的方法,其特征在于:所述数据特征值队列采用LRU算法管理缓存数据。6.如权利要求1所述的方法,其特征在于,步骤3)所述动态调节各级缓存容器的容量值的计算公式为:HitrateiHitcounti/Sizei;SizeNewi=Hitratei*Right*Sizei;其中,Hitratei为第i级缓存容器的命中率;Hitcounti为第i级缓存容器的命中次数;Sizei为第i级缓存容器。
5、的能存储数据的个数;Right表示权数;Capacity为总的存储空间的大小;LimitUpi为第i级缓存容器能存储数据尺寸的上界;SizeNewi为第i级缓存容器调节后的能存储数据的个数。7.如权利要求1所述的方法,其特征在于:在以数据尺寸为阀值的所述多级缓存容器基础上构建N维缓存结构,其中N2。8.如权利要求7所述的方法,其特征在于:在以数据尺寸为阀值的所述多级缓存容器基础上,将从数据中心获取数据的查询时间作为另一个阀值构建二维缓存结构,其中查询时间越长的数据在缓存中保留的时间越长。9.如权利要求1所述的方法,其特征在于:在配置文件中设定各级缓存容器的存储层级、容器阀值和容器容量。10.如。
6、权利要求1所述的方法,其特征在于:在配置文件中配置是否启动调整容器容量功能以及如何触动调整容器容量功能,以实现容量调整的自组织。权 利 要 求 书CN 103077125 A1/5页3一种高效利用存储空间的自适应自组织塔式缓存方法技术领域0001 本发明属于计算机存储技术领域,涉及一种缓存方法,具体涉及一种合理分配和高效利用存储空间的自适应自组织塔式缓存方法。背景技术0002 对于流行的异构系统而言,缓存是缓解客户端和服务端速度差异的一种普遍采用的技术,如图1所示,其原理就是把从数据中心获取的数据发给客户端的同时,把它在服务端(或专门的缓存服务上)的内存中缓存起来,当接收到符合特征的请求后,直。
7、接从缓存中取出数据返回给客户端,避免再次进行检索,以高速地响应用户的请求。但是单一的缓存不能很好地利用内存空间。以缓存数据列表为例,假设缓存有100M空间,缓存100个列表数据,如果列表数据平均大于1M,显然会造成空间不足的问题;如果列表数据平均小于1M,则缓存空间没有充分利用。这种情况下,通常的做法是不指定能缓存数据的个数,按数据的大小来缓存数据,这为缓存的管理带来难度。0003 在存储领域,多级缓存也是一种成熟的技术,它主要是利用不同的物理介质的速度差异特性而构建,将使用最频繁的数据或指令存储在最快的缓存中,以此来获取系统整体响应速度的提升。另一种是基于不同的数据而构建不同的缓存,以方便管。
8、理,如发明专利“基于数据内容的三维空间数据自适应多级缓存系统”(专利号:200910063371.3)所述。但因数据内容大小不一、尺寸难以估计,现有的多级缓存方法并不能充分利用存储空间。发明内容0004 本发明的目的在于针对上述问题,提出一种高效利用存储空间的自适应自组织塔式缓存方法,可以自动根据数据自身的尺寸选择合适的缓存,并通过自动调节缓存的容量来最大化缓存的命中率,具有自适应性和自组织性。0005 本发明采用的是多级缓存,多级缓存是指按待存数据的尺寸为阀值来分级,各级缓存只能保存尺寸在一定范围内的数据,缓存的层级(缓存的个数)没有限制,缓存数据的内容不加区分;这样使有限的空间能缓存更多的。
9、数据,达到空间利用的最大化。0006 具体来说,本发明采用的技术方案是:0007 一种自适应自组织塔式缓存方法,其步骤包括:0008 1)在缓存服务器上建立以数据尺寸为阀值的多级缓存容器,各级缓存容器串联成一个数组,构成塔式缓存结构;0009 2)所述缓存服务器从数据中心接收数据,根据接收的数据的大小自动选择合适的缓存容器进行存储;0010 3)在保持存储空间容量总量不变的前提下,根据各级缓存容器在指定时间段内的命中率动态调节各级缓存容器的容量值,使命中率越高的缓存容器的容量越大。0011 进一步地,本发明可以根据缓存的点击率来设定各级缓存容器的访问优先级,点击率越高优先级越高,这样在访问缓存。
10、数据时,就可以按优先级为序来遍历各级缓存容器,说 明 书CN 103077125 A2/5页4从概率上缩短在缓存中查找的时间,使查询缓存的效率最大化。如果缓存的总容量很大,缓存的效率成瓶颈时,可以考虑运用此改进方案。0012 上面所描述的缓存结构可以看成是由数据的尺寸为阀值的一维结构对外提供统一的数据获取接口,隐藏数据存储实现细节。进一步的,本发明可以在以数据尺寸为阀值的多级缓存容器基础上构建N维缓存结构,其中N2,并对外隐藏数据存储的细节,提供统一的访问接口。比如可以在此基础上构建二维的结构,如将从数据中心获取数据的查询时间作为另一个阀值构建二维结构,查询时间越长的数据在缓存中保留的时间也越。
11、长。同理可以同样的原理构建三维,四维甚至更多维的结构。0013 本发明所述的塔式是指各级缓存的容量按命中率成比例分配,命中率越高,缓存的数据个数越多。本发明所述的自适应有三个方面的含义:一是缓存数据时,自动根据数据自身的尺寸选择合适的缓存,保证一个新数据只能进一个缓存;二是当缓存的容量达到上限时,自动将最近最少访问的数据清除出缓存;三是从缓存中获取数据时,自动判断数据保存的位置(数据保存在哪一级缓存中),提供统一的访问接口,对用户隐藏细节。本发明所述的自组织是指各级缓存的容量可以动态进行调节,根据实时采集到的命中率,在一定的触发条件下,保证缓存空间总量不变的前提下,使各级缓存容量调节到最佳状态。
12、,以使整个缓存有最大的命中率。0014 本发明的的自适应自组织塔式缓存方法,可以在同质存储介质、同质数据的前提下,自动根据数据自身的尺寸选择合适的缓存,并通过自动调节缓存的容量来最大化缓存的命中率,具有自适应性自组织性,对外提供统一的访问接口,可以实现对存储空间的高效利用。附图说明0015 图1是基于缓存技术的数据调用示意图;0016 图2是实施例中塔式缓存结构示意图;0017 图3是实施例中将从数据中心获取的数据添加到缓存的流程图;0018 图4是实施例中从缓存中获取数据的流程图;0019 图5是实施例中调整各级缓存容量大小的流程图。具体实施方式0020 下面通过具体实施例,并配合附图,对本。
13、发明做进一步的说明。0021 图2是本发明的塔式缓存的结构示意图,将大小不等的数据按其大小分别存放在对应的缓存中,对外提供统一的访问接口,每一级缓存的容量可以自动调节。塔式缓存数据结构由一系列相互关联的缓存容器构成,每一个容器能容纳的数据的尺寸,以及数据的个数构成塔状。可以在配置文件中设定各级缓存容器的存储策略:包括:0022 a)缓存容器(Container):存储数据的容器;0023 b)存储层级(Level):结构中包含的缓存容器的个数;0024 c)容器阀值(Limit):每一级容器能存储数据大小的上限和下限:0025 容器阀值上界(LimitUp):每一级容器能存储数据大小的上限,同。
14、时是下一级缓存的下界;容器阀值下界(LimitDown):每一级容器能存储数据大小的下限,同时是上一级缓说 明 书CN 103077125 A3/5页5存的上界;0026 d)容器容量(Size):每一级容器能存储数据的个数。0027 上述缓存结构是一种自适应的存储结构。当缓存服务器从数据中心收到新数据后,根据数据的大小自动选择合适的缓存容器进行存储。对外提供服务的方式是根据查询特征值(查询条件),在各级缓存中查找,如果有,则命中,返回给用户,同时把该特征值移动到队尾;如果各级缓存中都没有查到,则从数据中心上提取,返回给调用方,同时把数据保存在相应大小的缓存容器中,供后续的查询使用。0028 。
15、上述缓存结构可以根据可利用的存储空间的大小(Capacity)进行精确的容量规划,既不浪费空间,又不至于造成内存漏洞等问题发生。其存储空间占用公式为:0029 0030 其中,Capacity为总的存储空间的大小;LimitUpi为第i级缓存容器能存储数据尺寸的上界;Sizei为第i级缓存容器的能存储数据的个数;Level为缓存容器的个数;表示各级缓存容器最大存储量的和。0031 上述缓存结构对外提供统一的数据获取接口getData(key);隐藏数据存储实现细节,从用户的角度来看,数据是从数据中心获取还是从缓存中获取,在调用方式上没有任何差别,保证了对用户的透明性。0032 上述缓存结构也是。
16、一种自组织的存储结构,为了保证最高的命中率,在运行过程中,根据各缓存容器在指定时间段内的命中率(Hitratei)来动态的调节各级缓存新的容量值(SizeNewi);其计算公式如下:0033 HitrateiHitcounti/Sizei(2)0034 0035 SizeNewi=Hitratei*Right*Sizei(4)0036 其中,Hitratei为第i级缓存容器的命中率;Hitcounti为第i级缓存容器的命中次数;Sizei为第i级缓存容器的能存储数据的个数;Right表示权(或者调节系数);Capacity为总的存储空间的大小;LimitUpi为第i级缓存容器能存储数据尺寸的上。
17、界;SizeNewi为第i级缓存容器调节后的能存储数据的个数。0037 经过一段时间的运行后,在保持存储空间容量总量不变的前提下,使命中率越高的容器的容量越大,这样就能始终保证缓存有最大的命中率。0038 上述塔式缓存结构具有四种操作,下面进行具体的说明:0039 (1)结构初始化0040 从配置文件中读取初始化参数,初始化结构的缓存容器的层级数(Level),各级容器的存储数据规模的上界(如能存储的List的记录条数的最大值,LimitUp),各级容器能存储数据的个数(如能存储的List的个数,Size)。0041 每个缓存容器含有一个数据映射(Map)和一个数据的特征值队列(Queue),。
18、以及数据上界和容量(即上面所述的各级容器能存储数据的个数)两个属性,每一级缓存容器能存储数据大小的上界同时也是下一级缓存容器能存储数据大小的下界。该映射用于保存数说 明 书CN 103077125 A4/5页6据的键值对,“键”就是数据的特征值,“值”就是数据本身;该特征值队列用于采用LRU算法(LRU算法,Least Recently Use,最近最少使用算法)来管理缓存的数据。0042 将各级容器串联起来组成一个数组,就构成了塔式缓存结构。0043 (2)添加数据到缓存0044 图3是添加数据到缓存的流程图,其详细步骤如下:0045 A.将从数据中心获取的数据(如从数据库中查询出的值列表,。
19、Value)和数据的特征(如查询条件,Key)组装成结构Data,将迭代变量i(表示第i级缓存容器)初始化为0;0046 B.判断获取数据的规模(Data.size)是否小于当前容器的上界(LimitUp);如果否,继续与下个容器进行比较;直到条件成立,进行下一步骤;0047 C.判断当前容器包含的数据个数(Count)是否小于容器的容量(Size);如果否,进入D步骤;如果是,进入E步骤;0048 D.从队列中删除队首,从映射中删除队首特征值对应的数据值,转到C步骤,当前容器的数据个数减一;其操作如下所示:0049 删除当前缓存容器队列头,把特征值赋给Key:Key=Cachei.quequ。
20、e.pop();0050 移除当前缓存容器映射中特征值为Key的数据:Cachei.map.remove(key);0051 当前容器的数据个数减一:Cachei.count-;0052 E.将数据添加到映射;将数据的特征值添加到队尾,容器数据个数加一。其操作如下所示;0053 将查询到的数据和特征值添加到当前缓存容器的映射中:Cachei.Map.add(Data.key,Data.value);0054 将查询特征值添加到当前缓存容器的队列的队尾:Cachei.queue.add(Data.key);0055 当前容器的数据个数加一:Cachei.count+。0056 (3)从缓存中查找。
21、和获取数据0057 图4是从缓存中查找和获取数据的流程图,其详细步骤如下:0058 A.从前台接收从缓存中查询的请求,将迭代变量置为0;0059 B.在当前缓存容器的队列中判断是否包含查询特征值(Key),如果否,迭代变量加1,继续判断下一级缓存,直到条件成立,或者遍历完所有的缓存;如果是,则进入到D步骤;0060 C.将当前缓存的命中记数(Hitcount)加1;该操作的目的是记录命中次数,为调整缓存的容量作数据准备;从缓存的映射中获取数据值。其操作如下所示:0061 将当前缓存的命中记数(Hitcount)加1:Cachei.hitcount+;0062 从当前缓存的映射中获取数据值:Da。
22、ta.value=Cachei.map.get(key);0063 把查询特征值赋给数据对象的Key属性:Data.key=key;0064 D.把查询特征值移动到缓存队列的队尾;该操作的目的是使最新命中的数据保持最大的活性(即LRU原则:最近最后被访问,最先移除),使最频繁访问的数据更长时间地驻留内存,最少访问的数据及时地清出缓存。其操作如下所示:0065 从当前缓存容器的队列中移除查询特征值:Cachei.queque.remove(key);0066 把查询特征值添加到队列的队尾:Cachei.queue.add(key);说 明 书CN 103077125 A5/5页70067 E.如。
23、果缓存中查询到了数据,则把数据返回给调用方,否则从数据中心中去查询获取数据。0068 (4)调整容器容量0069 图5是调整容器容量的流程图,其详细步骤如下:0070 A.初始化整个缓存的容量总量(Capacity)、临时缓存总量(CapacityTemp)的值为0;如果在配置文件中指明了容量总量,则可不计算该值;初始化迭代变量值为0。其操作如下所示:0071 初始化迭代变量值为0:i=0;0072 初始化整个缓存的容量总量为0:Capacity=0;0073 初始化临时缓存总量的值为0:CapacityTemp=0;0074 B.迭代每一个缓存容器,计算每一个缓存的命中率;累计计算缓存容量总。
24、量;累计计算每个缓存乘以命中率且未加权的容量总量;其操作如下所示:0075 命中率(Hitrate)命中个数(Hitcount)/缓存容量(Size)即:0076 Hitratei=Cachei.Hitcount/Cachei.size;0077 未加权缓存容量(CapacityTemp)各缓存容量*命中率,即:0078 Capacity=Capacity+Cachei.LimitUp*Cachei.size;0079 未加权缓存容量之和各级缓存未加权缓存容量之和,即:0080 CapacityTemp=CapacityTemp+Hitratei*Cachei.LimitUp*Cachei.s。
25、ize;0081 C.迭代完后,计算加权数;计算权数的目的是保持调整前后缓存容量问题不变。其操作如下所示:0082 权数(Right)容量总量(Capacity)/未加权缓存容量总量,即0083 Right=Capacity/CapacityTemp;0084 置迭代变量为0,即i=0;0085 D.再一次迭代给每一级缓存调整容量值。其操作为:0086 调整后的容量(Size)点击率*原容量*权数,即0087 Cachei.size=Hitratei*Cachei.size*Right。0088 经过以上操作后,会使各容器的容量与命中率成正比例,以使整个缓存有最大的命中率。0089 上述方案中,是否启动调整容器容量功能,以及如何触动调整容器容量功能可以在配置文件进行配置,使之按预定的策略实现容量调整的自组织。0090 以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求所述为准。说 明 书CN 103077125 A1/5页8图1说 明 书 附 图CN 103077125 A2/5页9图2说 明 书 附 图CN 103077125 A3/5页10图3说 明 书 附 图CN 103077125 A10。