本技术涉及分布式存储,具体而言,涉及一种元数据索引的处理方法、装置、电子设备及存储介质。
背景技术:
1、随着大数据时代的到来,业务增长使得用户对高iops(input/output operationsper second,每秒进行读写操作的次数)且低时延的请求访问需求越来越高,分布式全闪存储应“云”而生,分布式全闪存储能够提供海量、高可靠、高扩展、去中心化的存储服务。在分布式块场景下,由于需要提供低时延的请求访问,而且块的元数据信息中还需要记录存储卷的逻辑地址至底层物理地址的转换信息,因此每次io(input/output,写入/读取)请求都要访问并查询映射关系,因此块存储性能高度依赖元数据查询性能。
2、现有的技术实现方案通过lsm树(log-structured merge-tree,日志结构合并树)的方式实现,其核心思想是利用顺序写来提高写性能,但因为分层的设计会降低读性能,因为lsm有多层,数据可能存在每一层,读请求需要从上到下依次查找请求的key(键),可能带来了读放大。lsm树是通过牺牲部分读性能换写性能,因此lsm更适合多写少读的场景。
3、由上述内容可知,在现有技术中,仍需要一种高性能数据库的解决方案,用于支持高性能的读写请求。
4、针对上述的问题,目前尚未提出有效的解决方案。
技术实现思路
1、本技术提供了一种元数据索引的处理方法、装置、电子设备及存储介质,以至少解决现有技术中数据库的读写效率低的技术问题。
2、根据本技术的一个方面,提供了一种元数据索引的处理方法,应用至分布式存储服务中,其中,分布式存储服务中至少包括元数据缓存模块和元数据存储模块,元数据索引的处理方法,包括:获取分布式存储服务的至少一个元数据;将至少一个元数据中的热点数据存储在元数据缓存模块中,其中,热点数据的调用频率高于预设调用频率,元数据缓存模块的数据读取优先级高于元数据存储模块的数据读取优先级;采用数组存储的方式或者哈希表存储的方式,将元数据的目标索引信息记录在元数据存储模块中的内存索引中,其中,目标索引信息包括元数据的键值对、键值对的数据指向信息以及键值对中的值所对应的对象名称和数据偏移信息,元数据缓存模块中不存在目标查询数据时,获取内存索引,并根据内存索引在磁盘中读取目标查询数据。
3、可选地,在本技术的元数据索引的处理方法中,采用数组存储的方式或者哈希表存储的方式,将元数据的目标索引信息记录在元数据存储模块中的内存索引中,包括:检测元数据的键值对的字节长度;在字节长度小于预设长度的情况下,采用数组存储的方式将元数据的目标索引信息记录在内存索引中;在字节长度大于或等于预设长度的情况下,采用哈希表存储的方式将元数据的目标索引信息记录在内存索引中。
4、可选地,在本技术的元数据索引的处理方法中,采用数组存储的方式或者哈希表存储的方式,将元数据的目标索引信息记录在元数据存储模块中的内存索引中,包括:检测元数据是否为针对核心路径的连续整数元数据,其中,核心路径为访问频率大于预设频率的访问路径;在元数据为针对核心路径的连续整数元数据的情况下,采用数组存储的方式,将元数据的目标索引信息记录在内存索引中;在元数据不是针对核心路径的连续整数元数据的情况下,采用哈希表存储的方式,将元数据的目标索引信息记录在内存索引中。
5、可选地,在本技术的元数据索引的处理方法中,在将元数据的目标索引信息记录在元数据存储模块中的内存索引中的过程中,元数据索引的处理方法还包括:根据元数据的键值对类型设置元数据对应的命名空间,其中,元数据对应的命名空间用于减少元数据的键值对的主键前缀信息。
6、可选地,元数据索引的处理方法还包括:在采用数组存储的方式将元数据的目标索引信息记录在内存索引中时,将键值对的主键的对象名称转换为数字作为数组的下标;在采用哈希表存储的方式将元数据的目标索引信息记录在内存索引中时,在不对键值对的主键的对象名称进行任何转换的情况下,将键值对的主键的对象名称一同记录在内存索引中,其中,采用哈希表存储的方式生成的内存索引结构体报文的长度大于采用数组存储的方式生成的内存索引结构体报文的长度。
7、可选地,采用对日志对象批量追加写的方式,在分布式存储服务中写入元数据,并更新内存索引中的信息,其中,日志对象批量追加写的方式用于在不需要访问内存索引的情况下,为追加写请求分配全局唯一且单调递增的版本号,并追加写至分布式存储服务的数据后端,其中,版本号用于数据重构时的校验判断。
8、可选地,在本技术的元数据索引的处理方法中,采用对日志对象批量追加写的方式,在分布式存储服务中写入元数据,包括:对元数据进行序列化后追加写至日志对象,并在当前的日志对象大小与待写入数据大小之和大于预设阈值时返回错误,以及生成新的日志对象进行数据重写入的操作。
9、可选地,在本技术的元数据索引的处理方法中,在根据元数据的键值对类型设置元数据对应的命名空间之后,检测元数据对应的命名空间的优先级是否高于预设优先级;在元数据对应的命名空间的优先级高于预设优先级的情况下,将元数据作为热点数据存储在元数据缓存模块中;在元数据对应的命名空间的优先级不高于预设优先级的情况下,根据分布式存储服务的内存使用率确定将元数据存储至元数据存储模块的时刻。
10、可选地,在本技术的元数据索引的处理方法中,在将元数据的目标索引信息记录在元数据存储模块中的内存索引中之后,检测分布式存储服务中的元数据总写入量与实际写入量之间的比值是否大于预设数值;在比值大于预设数值的情况下,全量扫描分布式存储服务中的日志对象,确定分布式存储服务中的存在空洞数据的日志对象,其中,空洞数据用于表征已经被覆盖写入或者已经被部分删除的冗余数据;在第i个日志对象为存在空洞数据的日志对象,并且检测到第i个日志对象的空洞率超过预设空洞率时,针对第i个日志对象执行数据空洞回收操作,其中,空洞率表征第i个日志对象的空洞数据在第i个日志对象的全量数据中的占比,数据空洞回收操作用于将已存在的数据追加写入日志对象,并更新内存信息,完成后删除只读状态下的与空洞数据相对应的日志对象。
11、可选地,在本技术的元数据索引的处理方法中,全量扫描分布式存储服务中的日志对象,确定分布式存储服务中的存在空洞数据的日志对象,包括:检测元数据在内存索引中是否被记录;在元数据未在内存索引中被记录时,确定元数据为空洞数据;在元数据在内存索引中被记录时,检测元数据对应的日志对象的对象版本号是否低于元数据在内存索引中的版本号;在对象版本号低于元数据在内存索引中的版本号的情况下,确定元数据为空洞数据;在对象版本号不低于元数据在内存索引中的版本号的情况下,确定元数据不是空洞数据;将空洞数据对应的日志对象确定为分布式存储服务中的存在空洞数据的日志对象。
12、可选地,在本技术的元数据索引的处理方法中,在将元数据的目标索引信息记录在元数据存储模块中的内存索引中之后,在多个元数据并发写入同一个主键时,根据每个元数据对应的版本号,对多个元数据进行排序,得到排序结果;根据排序结果,将版本号最大的元数据作为实际写入主键的元数据,其中,版本号最大的元数据为多个元数据中最后请求写入主键的元数据。
13、可选地,在本技术的元数据索引的处理方法中,在将元数据的目标索引信息记录在元数据存储模块中的内存索引中之后,在分布式存储服务出现节点重启的情况时,根据元数据对应的命名空间的优先级确定元数据的加载顺序。
14、可选地,在本技术的元数据索引的处理方法中,在将元数据的目标索引信息记录在元数据存储模块中的内存索引中之后,在分布式存储服务出现节点重启的情况时,通过访问分布式存储服务的元数据控制器获取数据后端中的元数据进行逆序加载,其中,逆序加载用于通过比较元数据的版本号大小,恢复版本号最大的同名元数据。
15、可选地,在本技术的元数据索引的处理方法中,分布式存储服务包括以下组件:元数据控制器,用于管理分布式存储服务中写入的所有日志对象的数据信息;数据后端,用于存储分布式存储服务的最新数据;块设备服务组件,其中,块设备服务组件包括块设备逻辑模块和元数据模块,元数据模块包含元数据缓存模块和元数据存储模块。
16、根据本技术的另一方面,还提供了一种元数据索引的处理装置,应用至分布式存储服务中,其中,分布式存储服务中至少包括元数据缓存模块和元数据存储模块,元数据索引的处理装置,包括:获取单元,用于获取分布式存储服务的至少一个元数据;第一存储单元,用于将至少一个元数据中的热点数据存储在元数据缓存模块中,其中,热点数据的调用频率高于预设调用频率,元数据缓存模块的数据读取优先级高于元数据存储模块的数据读取优先级;第二存储单元,用于采用数组存储的方式或者哈希表存储的方式,将元数据的目标索引信息记录在元数据存储模块中的内存索引中,其中,目标索引信息包括元数据的键值对、键值对的数据指向信息以及键值对中的值所对应的对象名称和数据偏移信息,元数据缓存模块中不存在目标查询数据时,获取内存索引,并根据内存索引在磁盘中读取目标查询数据。
17、根据本技术的另一方面,还提供了一种电子设备,其中,电子设备包括一个或多个处理器和存储器,存储器用于存储一个或多个程序,其中,当一个或多个程序被一个或多个处理器执行时,使得一个或多个处理器执行上述任意一项的元数据索引的处理方法。
18、根据本技术的另一方面,还提供了一种计算机可读存储介质,其中,计算机可读存储介质中存储有计算机程序,其中,在计算机程序运行时,使得计算机可读存储介质所在设备执行上述任意一项的元数据索引的处理方法。
19、在本技术中的,提供一种元数据索引的处理方法,应用至分布式存储服务中,其中,分布式存储服务中至少包括元数据缓存模块和元数据存储模块。首先,获取分布式存储服务的至少一个元数据;然后将至少一个元数据中的热点数据存储在元数据缓存模块中,其中,热点数据的调用频率高于预设调用频率,元数据缓存模块的数据读取优先级高于元数据存储模块的数据读取优先级;采用数组存储的方式或者哈希表存储的方式,将元数据的目标索引信息记录在元数据存储模块中的内存索引中,其中,目标索引信息包括元数据的键值对、键值对的数据指向信息以及键值对中的值所对应的对象名称和数据偏移信息,元数据缓存模块中不存在目标查询数据时,获取内存索引,并根据内存索引在磁盘中读取目标查询数据。
20、由上述内容可知,本技术通过将热点数据存储在元数据缓存模块中,并且设计元数据缓存模块的数据读取优先级高于元数据存储模块的数据读取优先级,从而在读取元数据时,优先地从元数据缓存模块读取,如果未在元数据缓存模块查询到想要读取的元数据,则再从元数据存储模块中进行读取,从而可以减少元数据的io次数(最多对元数据存储模块进行一次io即可),进而可以提高数据库的数据访问效率。
21、此外,本技术还采用数组存储的方式或者哈希表存储的方式,将元数据的目标索引信息记录在元数据存储模块中的内存索引中,与现有技术中通常使用哈希表存储的方式存储元数据相比,数组存储的方式可以减少需要缓存的数据大小,从而提高数据库内存的利用率。
22、由此可见,本技术的技术方案达到了在分布式全闪存储场景下实现块存储元数据的高性能访问的目的,从而实现了支持高iops、低时延的数据访问的技术效果,进而解决了现有技术中数据库的读写效率低的技术问题。