CN115562592A - 一种基于云对象存储的内存和磁盘混合缓存方法 - Google Patents
一种基于云对象存储的内存和磁盘混合缓存方法 Download PDFInfo
- Publication number
- CN115562592A CN115562592A CN202211367490.XA CN202211367490A CN115562592A CN 115562592 A CN115562592 A CN 115562592A CN 202211367490 A CN202211367490 A CN 202211367490A CN 115562592 A CN115562592 A CN 115562592A
- Authority
- CN
- China
- Prior art keywords
- cache
- data
- disk
- memory
- threshold
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于云对象存储的内存和磁盘混合缓存方法,其特点是内存缓存和磁盘缓存对应的缓存存储粒度和结构的设计,基于自适应的阈值限制的LRU缓存策略的改进,通过混合缓存对存放在云对象存储上的数据进行缓存,并利用缓存对云对象存储上的数据进行高效的数据访问。本发明与现有技术相比具有优先选择收益更高的数据块放入缓存,大大提升了缓存命中率,利用缓存极大的减少了查询云对象存储上数据的时间,减少了访问云对象存储的次数,节省更多数据访问时间,方法简便,使用效果好,具有广泛应用的前景。
Description
技术领域
本发明涉及数据存储技术领域,尤其是一种面向OLAP负载的基于云对象存储的内存和磁盘混合缓存方法。
背景技术
云对象存储(Cloud Object Storage)作为存储系统已经被广泛应用于各种大型数据仓库和数据湖中。云对象存储提供类似于KV系统的简洁接口,支持的操作有PUT、GET和DELETE等,其特点是仅支持对数据对象进行追加写入,而不能对已经写入的部分进行修改。大部分云服务提供商都提供了对象存储服务,比如有亚马逊网络服务S3、Microsoft AzureBlob存储、阿里云的OSS以及腾讯云的COS等,这些对象存储服务都支持S3协议。云对象存储有着成本低廉,可扩展性强,存储资源随用随付的优点。但是,由于数据获取依赖于网络传输,它的延迟要比本地磁盘高很多,要利用本地内存和磁盘来加速对云对象存储上数据的获取。
在多层次存储架构上,系统一般都利用缓存或者分层策略来提升整体的性能。在分层策略中,需要将冷热数据分层存储,并根据负载来动态地迁移冷热数据。一般对于缓存的研究往往都是基于DRAM/SSD这两个存储层次,而分层策略一般使用在两个持久化存储层之间。随着硬件的快速发展,现代的存储层次结构变得更加复杂,比如持久化内存以及云对象存储的加入,因此在这种多层次的存储架构之下,传统的缓存或分层策略不一定是最有效的,对存储的管理策略应当重新考虑。
在缓存策略方面,通用的缓存替换策略如LRU、LFU等的研究历史悠久,有很多工作在基础的LRU算法上做了改进,其中比较经典的有LIRS,LIRS通过记录数据块访问历史信息,更能准确地区分冷热数据,ARC有一个LRU链表和一个LFU链表,并且可以根据负载来动态变化两个链表长度分配,DLIRS改进了LIRS使得其能适应工作负载的变化。还有从比较新颖的角度提出的LHD算法,它提出了命中密度的概念,通过历史的负载数据进行建模预测对象的命中密度,而不是依靠隐含的假设,比如LRU算法认为最近使用的对象更有价值。也有一些缓存策略会根据具体的存储架构做调整,分别设计了KV、KP缓存以及块缓存,设计了多级缓存并能够根据工作负载变化动态调整各个缓存大小的分配。
然而在数据库领域中,最为常用的缓存算法是LRU,因为LRU在工程实现更为简单且标准化。但是LRU并不适用于以大数据量的扫描为主的OLAP场景。在OLAP场景下,数据的存储不像行存那样以固定大小的page为单位,往往是单个列作为文件单独存储,而由于列之间的所在分区不同、数据类型不同等特点,文件之间的大小也存在很大的不同。一次大文件的数据扫描可能冲刷整个缓存区,以至于缓存很难发挥作用。因此现有缓存算法并不能完全适用于OLAP型的负载,要想通过缓存来实现高效的数据访问还有待进一步研究。发明内容
本发明的目的是针对现有技术的不足而设计的一种基于云对象存储的内存和磁盘混合缓存方法,采用内存与磁盘中缓存存储粒度结合的结构设计,以及基于自适应阈值限制的LRU缓存方法,以云对象存储作为存储层,将存放在云对象存储上的数据进行混合缓存,通过对LRU阈值的限制,优先存放数据量更小的数据项,从而达到更高的缓存命中率,以及节省更多的查询时间,更好的适应OLAP负载下列存数据库对云对象存储上高效的数据访问,方法简便,使用效果好,能够优先选择收益更高的数据块放入缓存,提升了缓存命中率,节省更多数据访问时间,提高工作效率。
本发明的目的是这样实现的:一种基于云对象存储的内存和磁盘混合缓存方法,其特点是采用基于内存和磁盘的混合缓存,以及内存与磁盘中缓存存储粒度结合的结构设计方法,以及对基于自适应的阈值限制的LRU缓存策略的改进,通过混合缓存管理器来对存放在云对象存储上的数据进行缓存,以适应OLAP负载下列存数据库对云对象存储上高效的数据访问。
所述内存和磁盘中缓存存储粒度结合的结构设计包括:
A1:内存缓存的缓存内容存储在内存中,由双向链表和哈希表实现LRU,内存缓存的存储粒度为数据文件的一个区间。
A2:磁盘缓存也是由双向链表和哈希表组成的,磁盘缓存的存储粒度为数据文件的一个区间。缓存文件存放在指定缓存目录下,重启后数据库会查找缓存目录,将磁盘缓存的一些元信息读入内存。
A3:内存缓存和磁盘缓存的缓存项的划分方式和数据访问的负载相关,为了保证缓存项之间不包含范围上的重叠,需要根据数据访问的顺序对数据文件进行切分,以此作为划分缓存项的依据。
所述内存与磁盘中缓存存储粒度的混合缓存架构设计的存储层是一个DRAM/SSD/Cloud Object Storage的三层存储结构,云对象存储作为存储层,原始的数据文件存放在云对象存储上,内存和磁盘作为缓存数据文件的性能层。
所述基于自适应的阈值的LRU缓存策略的改进包括:
B1:当访问数据范围小于内存缓存阈值时,数据会被存入内存缓存,如果大于内存缓存阈值,不会被保留在内存中。
B2:当访问数据范围小于磁盘缓存阈值时,数据会被作为单独的磁盘文件存储在本地磁盘,如果大于磁盘缓存阈值,数据不会被存储在本地磁盘中。
B3:内存缓存阈值和磁盘缓存阈值都需要根据负载的变化而进行实时动态调整。当负载中的数据访问普遍大于阈值时,阈值应当适当调整变大;反之当负载中的数据访问普遍小于阈值时,此时存在频繁的换进换出,阈值应当调整变小,这个阈值的调整将通过ghost list来自动实现。其中,一个ghost list A用于存放由于大于阈值而未被放入缓存的数据项,另一个ghost list B用于存放缓存满了被逐出的数据项。当访问命中ghostlist A中的数据时,较大的频繁数据项没能被放入缓存,说明阈值应适当调整变大;当访问命中ghost list B中的数据时,说明较小的频繁数据项被逐出,阈值应适当调整变小。
所述通过混合缓存对存放在云对象存储上的数据进行缓存以及利用缓存对云对象存储上的数据进行高效的数据访问,包括如下步骤:
C1:OLAP型负载通常是以对列数据文件的范围访问,文件范围的大小相差比较大;当读请求到达时,判断请求的文件和范围是否有在内存缓存中命中。
C2:如果请求的范围在内存缓存中完全命中,则立即返回相应的数据,如果在内存缓存中部分命中,即与现有的内存缓存有部分重叠,需要去磁盘缓存查找不重叠的部分;如果不命中,则去磁盘缓存查找所需的范围。
C3:对于同一文件,请求的范围需要和现有的磁盘缓存考虑重叠情况,已经被缓存的部分则从磁盘文件加载数据,只有未被缓存的部分需要从云对象存储上下载。
C4:当有数据段需要从云对象存储上下载时,如果数据段的大小在磁盘缓存的阈值内,那么这个数据段将被作为缓存项放入磁盘缓存,产生相应的磁盘文件;如果这个范围在内存缓存的阈值内,那么数据段将被放入内存缓存。
C5:内存缓存满时,通过LRU算法逐出;磁盘缓存满时,同样通过LRU算法逐出。
本发明与现有技术相比具有能够优先选择收益更高的数据块放入缓存,提升了缓存命中率,能够节省更多数据访问时间。由于云对象存储高延迟高吞吐的特性,大小相差好几个数量级的两个数据项,数据获取时间可能只相差两倍。因此,在有限的缓存容量下,缓存小的数据项更为划算,本发明通过对LRU阈值的限制,优先存放数据量更小的数据项,从而达到更高的缓存命中率以及节省更多的查询时间。本发明还通过设计ghost list,实现了阈值能够根据负载进行自动调整,缓存的准入阈值不需要事先进行人为设定。
附图说明
图1为本发明的混合缓存架构示意图;
图2为缓存项划分示意图;
图3为请求的数据范围小于阈值时缓存中数据项的变化示意图;
图4为请求的数据范围大于阈值时缓存中数据项的变化示意图。
具体实施方式
下面以缓存的具体实施例对本发明做进一步的详细说明。
参阅图1,存储层是一个DRAM/SSD/Cloud Object Storage的三层存储结构,云对象存储(Cloud Object Storage)作为存储层,原始的数据文件存放在云对象存储上,内存(DRAM)和磁盘(SSD)作为缓存数据文件的性能层。内存和磁盘缓存分别有一个阈值,用于控制缓存的准入。下面以图1中的数据访问序列为例进行详细说明。
对于query1来说,它访问的是文件A上的[0, 2]范围的数据,也就是图中①对应的数据段,这个数据先从云对象存储被读入到内存中,数据段①的大小小于磁盘缓存阈值,因此它会被放入到磁盘缓存的LRU列表中。同时数据段①也小于内存缓存阈值,它也会被放入到内存缓存的LRU列表中。query2和query1的情况类似,访问的也是文件A上的数据。对于query3来说,数据段③小于磁盘缓存阈值,可以被放入到磁盘缓存的LRU的列表中,但它大于内存缓存的阈值,因此它不会被放入内存缓存。在后续的访问中,query4对应的[3, 5]数据段被同时放入内存缓存和磁盘缓存,而query5对应的[3, 6]的数据段的一部分[3, 5]已经被缓存,因此只需要再缓存[5, 6]数据段,也就是对应的数据段⑤。在实际应用中对同一个文件的访问范围的重叠情况可能更为复杂,将会在后续讨论更多详细的重叠情况的处理。
参阅图2,该图显示了缓存项的范围是如何被划分的。列存的存储有两种主要方式,一种是把所有列存在一起存成一个文件,另一种是每个列都分开存储,存成单独的文件。这两种存储方式不需要分开讨论,都是以数据文件的一段范围作为缓存单位,对这两种存储方式均适用。在具体的访问中,对同一数据文件的访问的范围之间可能会存在重叠,为了使得同一数据文件之间的缓存项不会发生重叠,根据数据访问的顺序对数据文件进行切分,以此作为划分缓存项的依据。
例如,有一个对某一文件的数据访问,offset从left_0开始,大小为right_0 -left_0,即访问范围为[left_0, right_0],将该访问范围与同一数据文件的现有的缓存项的重叠情况进行如下的讨论:
情况1:访问范围和现有的缓存项没有重叠,此时缓存项和访问范围一致,新生成一个[left_0, right_0]的缓存项并从存储层加载。
情况2:访问范围和现有的缓存项有重叠,其重叠情况如图2所示,这种情况下,访问范围的offset在现有缓存项的左侧,会新生成一个[left_0, left_1]的缓存项,这段数据会从存储层加载上来,最后返回的是由[left_0, left_1]和[left_1, right_0]这两个缓存项组成的数据段。
情况3:访问范围和现有的缓存项有重叠,重叠情况如图2所示,这种情况下,访问范围的左侧边界包含在现有缓存项内,新生成一个[right_1, right_0]的缓存项,并从存储层加载这段数据,最后返回的是由[left_0, right_1]和[right_1, right_0]组成的数据段。
情况4:访问范围和现有的缓存项有重叠,其重叠情况如图2所示,这种情况下,访问范围的前半部分和后半部分都和现有的两个缓存项分别重叠,在中间产生空洞。需要返回的数据段被划分为[left_0, right_1]、[right_1, left_2]和[left_2, right_0]这三段,返回的数据段是请求的数据段[right_1, left_2]。
情况5:访问范围和现有的缓存项完全重叠,其重叠情况如图2所示,这种情况下不产生任何新的缓存项。返回已有的缓存项的中的[left_0, right_0]这一段数据。
参阅图3~图4,分别说明了当请求的数据范围小于阈值和大于阈值时缓存中的数据项是如何变化的,并且阈值会根据数据项的变化而自动调整。由于内存缓存和磁盘缓存采用的同一套缓存策略,这里以内存缓存为例来说明内存缓存的阈值如何随着负载的变化而自适应地更改。LRU缓存配备有两个ghost list,一个用于存放被LRU驱逐出的项,这里的项被认为是数据大小低于阈值的项,另一个用于存放未放入LRU的项,这里的项被认为是数据大小高于阈值的项。初始时,阈值为无穷大,此时所有的数据项都会被允许放入缓存中,因此缓存一开始的表现和普通的LRU一致。当缓存满了,需要驱逐数据项时,按照LRU的方式驱逐出缓存项,被驱逐的缓存项放入相应的ghost list中,ghost list也是一个LRU列表,存放的是Key和数据范围,它并不会存放真实的数据。利用ghost list实现对阈值的自动调整,具体情况分类如下所述:
情况1:访问数据范围小于阈值,且缓存命中,缓存项被移动到LRU队列尾部。
情况2:访问数据范围小于阈值,缓存不命中,且未命中ghost list,如图3 中请求的数据段为Key值为K4的文件,且范围为[0, 2],该数据段满足情况2。该数据段从存储层读入到内存中,存储为缓存项放入到LRU队列尾部。如果LRU队列满了,从LRU头部选择数据项进行逐出,并将其Key和数据范围存放在被逐出项的ghost list的尾部,如果ghost list满了,选择ghost list头部的数据项进行逐出。
情况3:访问数据范围小于阈值,缓存不命中且命中ghost list。将ghost list相应的项删除。数据读入以及后续对LRU队列以及ghost list的操作同情况2。由于命中了被逐出项的ghost list,说明此时的阈值过高,需要降低这个阈值以减少大的数据块的访问冲刷缓冲区的可能,这样内存中可以存放更多数据块较小的频繁项,提高缓存命中率。
情况4:访问数据范围大于阈值,未命中ghost list,如图4中请求的数据段为Key值为K5的文件,且范围为[0, 10],该数据段满足情况4。此时会生成一个包含Key和数据范围的数据项,放到未放入缓存的ghost list的尾部,如果ghost list满了,位于ghost list头部的数据项将被逐出。
情况5:访问数据范围大于阈值,命中ghost list。将ghost list相应的项删除,命中了未放入缓存的ghost list,说明此时阈值过低,以至于数据大小较大的频繁项无法被放入缓存,所以需要升高这个阈值。
以上只是对本发明做进一步说明,并非用以限制本专利,凡为本发明等效实施,均应包含于本专利的权利要求范围之内。
Claims (5)
1.一种基于云对象存储的内存和磁盘混合缓存方法,其特征在于,采用内存与磁盘中缓存存储粒度的混合缓存架构设计,以及基于自适应阈值限制的LRU缓存方法,对存放在云对象存储上的数据进行混合缓存,并通过对LRU阈值的限制,优先存放数据量更小的数据项,从而达到更高的缓存命中率,利用混合缓存适应OLAP负载下列存数据库对云对象存储上高效的数据访问。
2. 根据权利要求1所述基于云对象存储的内存和磁盘混合缓存方法,其特征在于所述内存与磁盘中缓存存储粒度的混合缓存架构设计的存储层是一个DRAM/SSD/Cloud ObjectStorage的三层存储结构,云对象存储作为存储层,原始的数据文件存放在云对象存储上,内存和磁盘作为缓存数据文件的性能层,混合缓存架构的具体设计包括:
A1:内存缓存的缓存内容存储在内存中,由双向链表和哈希表实现LRU,所述内存缓存的存储粒度为数据文件的一个区间;
A2:将缓存文件存放在指定缓存目录下,重启后数据库会查找缓存目录,将磁盘缓存的一些元信息读入内存,所述磁盘缓存由双向链表和哈希表组成,其存储粒度为数据文件的一个区间;
A3:根据数据访问的顺序对数据文件进行内存缓存和磁盘缓存的缓存项划分。
3.根据权利要求1所述基于云对象存储的内存和磁盘混合缓存方法,其特征在于,所述基于自适应阈值限制的LRU缓存方法具体包括:
B1:当访问数据范围小于内存缓存阈值时,数据被存入内存缓存;如大于内存缓存阈值,数据不被保留在内存;
B2:当访问数据范围小于磁盘缓存阈值时,数据被作为单独的磁盘文件存储在本地磁盘;如大于磁盘缓存阈值,数据不被存储在本地磁盘中;
B3:根据负载的变化实时动态调整内存缓存阈值和磁盘缓存阈值,当负载中的数据访问普遍大于阈值时,阈值应适当调整变大;反之当负载中的数据访问普遍小于阈值时,此时存在频繁的换进换出,阈值应调整变小。
4.根据权利要求1所述基于云对象存储的内存和磁盘混合缓存方法,其特征在于,所述利用混合缓存适应OLAP负载下列存数据库对云对象存储上高效的数据访问,具体包括如下步骤:
C1:OLAP型负载以对列数据文件的范围访问,当读请求到达时,判断请求文件和范围是否有在内存缓存中命中;
C2:如请求的范围在内存缓存中完全命中,则立即返回相应的数据;如部分命中,即与现有的内存缓存有部分重叠,则需要去磁盘缓存查找不重叠的部分;如不命中,则去磁盘缓存查找所需的范围;
C3:对于同一文件,已被缓存的部分则从磁盘文件加载数据,未被缓存的部分需要从云对象存储上下载;
C4:当有数据段需要从云对象存储上下载时,如数据段的大小在磁盘缓存的阈值内,那么这个数据段将被作为缓存项放入磁盘缓存,产生相应的磁盘文件;如数据段的大小在内存缓存的阈值内,则数据段被放入内存缓存;
C5:当内存缓存满时或磁盘缓存满时,则通过LRU算法逐出。
5.根据权利要求3所述基于云对象存储的内存和磁盘混合缓存方法,其特征在于,所述内存缓存阈值和磁盘缓存阈值的调整将通过ghost list来自动实现,其中ghost list A用于存放由于大于阈值而未被放入缓存的数据项, ghost list B用于存放缓存满了被逐出的数据项,当访问命中ghost list A中的数据时,较大的频繁数据项没能被放入缓存,说明阈值应适当调整变大;当访问命中ghost list B中的数据时,说明较小的频繁数据项被逐出,阈值应适当调整变小。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211367490.XA CN115562592A (zh) | 2022-11-03 | 2022-11-03 | 一种基于云对象存储的内存和磁盘混合缓存方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211367490.XA CN115562592A (zh) | 2022-11-03 | 2022-11-03 | 一种基于云对象存储的内存和磁盘混合缓存方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115562592A true CN115562592A (zh) | 2023-01-03 |
Family
ID=84769274
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211367490.XA Pending CN115562592A (zh) | 2022-11-03 | 2022-11-03 | 一种基于云对象存储的内存和磁盘混合缓存方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115562592A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116467353A (zh) * | 2023-06-12 | 2023-07-21 | 天翼云科技有限公司 | 一种基于lru差异化的自适应调节的缓存方法及系统 |
-
2022
- 2022-11-03 CN CN202211367490.XA patent/CN115562592A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116467353A (zh) * | 2023-06-12 | 2023-07-21 | 天翼云科技有限公司 | 一种基于lru差异化的自适应调节的缓存方法及系统 |
CN116467353B (zh) * | 2023-06-12 | 2023-10-10 | 天翼云科技有限公司 | 一种基于lru差异化的自适应调节的缓存方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104899156B (zh) | 一种面向大规模社交网络的图数据存储及查询方法 | |
CN103885728B (zh) | 一种基于固态盘的磁盘缓存系统 | |
CN111159066A (zh) | 一种动态调整的缓存数据管理及淘汰方法 | |
CN107066393A (zh) | 提高地址映射表中映射信息密度的方法 | |
CN105740164A (zh) | 支持缓存一致性的多核处理器、读写方法、装置及设备 | |
CN107943719B (zh) | 一种基于请求分类的闪存转换层控制方法 | |
CN109739780A (zh) | 基于页级映射的动态二级缓存闪存转换层地址映射方法 | |
CN102760101A (zh) | 一种基于ssd 的缓存管理方法及系统 | |
US20130290636A1 (en) | Managing memory | |
KR101297442B1 (ko) | 공간 지역성을 고려한 요구 기반 플래시 메모리 변환 계층을 포함하는 낸드 플래시 메모리 시스템 | |
CN106569959A (zh) | 一种基于ssd的缓存替换方法及系统 | |
CN110262982A (zh) | 一种固态硬盘地址映射的方法 | |
CN104598394A (zh) | 一种可动态分配的数据缓存方法及系统 | |
US5530834A (en) | Set-associative cache memory having an enhanced LRU replacement strategy | |
CN117056087B (zh) | 云数据中心混合内存优化方法、计算机装置及存储介质 | |
CN107562806B (zh) | 混合内存文件系统的自适应感知加速方法及系统 | |
CN107133369A (zh) | 一种基于redis过期键的分布式读共享缓存老化方法 | |
CN115562592A (zh) | 一种基于云对象存储的内存和磁盘混合缓存方法 | |
CN106909323B (zh) | 适用于dram/pram混合主存架构的页缓存方法及混合主存架构系统 | |
CN114063921B (zh) | 一种基于强化学习的固态硬盘映射记录缓存管理方法 | |
CN109002400B (zh) | 一种内容感知型计算机缓存管理系统及方法 | |
CN102354301A (zh) | 缓存分区方法 | |
CN112799590B (zh) | 一种针对在线主存储重删的差异化缓存方法 | |
CN108664217A (zh) | 一种降低固态盘存储系统写性能抖动的缓存方法及系统 | |
CN111787062B (zh) | 面向广域网络文件系统的自适应快速增量预读方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |