一种缓存管理方法与设备
技术领域
本申请涉及计算机领域,尤其涉及一种缓存管理技术。
背景技术
随着互联网的发展,各种计算引擎和应用***都对数据的管理提出了更高的要求,希望能对更多的数据进行访问,并且可以提高访问数据的速度。
目前,该领域采用的方案为:
一种是全内存哈希索引技术。该方案中,所有数据都缓存在内存,因此哈希索引数据量受内存大小限制,不能实现海量数据的索引。
另一种是磁盘哈希索引技术。该方案中,所有的数据都存储在磁盘上,虽然缓存了小部分数据及其哈希关键字在内存中,但是在索引查询时,大多数查询需要磁盘IO读操作,大大降低了查询访问的速度。
发明内容
本申请的目的是提供一种缓存管理方法与设备。
根据本申请的一个方面,提供了一种缓存管理方法,包括:
将每个数据块的第一索引信息与所述数据块存储于磁盘,其中,所述数据块在所述磁盘中的存储位置与所述第一索引信息相对应;
将所述磁盘中的所有第一索引信息写入相对应的缓存。
根据本申请的另一方面,还提供了一种缓存管理设备,包括:
第一装置,用于将每个数据块的第一索引信息与所述数据块存储于磁盘,其中,所述数据块在所述磁盘中的存储位置与所述第一索引信息相对应;
第二装置,用于将所述磁盘中的所有第一索引信息写入相对应的缓存。
与现有技术相比,本申请通过将每个数据块的第一索引信息与所述数据块存储于磁盘,并将所述磁盘中的所有第一索引信息写入相对应的缓存;从而,针对不同数据分块可以有多个索引信息,可查询数据量不再依赖于单个索引信息的取值范围,可访问数据量能够根据需要大幅度扩增,真正能够实现对海量数据的查询访问。而且,本申请的缓存中包括所有数据块的第一索引信息,从而使得查询关键字的匹配可在访问速度较快的缓存中进行,大大提高了查询速度。此外,本申请克服了须在缓存中统一存储数据及其关键字的技术偏见,本申请的缓存中优先存储所有数据块的第一索引信息,而各数据块存储于磁盘,必要时且缓存中有可用空间时才将对应数据块写入缓存;这使得在保持查询效率较高的同时,大幅降低了缓存空间需求。因此,将本方案植入对数据索引查找等操作有需求的计算引擎或者应用***时,用户即可快速访问海量数据,这将会对以获取海量数据为基础的即时数据统计、运算、分析等应用带来极大的便利。
进一步地,本申请中的查询关键字包括多个关键字时,将所述多个关键字组合生成一个组合关键字,仅通过一次函数运算就可以查询到相应记录,从而简化了对多个关键字分别运算、多层查询的步骤,进一步地简化了运算过程,提高了查询访问的效率。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出根据本申请一个方面的一种缓存管理的设备示意图;
图2示出根据本申请一个优选实施例的一种缓存管理的设备示意图;
图3示出根据本申请另一个方面的一种缓存管理的方法流程图;
图4示出根据本申请一个优选实施例的一种缓存管理的方法流程图。
图5示出根据本申请一个优选实施例的一种缓存管理设备的技术效果对比图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
图1示出根据本申请一个方面的一种缓存管理的设备示意图。缓存管理设备1包括第一装置101和第二装置102。
其中,第一装置101将每个数据块的第一索引信息与该数据块存储于磁盘,其中,该数据块在所述磁盘中的存储位置与该第一索引信息相对应;第二装置102将所述磁盘中的所有第一索引信息写入相对应的缓存。
具体地,缓存管理设备1的第一装置101将每个数据块的第一索引信息与该数据块存储于磁盘。所述数据块是使用缓存管理的上层应用***一次读取数据的单位,数据块的大小通常依据上层应用对数据访问的实际需要来配置。例如,应用层所需要读取的数据单位可以是表、列、区、块等。第一装置101通过函数计算将所述第一索引信息映射到相应的数据块在磁盘中的存储位置,使得磁盘中每一个第一索引信息都与其指向的数据块相对应,建立起多个索引,进而通过已知的第一索引信息就可以找到对应的数据块。其中,第一装置101中所述第一索引信息可以采用任意方式存入磁盘,只要该方式可以确保存储于磁盘中的第一索引信息后续可以顺利读入相应缓存即可,所述存储方式例如序列化存储,压缩存储、加密存储等等。第二装置102将所述磁盘中的所有第一索引信息写入相对应的缓存。在将所有数据块和其第一索引信息相对应地存入磁盘中后,再将所述第一索引信息全量写入与所述磁盘相对应的缓存,完成缓存中第一索引信息的初始化。
例如,第一装置101将数据块和其相对应的第一索引信息存入磁盘中时,存储的第一索引信息和相应的数据块之间通过函数映射相对应。如,对于数据块block1,其中包含的具体数据记录为value1,其第一索引信息为关键字key1,将key1作为自变量,通过函数f(x)进行计算,即可得到数据块对应的数据记录value1在磁盘中的存储位置。由此,磁盘中所述的第一索引信息与相应数据块之间就形成了函数映射关系,当已知某第一索引信息时,就可以依据此函数映射找到磁盘中对应的数据块的数据记录。
在此,缓存管理设备1第一装置101将每个数据块的第一索引信息与该数据块存储于磁盘,其中,该数据块在所述磁盘中的存储位置与该第一索引信息相对应。使得所管理的数据根据分块建立起了多层索引,比起数据没有分块时建立的单层索引,可查询数据量不再依赖于单个索引信息的取值范围限制,可查询数据量能够根据需要大幅度扩增,真正能够实现对海量数据的查询。
接着,第二装置102将所述磁盘中的所有第一索引信息写入相对应的缓存。所述的缓存包括一级缓存、二级缓存、三级缓存、超级缓存等多种能够快速存取数据的存储设备。该缓存与所述磁盘相对应。磁盘中存入了所有数据块的数据记录以及其相对应的第一索引信息,如,磁盘中存入数据块的数据记录value1,value2,value3,value4…,对应与第一索引信息key1,key2,key3,key4…,初始化缓存时,第二装置102将所有的第一索引信息key1,key2,key3,key4…从磁盘读入缓存。在此,缓存中包含的第一索引信息与磁盘中所记录的第一索引信息需要保持一致,即若磁盘中第一索引信息不变,缓存中的相应的第一索引信息也不变;若磁盘中第一索引信息变化,缓存中的第一索引信息也会相应更新变化。
在此,初始化缓存时,存入缓存的是磁盘中所有的第一索引信息,而磁盘中与该第一索引信息相对应的数据记录可以在后续的实际应用中根据需要更新存入所述缓存中。
在此,缓存管理设备1的第二装置102将所述磁盘中的所有第一索引信息写入相对应的缓存。缓存管理的一个经典使用场景是查询关键字是否在建立的索引中,由于所述缓存中包含了全部数据块的第一索引信息,从而使得查询关键字匹配操作全部在读取速度较快的缓存中进行,不需要进入读取速度较慢的磁盘来操作。大大提高了查询的速度。同时,本申请中各数据块存储于磁盘,必要时且缓存中有可用空间时才将对应数据块写入缓存,从而在保证高效查询的同时,降低了对空间缓存的需求,提高了缓存利用率。
优选地,所述第一装置101将每个数据块的第一索引信息与该数据块存储于磁盘包括:
-对原始数据进行分块,获得多个数据块及每个数据块的块属性信息;
-确定每个数据块的第一索引信息;
-将每个数据块的第一索引信息与该数据块存储于磁盘,其中,该数据块在所述磁盘中的存储位置与该第一索引信息相对应。
具体地,缓存管理设备1的第一装置101对原始数据进行分块,数据块的划分主要是依据上层应用中对数据查询访问的实际需要来配置的。例如,可以按照表、分区、列、块等数据存储的结构层次进行数据划分,对于原始数据的划分包括单一的层次的划分,如按照块(block)划分为block1,block2,block3,block4…;也包括多层次的划分,如按照块(block)划分为block1,block2,block3,block4…,进一步将各个块归属为上层结构,如将所述block1,block2归属于上层结构分区partition1,将所述block3,block4归属于上层结构分区partition2…,再进一步将各个分区归属为上层结构,如将所述分区partition1和partition2归属为列column1…。由此,数据块的划分体现出一种多层次结构,在实际管理操作中,比如数据查询中,依据这种分层次分块的结构能够实现快速查找。在此,对于每一个数据块确定其块属性信息,所述块属性信息包括,但不限于是对应数据块的相关标识信息,例如,可以是对应的表序号,分区序号,列序号,块序号等。
其次,所述第一装置101进一步确定每个数据块的第一索引信息。所述第一索引信息就是对相应数据块所包含信息内容概括和集中化的表述,能够直接指向相应数据块,通常由索引关键字确定,例如数据块block1对应第一索引信息为关键字key1。
再次,所述第一装置101将每个数据块的第一索引信息与该数据块存储于磁盘,其中,该数据块在所述磁盘中的存储位置与该第一索引信息相对应。在磁盘中,存储的第一索引信息和相应的数据块之间通过函数映射相对应。例如,当已知某个数据块的第一索引信息,即可通过确定的函数计算出相应数据块在磁盘中的存储位置,从而找到该数据块信息。其中,所述的第一索引信息与相应数据块之间就形成了函数映射关系。优选地,所述函数为哈希函数,第一索引信息为哈希关键字。例如,数据块block1,其所包含的数据记录为value1,该数据记录对应的第一索引信息为哈希关键字hashmap1.key,将hashmap1.key作为自变量,通过哈希函数h(x)计算出值,即为数据记录value1在哈希表中的存储位置,由此,便由第一索引信息找到了磁盘中相应的数据块的数据记录。
本领域技术人员应能理解,上述通过确定的哈希函数计算出相应数据块在磁盘中的存储位置仅为举例,其他函数如可适用本申请,也应包含在本申请的保护范围以内,并在此以引用方式包含于此。
在此,缓存管理设备1第一装置101将每个数据块的第一索引信息与该数据块存储于磁盘。使得依据数据的分块建立起多层索引,比起数据没有分块时建立的单层索引,可查询数据量不再依赖于单个索引信息的取值范围限制,可访问数据量能够根据需要大幅度扩增。
更优选地,所述多个数据块的第一索引信息按序列化方式存储于所述磁盘。
具体地,为了便于在后续步骤将所述磁盘中第一索引信息读入缓存时能够快速顺利操作,所述第一装置101需要按照一定方式将数据块的第一索引信息存入磁盘中。与此同时,与所述第一索引信息相对应的数据块也会存储于所述磁盘中。所述序列化存储方式包括第一索引信息按顺序连续依次存储。例如需要存入磁盘的第一索引信息为关键字key1、key2、key3…,对应的数据块对应的数据记录为value1、value2、value3…。当将第一索引信息存入磁盘时,则依照key1-key2-key3……的顺序连续存储,相邻关键字之间并不会***所述数据块对应的具体数据记录value1、value2、value3…,所述序列化存储方式使得所述第一索引信息和其对应的数据块在磁盘中是分开存储的。
在此,若第一索引信息与对应的数据块的具体数据记录是混合存放,例如依照key1-value1-key2-value2-key3-value3……交叉存放,当后续初始化对应缓存,将第一索引信息从磁盘中读入缓存时,需要跳跃读取所述key1、key2、key3…,以避开数据块对应的数据记录value1、value2、value3…。不断避让所述数据记录的操作会降低所述第一索引信息读入缓存的效率。相比之下,依照序列化方式存储在磁盘中的所述第一索引信息则可以直接顺序连续读入缓存,不用花费时间辨识、避让对应的数据记录,从而简化了操作步骤,加快了所述第一索引信息读入缓存的速度。同时,将第一索引信息和相应的数据块的数据记录在磁盘中分开存储,也便于对数据进行管理操作,例如,在进行数据更新操作时,就可以对第一索引信息和对应的数据块的数据记录分别进行更新,操作方便,简洁明了。
优选地,所述缓存管理设备1还将新增数据块的第一索引信息与该数据块存储于所述磁盘,其中,该数据块在所述磁盘中的存储位置与该第一索引信息相对应,并将该第一索引信息写入所述缓存。
具体地,由于本方案的原始数据是依据实际应用需要而进行分块,并且各个数据块及其对应索引信息的映射是相对独立的,从而,当需要扩充缓存管理的数据时,只需要对新加入的增量数据自行建立索引,并将新增数据的第一索引信息与其所对应的数据块按照一定的函数映射关系存储入磁盘,并将新增的第一索引信息全部存入对应缓存,而不需要对原有的全量数据重新建立索引。由此,体现了本方案中缓存管理的数据易于扩展的技术设计,实际应用中,可以根据需要扩充数据容量,从而能够顾实现海量数据的管理。
在此,通过缓存管理设备1将每个数据块的第一索引信息与该数据块对应存储于磁盘中,并且在将所述磁盘中的所有第一索引信息写入相对应的缓存后,就可以基于该缓存管理设备1对所管理的数据进行应用操作,例如对数据进行访问、查询、更新等,进一步,基于所获取的数据进行分析、统计等应用。
图2示出根据本申请一个优选实施例的一种缓存管理的设备示意图。缓存管理设备1还包括第三装置203。以下参照图2对该优选实施例进行详细描述:具体地,缓存管理设备1的第一装置201将每个数据块的第一索引信息与该数据块存储于磁盘,其中,该数据块在所述磁盘中的存储位置与该第一索引信息相对应;第二装置202将所述磁盘中的所有第一索引信息写入相对应的缓存;第三装置203,用于通过将查询关键字在所述缓存中进行匹配查询确定对应的目标记录。其中,缓存管理设备1的第一装置201和第二装置202与图1所示出的对应装置相同或基本相同,故此处不在赘述,并通过引用的方式包含于此。
其中,缓存管理设备1的第三装置203通过将查询关键字在所述缓存中进行匹配查询确定对应的目标记录。具体地,首先,依据需要查询的关键字,在缓存中寻找与之相匹配的第一索引信息,若所述缓存中没有找到与所述查询关键字相匹配的第一索引信息,则说明在缓存中,以及在与缓存相对应的所述磁盘中都没有存储与查询关键字相对应的目标记录,所以也不需要对磁盘进行读取,直接从缓存中返回查询结果,查询结果为空值;若所述缓存中存在与所述查询关键字相匹配的第一索引信息,则进一步在缓存中通过所匹配的第一索引信息寻找相对应的目标记录。例如,查询关键字为KEY1,先通过缓存进行关键字匹配,若所述缓存中并没有某个第一索引信息与KEY1相匹配,则从所述缓存中返回NULL,若是所述缓存中存在一个第一索引信息key1与KEY1匹配,则认为与所述第一索引信息key1对应的数据块的数据记录value1即为关键字KEY1所要查询的目标记录。
在此,所述的查询关键字包括输入的单个关键字,也包括输入的多个关键字。当用户输入的关键字为单个关键字时,查询关键字即为所述单个关键字,通过将该查询关键字与缓存中第一索引信息匹配进行目标记录的匹配。若用户输入的关键字为多个关键字,则可以先将所述关键字与缓存中的第一索引信息匹配,若匹配成功,再将多个关键字通过函数运算生成与所要查询数据块的第一索引信息相对应的第二索引信息,并通过所述第二索引信息进行查询操作,寻找匹配的目标记录。
优选地,缓存管理设备1的第三装置203将查询关键字在所述缓存中进行匹配查询包括:
将查询关键字中的多个关键字组合生成第二索引信息,并依据该第二索引信息在所述缓存中进行匹配查询。
具体地,在缓存管理时,用户输入多个关键字,包括一组体现对数据分块、分层索引的关键字,如表序号,分区序号,列序号,块序号,以及所查询数据块对应的关键字等。对于所述查询数据块对应的关键字通过缓存进行关键字匹配,若所述缓存中并没有某个第一索引信息与所述查询数据块对应的关键字相匹配,则从所述缓存中返回NULL,若是所述缓存中存在一个第一索引信息与所述查询数据块对应的关键字匹配,则认为与所述第一索引信息对应的数据块的数据记录即为查询关键字所要查询的目标记录。
但在,具体查询操作中,由于存在多个关键字,若是依次依照数据记录所属的层次结构查询,则需要运算多次,耗费时间。所以,当所述多个查询关键字中的与所查询数据块对应的关键字可以在缓存中匹配到相应的第一索引信息时,则依据所述第一索引信息和其他所述的多个关键字,如表序号,分区序号,列序号,块序号等进行函数运算,聚合生成第二索引信息,该第二索引信息和与其对应的第一索引信息都对应相同的数据块。若所述缓存中存在与该第二索引信息相对应的数据块的数据记录就可以通过该第二索引信息确定目标记录所在位置,若缓存中不存在该第二索引信息对应的数据块的数据记录,则进入磁盘,通过相应的所述第一索引信息在磁盘中查询目标记录。
例如,对缓存管理设备1进行查询访问操作时,当用户需要查询一个表序号为table1、分区序号为partition1、列序号为column1、块序号为block1的数据块,并知道该数据块block1所对应的关键字KEY1时,在缓存中找到与该关键字KEY1相匹配的第一索引信息key1,对该第一索引信息key1与各块属性信息进行聚合运算生成与所查询数据块相对饮的第二索引信息key21,即key21=f(table1 ID,partition1 ID,column1 ID,block1 ID,key1),进而,对第二索引信息进行函数映射,若该第二索引信息对应的数据块的数据信息存储在缓存中,则通过函数运算,如F(key21)=value1,就可以在缓存中找到要查询的数据块block1的数据记录存储的相应位置,,即找到目标记录。若缓存中不存在与所述第二索引信息key21对应的目标记录,则进入磁盘,通过所述第一索引信息key1在磁盘中查找与其相匹配的数据块的数据记录,即为目标记录。在此,所述块属性包括但不限于对应数据块的表序号table1、分区序号partition1、列序号column1、块序号block1等相关信息。
其中,组合运算函数f优选采用Murmur哈希函数。其中,该函数映射F包括任意的哈希算法,在实现中优选采用简单的取模运算。
本领域技术人员应能理解,上述运用特定哈希函数进行的相应计算仅为举例,其他函数如可适用本申请,也应包含在本申请的保护范围以内,并在此以引用方式包含于此。
在此,当缓存管理设备1所获取的关键字为多个关键字时,只要知道相对应数据块的关键字,和各数据分块的属性信息,就可以通过函数算法聚合生成第二索引信息,进而,在缓存中查询时,只需经过一次函数映射就可以查找到目标数据。而传统的索引,当获得多个关键字时,需要进行多次查找,例如依次查询数据所在的表、分区、序列、块,依次,即在进行多次哈希运算后才能找到目标数据。与此方案相比,本方案能够简化数据查询的步骤,使得查询访问速度大幅度提高。
优选地,当所述查询关键字与所述缓存中的第一索引信息相匹配时,所述第三装置203还根据相匹配的第一索引信息确定对应的目标记录。
具体地,当所述查询关键字可以在缓存中匹配得到时,由于所述磁盘与对应缓存存储的第一索引信息一致,说明在相应的磁盘中一定包含与所述查询关键字相对应的目标记录,同时,所述缓存中也可能存在与所述查询关键字相对应的目标记录。此时,所述第三装置203需要依据所述第一索引信息来确定与之相匹配的查询关键字所对应的数据块的数据信息,即目标记录的读取操作。
例如,当查询关键字为单个关键字KEY1时,在缓存中找到与之相匹配的第一索引信息key1,则可以由此第一索引性信息key1所对应的数据块block1的数据记录的位置找到关键字KEY1所对应的目标记录。
又如,当所述查询关键字为多个关键字时,其中包含各个块属性信息,以及与所需查询数据块block2所对应的关键字KEY2,在缓存中找到与此关键字KEY2相匹配的第一索引信息,该第一索引信息所对应的数据块的数据记录即为查询关键字对应的目标记录。
更优选地,所述第三装置根据相匹配的第一索引信息确定对应的目标记录包括:
-从所述磁盘中与相匹配的第一索引信息相对应的存储位置读取对应的目标记录;或
-从所述缓存中相对应的存储位置读取对应的目标记录,其中,该存储位置对应于与该第一索引信息及所述查询关键字相匹配的第二索引信息。
具体地,所述缓存管理设备1的第三装置根据缓存中所述的第一索引信息先判断***中是否存在与此第一索引信息相对应的数据块的数据记录,所述的数据记录可能仅存在于磁盘中,也可能同时存在于磁盘和缓存中。先判断在缓存中是否存有与此第一索引信息相对应的数据块的数据记录,例如,根据该第一索引信息及所述查询关键字(例如该查询关键字所包括的数据块的块属性信息)确定对应的第二索引信息,检查该缓存中与该第二索引信息相对应的存储位置存在数据记录;若存在,则从该缓存的该存储位置直接读取目标记录,并返回查询结果;若不存在,则从所述磁盘中与相匹配的第一索引信息相对应的存储位置读取与所述第一索引信息相对应的数据块的数据记录,再返回查询结果。在此,确定第二索引信息的方式与前述实施例基本相同,故不再赘述,仅通过引用的方式包含于此。
其中,一方面,若所查询关键字在缓存中有相匹配的第一索引信息,则在磁盘中一定可以找到相对应的目标记录。因为所述的缓存中的第一索引信息是从对应的磁盘中读取的,所以相对应缓存和磁盘中存储的第一索引信息是一致的,同时,所述磁盘中每一个第一索引信息都有与之相对应的数据块的数据记录存储在磁盘。所以,当所述查询关键字与缓存中某一第一索引信息相匹配时,一定可以在对应磁盘中找到相应的第一索引信息,进一步,通过映射获得磁盘中与该第一索引信息对应的数据块的数据记录。
另一方面,若所查询关键字在缓存中有相匹配的第一索引信息,则在缓存中也可能找到相对应的目标记录。若缓存中也存在与所述查询关键字相匹配的目标记录,此时,由于缓存的读取速度快于磁盘,对于所述查询关键字将优先于磁盘而读取缓存中的相对应的目标记录,此时,并不需要进入磁盘读取相应的目标记录,整个查询过程可以在缓存中完成。其中,缓存中所述目标记录的存储位置,与该数据块的第一索引信息,以及与所述查询关键字相对应的所述数据块的第二索引信息均相对应。
更优选地,所述第三装置203在从所述磁盘中与相匹配的第一索引信息相对应的存储位置读取对应的目标记录后,还根据该目标记录的第一索引信息及块属性信息确定该目标记录所对应的第二索引信息,将所述目标记录写入所述缓存中与该第二索引信息相对应的存储位置。
具体地,当查询的目标记录不在缓存中而在磁盘中时,待查询结束后,将该目标记录更新入缓存,以便下一次对该目标记录进行读取操作时可以直接在缓存中进行。其中,在缓存中,依据目标记录对应的第一索引信息以及所获取的各个数据块属性信息,通过相应的函数运算,例如哈希运算,可以生成第二索引信息。在查询结束后,将所述目标记录更新存储于所述缓存,并且该目标记录在缓存中的存储位置与所述第二索引信息相对应。同时,为了节约缓存空间,优选地,并不需要将所述第二索引信息存储入所述缓存,所述的第二索引信息,可以在具体应用时,如查询操作中,即时生成。在此,确定第二索引信息的方式与前述实施例基本相同,故不再赘述,仅通过引用的方式包含于此。
在此,由于对缓存数据的查询访问通常具有时间、空间的局部性,合适的缓存数据记录的更新能保证查询数据在缓存中有较高的命中率,从而达到较快的访问查询速度。对于所述目标记录的新增、淘汰等更新操作可以、但是不限于使用LRU算法、随机淘汰算法等任意的cache淘汰算法。
图3示出根据本申请另一个方面的一种缓存管理的方法流程图。
其中,在步骤S301中,缓存管理设备1将每个数据块的第一索引信息与该数据块存储于磁盘,其中,该数据块在所述磁盘中的存储位置与该第一索引信息相对应;在步骤S302中,缓存管理设备1将所述磁盘中的所有第一索引信息写入相对应的缓存。
具体地,在步骤S301中,缓存管理设备1将每个数据块的第一索引信息与该数据块存储于磁盘。所述数据块是使用缓存管理的上层应用***一次读取数据的单位,数据块的大小通常依据上层应用对数据访问的实际需要来配置。例如,应用层所需要读取的数据单位可以是表、列、区、块等。在步骤S301中,缓存管理设备1通过函数计算将所述第一索引信息映射到相应的数据块在磁盘中的存储位置,使得磁盘中每一个第一索引信息都与其指向的数据块相对应,建立起多个索引,进而通过已知的第一索引信息就可以找到对应的数据块。其中,所述第一索引信息可以采用任意方式存入磁盘,只要该方式可以确保存储于磁盘中的第一索引信息后续可以顺利读入相应缓存即可,所述存储方式例如序列化存储,压缩存储、加密存储等等。在步骤S302中,缓存管理设备1将所述磁盘中的所有第一索引信息写入相对应的缓存。在将所有数据块和其第一索引信息相对应地存入磁盘中后,再将所述第一索引信息全量写入与所述磁盘相对应的缓存,完成缓存中第一索引信息的初始化。
例如,在步骤S301中,缓存管理设备1将数据块和其相对应的第一索引信息存入磁盘中时,存储的第一索引信息和相应的数据块之间通过函数映射相对应。如,对于数据块block1,其中包含的具体数据记录为value1,其第一索引信息为关键字key1,将key1作为自变量,通过函数f(x)进行计算,即可得到数据块对应的数据记录value1在磁盘中的存储位置。由此,磁盘中所述的第一索引信息与相应数据块之间就形成了函数映射关系,当已知某第一索引信息时,就可以依据此函数映射找到磁盘中对应的数据块的数据记录。
在此,在步骤S301中,缓存管理设备1将每个数据块的第一索引信息与该数据块存储于磁盘,其中,该数据块在所述磁盘中的存储位置与该第一索引信息相对应。使得所管理的数据根据分块建立起了多层索引,比起数据没有分块时建立的单层索引,可查询数据量不再依赖于单个索引信息的取值范围限制,可查询数据量能够根据需要大幅度扩增,真正能够实现对海量数据的查询。
接着,在步骤S302中,缓存管理设备1将所述磁盘中的所有第一索引信息写入相对应的缓存。所述的缓存包括一级缓存、二级缓存、三级缓存、超级缓存等多种能够快速存取数据的存储设备。该缓存与所述磁盘相对应。磁盘中存入了所有数据块的数据记录以及其相对应的第一索引信息,如,磁盘中存入数据块的数据记录value1,value2,value3,value4…,对应与第一索引信息key1,key2,key3,key4…,初始化缓存时,在步骤S302中,将所有的第一索引信息key1,key2,key3,key4…从磁盘读入缓存。在此,缓存中包含的第一索引信息与磁盘中所记录的第一索引信息需要保持一致,即若磁盘中第一索引信息不变,缓存中的相应的第一索引信息也不变;若磁盘中第一索引信息变化,缓存中的第一索引信息也会相应更新变化。
在此,初始化缓存时,存入缓存的是磁盘中所有的第一索引信息,而磁盘中与该第一索引信息相对应的数据记录可以在后续的实际应用中根据需要更新存入所述缓存中。
在此,在步骤S302中,缓存管理设备1将所述磁盘中的所有第一索引信息写入相对应的缓存。缓存管理的一个经典使用场景是查询关键字是否在建立的索引中,由于所述缓存中包含了全部数据块的第一索引信息,从而使得查询关键字匹配操作全部在读取速度较快的缓存中进行,不需要进入读取速度较慢的磁盘来操作。大大提高了查询的速度。同时,本申请中各数据块存储于磁盘,必要时且缓存中有可用空间时才将对应数据块写入缓存,从而在保证高效查询的同时,降低了对空间缓存的需求,提高了缓存利用率。
优选地,所述在步骤S301中,缓存管理设备1将每个数据块的第一索引信息与该数据块存储于磁盘包括:
-对原始数据进行分块,获得多个数据块及每个数据块的块属性信息;
-确定每个数据块的第一索引信息;
-将每个数据块的第一索引信息与该数据块存储于磁盘,其中,该数据块在所述磁盘中的存储位置与该第一索引信息相对应。
具体地,在步骤S301中,缓存管理设备1对原始数据进行分块,数据块的划分主要是依据上层应用中对数据查询访问的实际需要来配置的。例如,可以按照表、分区、列、块等数据存储的结构层次进行数据划分,对于原始数据的划分包括单一的层次的划分,如按照块(block)划分为block1,block2,block3,block4…;也包括多层次的划分,如按照块(block)划分为block1,block2,block3,block4…,进一步将各个块归属为上层结构,如将所述block1,block2归属于上层结构分区partition1,将所述block3,block4归属于上层结构分区partition2…,再进一步将各个分区归属为上层结构,如将所述分区partition1和partition2归属为列column1…。由此,数据块的划分体现出一种多层次结构,在实际管理操作中,比如数据查询中,依据这种分层次分块的结构能够实现快速查找。在此,对于每一个数据块确定其块属性信息,所述块属性信息包括,但不限于是对应数据块的相关标识信息,例如,可以是对应的表序号,分区序号,列序号,块序号等。
其次,所述在步骤S301中,缓存管理设备1确定每个数据块的第一索引信息。所述第一索引信息就是对相应数据块所包含信息内容概括和集中化的表述,能够直接指向相应数据块,通常由索引关键字确定,例如数据块block1对应第一索引信息为关键字key1。
再次,所述在步骤S301中,缓存管理设备1将每个数据块的第一索引信息与该数据块存储于磁盘,其中,该数据块在所述磁盘中的存储位置与该第一索引信息相对应。在磁盘中,存储的第一索引信息和相应的数据块之间通过函数映射相对应。例如,当已知某个数据块的第一索引信息,即可通过确定的函数计算出相应数据块在磁盘中的存储位置,从而找到该数据块信息。其中,所述的第一索引信息与相应数据块之间就形成了函数映射关系。优选地,所述函数为哈希函数,第一索引信息为哈希关键字。例如,数据块block1,其所包含的数据记录为value1,该数据记录对应的第一索引信息为哈希关键字hashmap1.key,将hashmap1.key作为自变量,通过哈希函数h(x)计算出值,即为数据记录value1在哈希表中的存储位置,由此,便由第一索引信息找到了磁盘中相应的数据块的数据记录。
本领域技术人员应能理解,上述通过确定的哈希函数计算出相应数据块在磁盘中的存储位置仅为举例,其他函数如可适用本申请,也应包含在本申请的保护范围以内,并在此以引用方式包含于此。
在此,在步骤S301中,缓存管理设备1将每个数据块的第一索引信息与该数据块存储于磁盘。使得依据数据的分块建立起多层索引,比起数据没有分块时建立的单层索引,可查询数据量不再依赖于单个索引信息的取值范围限制,可访问数据量能够根据需要大幅度扩增。
更优选地,所述多个数据块的第一索引信息按序列化方式存储于所述磁盘。
具体地,为了便于在后续步骤将所述磁盘中第一索引信息读入缓存时能够快速顺利操作,在步骤S301中,缓存管理设备1需要按照一定方式将数据块的第一索引信息存入磁盘中。与此同时,与所述第一索引信息相对应的数据块也会存储于所述磁盘中。所述序列化存储方式包括第一索引信息按顺序连续依次存储。例如需要存入磁盘的第一索引信息为关键字key1、key2、key3…,对应的数据块对应的数据记录为value1、value2、value3…。当将第一索引信息存入磁盘时,则依照key1-key2-key3……的顺序连续存储,相邻关键字之间并不会***所述数据块对应的具体数据记录value1、value2、value3…,所述序列化存储方式使得所述第一索引信息和其对应的数据块在磁盘中是分开存储的。
在此,若第一索引信息与对应的数据块的具体数据记录是混合存放,例如依照key1-value1-key2-value2-key3-value3……交叉存放,当后续初始化对应缓存,将第一索引信息从磁盘中读入缓存时,需要跳跃读取所述key1、key2、key3…,以避开数据块对应的数据记录value1、value2、value3…。不断避让所述数据记录的操作会降低所述第一索引信息读入缓存的效率。相比之下,依照序列化方式存储在磁盘中的所述第一索引信息则可以直接顺序连续读入缓存,不用花费时间辨识、避让对应的数据记录,从而简化了操作步骤,加快了所述第一索引信息读入缓存的速度。同时,将第一索引信息和相应的数据块的数据记录在磁盘中分开存储,也便于对数据进行管理操作,例如,在进行数据更新操作时,就可以对第一索引信息和对应的数据块的数据记录分别进行更新,操作方便,简洁明了。
优选地,在本方法中,所述缓存管理设备1还将新增数据块的第一索引信息与该数据块存储于所述磁盘,其中,该数据块在所述磁盘中的存储位置与该第一索引信息相对应,并将该第一索引信息写入所述缓存。
具体地,由于本方案的原始数据是依据实际应用需要而进行分块,并且各个数据块及其对应索引信息的映射是相对独立的,从而,当需要扩充缓存管理的数据时,只需要对新加入的增量数据自行建立索引,并将新增数据的第一索引信息与其所对应的数据块按照一定的函数映射关系存储入磁盘,并将新增的第一索引信息全部存入对应缓存,而不需要对原有的全量数据重新建立索引。由此,体现了本方案中缓存管理的数据易于扩展的技术设计,实际应用中,可以根据需要扩充数据容量,从而能够顾实现海量数据的管理。
在此,本申请通过缓存管理设备1将每个数据块的第一索引信息与该数据块对应存储于磁盘中,并且在将所述磁盘中的所有第一索引信息写入相对应的缓存后,就可以基于该缓存管理设备1对所管理的数据进行应用操作,例如对数据进行访问、查询、更新等,进一步,基于所获取的数据进行分析、统计等应用。
图4示出根据本申请一个优选实施例的一种缓存管理的方法流程图。本方法还包括步骤S403。以下参照图4对该优选实施例进行详细描述:具体地,在步骤S401中,缓存管理设备1将每个数据块的第一索引信息与该数据块存储于磁盘,其中,该数据块在所述磁盘中的存储位置与该第一索引信息相对应;在步骤S402中,缓存管理设备1将所述磁盘中的所有第一索引信息写入相对应的缓存;在步骤S403中,缓存管理设备1用于通过将查询关键字在所述缓存中进行匹配查询确定对应的目标记录。其中,步骤S401中和步骤S402与图3所示出的对应步骤相同或基本相同,故此处不在赘述,并通过引用的方式包含与此。
其中,在步骤S403中,缓存管理设备1通过将查询关键字在所述缓存中进行匹配查询确定对应的目标记录。具体地,首先,依据需要查询的关键字,在缓存中寻找与之相匹配的第一索引信息,若所述缓存中没有找到与所述查询关键字相匹配的第一索引信息,则说明在缓存中,以及在与缓存相对应的所述磁盘中都没有存储与查询关键字相对应的目标记录,所以也不需要对磁盘进行读取,直接从缓存中返回查询结果,查询结果为空值;若所述缓存中存在与所述查询关键字相匹配的第一索引信息,则进一步在缓存中通过所匹配的第一索引信息寻找相对应的目标记录。例如,查询关键字为KEY1,先通过缓存进行关键字匹配,若所述缓存中并没有某个第一索引信息与KEY1相匹配,则从所述缓存中返回NULL,若是所述缓存中存在一个第一索引信息key1与KEY1匹配,则认为与所述第一索引信息key1对应的数据块的数据记录value1即为关键字KEY1所要查询的目标记录。
在此,所述的查询关键字包括输入的单个关键字,也包括输入的多个关键字。当用户输入的关键字为单个关键字时,查询关键字即为所述单个关键字,通过将该查询关键字与缓存中第一索引信息匹配进行目标记录的匹配。若用户输入的关键字为多个关键字,则可以先将所述关键字与缓存中的第一索引信息匹配,若匹配成功,再将多个关键字通过函数运算生成与所要查询数据块的第一索引信息相对应的第二索引信息,并通过所述第二索引信息进行查询操作,寻找匹配的目标记录。
优选地,在步骤S403中,缓存管理设备1将查询关键字在所述缓存中进行匹配查询包括:
-将查询关键字中的多个关键字组合生成第二索引信息,,并依据该第二索引信息在所述缓存中进行匹配查询。
具体地,在缓存管理时,用户输入多个关键字,包括一组体现对数据分块、分层索引的关键字,如表序号,分区序号,列序号,块序号,以及所查询数据块对应的关键字等。对于所述查询数据块对应的关键字通过缓存进行关键字匹配,若所述缓存中并没有某个第一索引信息与所述查询数据块对应的关键字相匹配,则从所述缓存中返回NULL,若是所述缓存中存在一个第一索引信息与所述查询数据块对应的关键字匹配,则认为与所述第一索引信息对应的数据块的数据记录即为查询关键字所要查询的目标记录。
但在,具体查询操作中,由于存在多个关键字,若是依次依照数据记录所属的层次结构查询,则需要运算多次,耗费时间。所以,当所述多个查询关键字中的与所查询数据块对应的关键字可以在缓存中匹配到相应的第一索引信息时,则依据所述第一索引信息和其他所述的多个关键字,如表序号,分区序号,列序号,块序号等进行函数运算,聚合生成第二索引信息,该第二索引信息和与其对应的第一索引信息都对应相同的数据块。若所述缓存中存在与该第二索引信息相对应的数据块的数据记录就可以通过该第二索引信息确定目标记录所在位置。若缓存中不存在该第二索引信息对应的数据块的数据记录,则进入磁盘,通过相应的所述第一索引信息在磁盘中查询目标记录。
例如,在步骤S403中,对缓存管理设备1进行查询访问操作时,当用户需要查询一个表序号为table1、分区序号为partition1、列序号为column1、块序号为block1的数据块,并知道该数据块block1所对应的关键字KEY1时,在缓存中找到与该关键字KEY1相匹配的第一索引信息key1,对该第一索引信息key1与各块属性信息进行聚合运算生成与所查询数据块相对饮的第二索引信息key21,即key21=f(table1 ID,partition1 ID,column1 ID,block1 ID,key1),进而,对第二索引信息进行函数映射,若该第二索引信息对应的数据块的数据信息存储在缓存中,则通过函数运算,如F(key21)=value1,就可以在缓存中找到要查询的数据块block1的数据记录存储的相应位置即找到目标记录。若缓存中不存在与所述第二索引信息key21对应的目标记录,则进入磁盘,通过所述第一索引信息key1在磁盘中查找与其相匹配的数据块的数据记录,即为目标记录。在此,所述块属性包括但不限于对应数据块的表序号table1、分区序号partition1、列序号column1、块序号block1等相关信息。
其中,组合运算函数f优选采用Murmur哈希函数。其中,该函数映射F包括任意的哈希算法,在实现中优选采用简单的取模运算。
本领域技术人员应能理解,上述运用特定哈希函数进行的相应计算仅为举例,其他函数如可适用本申请,也应包含在本申请的保护范围以内,并在此以引用方式包含于此。
在此,当缓存管理设备1所获取的关键字为多个关键字时,只要知道相对应数据块的关键字,和各数据分块的属性信息,就可以通过函数算法聚合生成第二索引信息,进而,在缓存中查询时,只需经过一次函数映射就可以查找到目标数据。而传统的索引,当获得多个关键字时,需要进行多次查找,例如依次查询数据所在的表、分区、序列、块,依次,即在进行多次哈希运算后才能找到目标数据。与此方案相比,本方案能够简化数据查询的步骤,使得查询访问速度大幅度提高。
优选地,当所述查询关键字与所述缓存中的第一索引信息相匹配时,在步骤S403中,还根据相匹配的第一索引信息确定对应的目标记录。
具体地,当所述查询关键字可以在缓存中匹配得到时,由于所述磁盘与对应缓存存储的第一索引信息一致,说明在相应的磁盘中一定包含与所述查询关键字相对应的目标记录,同时,所述缓存中也可能存在与所述查询关键字相对应的目标记录。此时,所述在步骤S403中,需要依据所述第一索引信息来确定与之相匹配的查询关键字所对应的数据块的数据信息,即目标记录的读取操作。
例如,当查询关键字为单个关键字KEY1时,在缓存中找到与之相匹配的第一索引信息key1,则可以由此第一索引性信息key1所对应的数据块block1的数据记录的位置找到关键字KEY1所对应的目标记录。
又如,当所述查询关键字为多个关键字时,其中包含各个块属性信息,以及与所需查询数据块block2所对应的关键字KEY2,在缓存中找到与此关键字KEY2相匹配的第一索引信息,该第一索引信息所对应的数据块的数据记录即为查询关键字对应的目标记录。
更优选地,在步骤S403中,根据相匹配的第一索引信息确定对应的目标记录包括:
-从所述磁盘中与相匹配的第一索引信息相对应的存储位置读取对应的目标记录;或
-从所述缓存中相对应的存储位置读取对应的目标记录,其中,该存储位置对应于与该第一索引信息及所述查询关键字相匹配的第二索引信息。
具体地,在步骤S403中,所述缓存管理设备1根据缓存中所述的第一索引信息先判断***中是否存在与此第一索引信息相对应的数据块的数据记录,所述的数据记录可能仅存在于磁盘中,也可能同时存在于磁盘和缓存中。先判断在缓存中是否存有与此第一索引信息相对应的数据块的数据记录,例如,根据该第一索引信息及所述查询关键字(例如该查询关键字所包括的数据块的块属性信息)确定对应的第二索引信息,检查该缓存中与该第二索引信息相对应的存储位置存在数据记录;若是存在,则从该缓存的该存储位置直接读取目标记录,并返回查询结果;若是不存在,则从所述磁盘中与相匹配的第一索引信息相对应的存储位置读取与所述第一索引信息相对应的数据块的数据记录,再返回查询结果。在此,确定第二索引信息的方式与前述实施例基本相同,故不再赘述,仅通过引用的方式包含于此。
其中,一方面,若所查询关键字在缓存中有相匹配的第一索引信息,则在磁盘中一定可以找到相对应的目标记录。因为所述的缓存中的第一索引信息是从对应的磁盘中读取的,所以相对应缓存和磁盘中存储的第一索引信息是一致的,同时,所述磁盘中每一个第一索引信息都有与之相对应的数据块的数据记录存储在磁盘。所以,当所述查询关键字与缓存中某一第一索引信息相匹配时,一定可以在对应磁盘中找到相应的第一索引信息,进一步,通过映射获得磁盘中与该第一索引信息对应的数据块的数据记录。
另一方面,若所查询关键字在缓存中有相匹配的第一索引信息,则在缓存中也可能找到相对应的目标记录。若缓存中也存在与所述查询关键字相匹配的目标记录,此时,由于缓存的读取速度快于磁盘,对于所述查询关键字将优先于磁盘而读取缓存中的相对应的目标记录,此时,并不需要进入磁盘读取相应的目标记录,整个查询过程可以在缓存中完成。其中,缓存中所述目标记录的存储位置,与该数据块的第一索引信息,以及与所述查询关键字相对应的所述数据块的第二索引信息均相对应。
更优选地,在步骤S403中,在从所述磁盘中与相匹配的第一索引信息相对应的存储位置读取对应的目标记录后,还根据该目标记录的第一索引信息及块属性信息确定该目标记录所对应的第二索引信息,将所述目标记录写入所述缓存中与该第二索引信息相对应的存储位置。
具体地,当查询的目标记录不在缓存中而在磁盘中时,待查询结束后,将该目标记录更新入缓存,以便下一次对该目标记录进行读取操作时可以直接在缓存中进行。其中,在缓存中,依据目标记录对应的第一索引信息以及所获取的各个数据块属性信息,通过相应的函数运算,例如哈希运算,可以生成第二索引信息。在查询结束后,将所述目标记录更新存储于所述缓存,并且该目标记录在缓存中的存储位置与所述第二索引信息相对应。同时,为了节约缓存空间,优选地,并不需要将所述第二索引信息存储入所述缓存,所述的第二索引信息,可以在具体应用时,如查询操作中,即时生成。在此,确定第二索引信息的方式与前述实施例基本相同,故不再赘述,仅通过引用的方式包含于此。
在此,由于对缓存数据的查询访问通常具有时间、空间的局部性,合适的缓存数据记录的更新能保证查询数据在缓存中有较高的命中率,从而达到较快的访问查询速度。对于所述目标记录的新增、淘汰等更新操作可以、但是不限于使用LRU算法、随机淘汰算法等任意的cache淘汰算法。
图5示出根据本申请一个优选实施例的一种缓存管理设备1的技术效果对比图。
其中,示出了现有的全内存哈希索引技术、磁盘哈希索引技术,以及本申请方案的性能对比情况。其中,优选对比性能为每秒查询数据量(QPS=Query Per Second),即每秒钟处理完成的查询数,包括命中的查询,也包括未命中的查询。由图可知,本申请的技术性能非常接近于全内存哈希索引,同时,大大优于磁盘哈希索引。进而证实,本申请在具有查询数据量大的优势同时,能够达到较为理想的数据查询速度。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。