CN114297196B - 元数据存储方法、装置、电子设备及存储介质 - Google Patents
元数据存储方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN114297196B CN114297196B CN202111602194.9A CN202111602194A CN114297196B CN 114297196 B CN114297196 B CN 114297196B CN 202111602194 A CN202111602194 A CN 202111602194A CN 114297196 B CN114297196 B CN 114297196B
- Authority
- CN
- China
- Prior art keywords
- key
- index
- value
- version
- target
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 74
- 238000012544 monitoring process Methods 0.000 claims description 50
- 230000004048 modification Effects 0.000 claims description 22
- 238000012986 modification Methods 0.000 claims description 22
- 230000004044 response Effects 0.000 claims description 9
- 238000001914 filtration Methods 0.000 claims description 8
- 239000012634 fragment Substances 0.000 claims description 8
- 238000012216 screening Methods 0.000 claims description 8
- 238000005192 partition Methods 0.000 claims description 7
- 238000010606 normalization Methods 0.000 claims description 5
- 238000004590 computer program Methods 0.000 claims description 3
- 239000000758 substrate Substances 0.000 claims 1
- 230000006870 function Effects 0.000 description 13
- 238000004891 communication Methods 0.000 description 12
- 230000008569 process Effects 0.000 description 10
- 238000012217 deletion Methods 0.000 description 8
- 230000037430 deletion Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 7
- 238000013499 data model Methods 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 238000002955 isolation Methods 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000000547 structure data Methods 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种元数据存储方法、装置、电子设备及存储介质,该方法包括:接收元数据操作请求,元数据操作请求用于指示针对键值数据库中的目标键执行目标操作;其中,元数据为键值对形式,键值数据库用于存储版本索引和值索引,版本索引是对键值对中的键进行编码得到的,值索引是对键值对中的键以及值的版本号进行编码得到的;对目标键进行编码,确定当前版本索引;基于当前版本索引对键值数据库中的目标键进行目标操作,得到操作结果。本申请的方案中,基于所提供的键值数据库实现元数据的相关操作,能够提高元数据存储性能。
Description
技术领域
本申请涉及数据处理技术领域,尤其涉及一种元数据存储方法、装置、电子设备及存储介质。
背景技术
利用调度系统对物理集群进行调度管理时,需要构建具有强一致性的元数据存储系统,由元数据存储系统存储物理集群的元数据。元数据存储系统的性能直接影响着调度系统对物理集群的操作效率以及所能管理的物理集群规模。由此,如何提高元数据存储性能是所需解决的问题。
发明内容
有鉴于此,本申请的目的在于提出一种元数据存储方法、装置、电子设备及存储介质,能够提高元数据存储性能。
基于上述目的,本申请提供了一种元数据存储方法,包括:
接收元数据操作请求,所述元数据操作请求用于指示针对键值数据库中的目标键执行目标操作;其中,所述元数据为键值对形式,所述键值数据库用于存储版本索引和值索引,所述版本索引是对所述键值对中的键进行编码得到的,所述值索引是对所述键值对中的键以及值的版本号进行编码得到的;
对所述目标键进行编码,确定当前版本索引;
基于所述当前版本索引对所述键值数据库中的目标键进行目标操作,得到操作结果。
可选的,对于相同的键,所述版本号增加,所述值索引递增或者递减;
对于不同的键,所述键增加,所述版本索引和值索引递增或者递减。
可选的,所述元数据操作请求为写操作请求;
所述接收元数据操作请求之后,还包括:
分配本次操作的当前版本号;
对所述目标键和所述当前版本号进行编码得到当前值索引。
可选的,所述写操作请求为创建请求,所述创建请求包括目标值;
对所述键值数据库中的目标键进行目标操作,包括:
根据所述当前版本索引查询所述键值数据库,响应于所述当前版本索引不存在,或者所述当前版本索引已存在且已删除,写入所述当前版本索引及索引的当前版本号,写入所述当前值索引及索引的目标值;
和/或,
所述写操作请求为修改请求,所述修改请求包括目标值和前置版本号;
对所述键值数据库中的目标键进行目标操作,包括:
根据所述当前版本索引查询所述键值数据库,响应于所述当前版本索引存在且所述当前版本索引索引的最新版本号为所述前置版本号,写入所述当前版本索引及索引的当前版本号,写入所述当前值索引及索引的目标值;
和/或,
所述写操作请求为删除请求,所述删除请求包括前置版本号;
对所述键值数据库中的目标键进行目标操作,包括:
根据所述当前版本索引查询所述键值数据库,响应于所述当前版本索引存在且所述当前版本索引索引的最新版本号为所述前置版本号,写入所述当前版本索引及索引的当前版本号,并标记为已删除,写入所述当前值索引及索引的墓碑值。
可选的,所述分配本次操作的当前版本号为:按照从小到大的顺序,分配连续且唯一的版本号;
对所述键值数据库中的目标键进行目标操作之后,还包括:
按照所述顺序,将操作信息保存于操作记录空间;其中,所述操作信息至少包括所述当前版本号和操作结果。
可选的,所述将操作信息保存于操作记录空间之后,还包括:
按照所述顺序,从所述操作记录空间提取所述操作结果为成功的操作信息;
将所述操作结果为成功的操作信息依序保存于操作完成空间。
可选的,所述方法还包括:
接收监听请求;其中,所述监听请求包括监听条件;
根据所述顺序,从所述操作记录空间和所述操作完成空间提取满足所述监听条件的操作信息。
可选的,所述监听条件包括起始版本号和过滤参数;
根据所述顺序,从所述操作记录空间和所述操作完成空间提取满足所述监听条件的操作信息,包括:
按照所述顺序,从所述操作记录空间提取第一监听操作信息;其中,所述第一监听操作信息是所述操作结果为成功、且所述当前版本号大于等于所述起始版本号的操作信息;
根据所述顺序,从所述操作完成空间提取第二监听操作信息;其中,所述第二监听操作信息是所述当前版本号大于等于所述起始版本号的操作信息;
将所述第一监听操作信息和第二监听操作信息保存于构建的事件队列中;
对所述事件队列中的所述第一监听操作信息和第二监听操作信息进行去重;
按照所述过滤参数对去重后的事件队列进行过滤,得到过滤后的操作信息。
可选的,所述元数据操作请求为读取请求;
所述接收元数据操作请求之后,还包括:
获取已经操作完成的最大版本号;
对所述目标键和最大版本号进行编码得到读取起点;
对所述键值数据库中的目标键进行目标操作,包括:
从所述读取起点到所述当前版本索引,遍历所述目标键的键值对,响应于读取到一个值索引,对读取到的值索引进行解码得到值的版本号。
可选的,所述元数据操作请求为遍历请求,所述遍历请求包括所述目标键的遍历范围和目标版本号;
对所述目标键进行编码,确定当前版本索引为:
根据所述目标键的遍历范围,确定所述目标键对应的版本索引和值索引的遍历范围;
对所述键值数据库中的目标键进行目标操作,包括:
从所述目标键对应的版本索引和值索引的遍历范围内,筛选出所有的值索引;
对所有的值索引进行解码得到值的版本号和键;
根据解码得到的值的版本号和键,确定所述目标版本号对应的版本结果。
可选的,所述键值数据库包括至少一个物理分片;所述操作请求为并发遍历请求,所述并发遍历请求包括所述目标键的遍历范围和目标版本号;
对所述目标键进行编码,确定当前版本索引为:
根据所述目标键的遍历范围,确定所述目标键对应的版本索引和值索引的遍历范围;
对所述键值数据库中的目标键进行目标操作,包括:
查询所述版本索引和值索引的遍历范围内的所有物理分片;
对各物理分片进行边界规整,将同一个键的所有版本索引和值索引规整在同一个逻辑分片内;
从所述逻辑分片中,筛选出所有的值索引;
对所有的值索引进行解码得到值的版本号和键;
根据解码得到的值的版本号和键,确定所述目标版本号对应的版本结果;
汇聚所有物理分片的版本结果。
可选的,所述根据解码得到的值的版本号和键,确定目标版本号对应的版本结果,包括:
根据解码得到的键,确定同一个键的所有值索引;
对于每个键的所有值索引:
确定小于等于所述目标版本号的版本号集合,将版本号集合中的最大者作为所述目标版本号对应的版本结果。
基于同一构思,本申请还提供一种元数据存储装置,包括:
接收模块,用于接收元数据操作请求,所述元数据操作请求用于指示针对键值数据库中的目标键执行目标操作;其中,所述元数据为键值对形式,所述键值数据库用于存储版本索引和值索引,所述版本索引是对所述键值对中的键进行编码得到的,所述值索引是对所述键值对中的键以及值的版本号进行编码得到的;
编码模块,用于对所述目标键进行编码,确定当前版本索引;
操作模块,用于基于所述当前版本索引对所述键值数据库中的目标键进行目标操作,得到操作结果。
基于同一构思,本申请还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上所述任意一项所述的方法。
基于同一构思,本申请还提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使计算机执行如上所述任意一项所述的方法。
从上面所述可以看出,本申请提供的元数据存储方法、装置、电子设备及存储介质,基于所构建的键值数据库的数据模型,可以实现元数据的多版本控制,键值数据库的数据结构精简、巧妙,通过版本索引和值索引的编解码,能够快速高效的实现元数据的创建、修改、删除等有条件写操作,以及单键读取、遍历、并发遍历等读操作,基于写入的元数据实现事件监听功能,提高元数据存储性能。
附图说明
为了更清楚地说明本申请或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例的应用场景示意图;
图2为本申请实施例的方法流程示意图;
图3为本申请实施例的键值数据库的数据模型示意图;
图4为本申请实施例的创建操作的方法流程示意图;
图5为本申请实施例的修改操作的方法流程示意图;
图6为本申请实施例的删除操作的方法流程示意图;
图7为本申请实施例的事件监听方法流程示意图;
图8为本申请实施例的事件监听过程示意图;
图9为本申请另一实施例的事件监听过程示意图;
图10为本申请实施例的单键读取过程示意图;
图11为本申请实施例的遍历过程示意图;
图12为本申请实施例的并发遍历过程示意图;
图13为本申请实施例的装置结构示意图;
图14为本申请实施例的电子设备结构示意图。
具体实施方式
下面将参考若干示例性实施方式来描述本申请的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本申请,而并非以任何方式限制本申请的范围。相反,提供这些实施方式是为了使本申请更加透彻和完整,并且能够将本申请的范围完整地传达给本领域的技术人员。
根据本申请的实施方式,提出了一种元数据存储方法、装置、电子设备及存储介质。
在本文中,需要理解的是,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
下面参考本申请的若干代表性实施方式,详细阐释本申请的原理和精神。
相关技术中的元数据存储系统,一种部署有多个节点,多个节点以一致和容错的方式存储数据,当一部分节点出现故障时,其他节点也能达成一致,使操作成功,但是在存储容量和操作效率方面存在瓶颈,增加节点可以提高容错能力却不利于扩充存储容量,有些时候反而会降低存储容量和操作效率,无法通过扩展提高操作性能;而且,所提供的全部功能并不适应于特定的应用场景,一些场景中往往只需要使用其中的部分功能,适配性不高。一种基于关系型数据库实现,通过在关系型数据库上构建日志结构数据表,用于存储元数据的修改记录,并构建多个辅助索引满足查询操作的可用性,但是关系型数据库存在复杂的关系,难以通过扩展提高性能,无法满足大规模集群的性能需求。
为解决上述问题,本申请提供一种元数据存储方法,构建了一种键值数据库,该键值数据库中保存有键的键值对,键值对包括了版本索引及其索引的最新版本号,所有版本的值索引及其索引的值,基于该键值数据库,能够实现元数据版本控制;而且,版本索引和值索引均基于键进行编码使得对元数据的读写操作,事件监听功能等操作非常准确高效,数据结构精简,能够提高元数据存储性能,可扩展性强。
参考图1,其为本申请实施例提供的元数据存储方法的应用场景示意图。该应用场景包括调度系统101、元数据存储系统102、键值数据库103和物理集群104。其中,调度系统101、元数据存储系统102、键值数据库103和物理集群104之间均可通过有线或无线的通信网络连接。物理集群104是指可由调度系统101统一调度管理的计算资源的集合,可以由一定数量的服务器构成,物理集群规模主要包括服务器的数量、服务器上所承载的应用数量等。键值数据库103存储物理集群的元数据,调度系统102通过元数据存储系统102对键值数据库103进行相关操作,实现元数据的相关操作,通过元数据的相关操作实现对物理集群的调度管理。元数据存储系统102的处理能力和键值数据库103的数据结构直接影响着调度系统101对物理集群104的调度能力,也影响着调度系统101所能管理的物理集群104的规模。
根据不同的应用需求,元数据存储系统102可以包括一个或多个节点1020,本申请实施例中将元数据存储系统的节点1020称为元数据存储装置,作为元数据存储方法的执行主体。调度系统101向元数据存储装置发送操作请求,元数据存储装置根据操作请求的内容对键值数据库103进行相关操作,得到操作结果,调度系统101根据操作结果对物理集群104进行调度管理。
例如,在编排调度系统中,需要对单物理集群或者分布式物理集群进行任务编排调度,为满足系统要求,所适配的键值数据库要求具有数据一致性、准确性,能够实现元数据的多版本控制,所存储的元数据结构精简,操作效率高效,而且,当物理集群扩大规模时,能够适应性的扩展元数据存储性能,保证操作效率,保证能够支持物理集群的任务编排调度功能。
下面结合图1的应用场景,来描述根据本申请示例性实施方式的元数据存储方法。需要注意的是,上述应用场景仅是为了便于理解本申请的精神和原理而示出,本申请的实施方式在此方面不受任何限制。相反,本申请的实施方式可以应用于适用的任何场景。
首先,如图2所示,本申请实施例提供了一种元数据存储方法,包括:
S201:接收元数据操作请求,元数据操作请求用于指示针对键值数据库中的目标键执行目标操作;其中,元数据为键值对形式,键值数据库用于存储版本索引和值索引,版本索引是对键值对中的键进行编码得到的,值索引是对键值对中的键以及值的版本号进行编码得到的;
S202:对目标键进行编码,确定当前版本索引;
S203:基于当前版本索引对键值数据库中的目标键进行目标操作,得到操作结果。
本实施例中,元数据存储装置接收调度系统的操作请求,先根据操作请求中的目标键确定键值数据库的操作位置,然后基于操作位置对键值数据库进行相关操作,在操作之后得到操作结果,将操作结果发送给调度系统,调度系统根据操作结果对物理集群进行调度管理。
一些方式中,元数据为描述实际数据的数据,用于描述实际数据的属性信息,例如,元数据是实际数据的文件名、证件号等。元数据具有对应的标识,用于对元数据进行标识,例如,文件名的标识为文件1,证件号的标识为号码1。元数据及其对应的标识可以用键值对(key,value)表示,键值对包括关键字key(也称键)和值value,其中,键为元数据,值为元数据的标识,例如可表示为(文件名,文件1),(证件号,号码1)。
结合图3所示,本实施例提供一种键值数据库的数据模型。在该数据模型中,基于键值对形式的元数据,为每个键创建版本索引及其索引的最新版本号,值索引及其索引的值。一个键值对对应一个版本索引和至少一个值索引,值索引的数量根据对键的写操作次数确定,每执行一次写操作,键的值索引增加一个。
其中,版本索引是对键编码得到的,值索引是根据版本号和键编码得到的。每执行一次写操作,分配一个全局的版本号,作为本次操作的当前版本号,值索引根据当前版本号和键进行编码得到本次操作的值索引,版本索引所索引的内容为截止当前操作为止的最新版本号。由此,本实施例的键值数据库能够保存键的所有版本的操作记录,基于此实现元数据的版本控制。
举例来说,如图3所示,执行第i次写操作时,分配了版本号i,根据键和版本号i进行编码得到值索引i,该值索引i索引的内容为第i次写操作的值i,值i的版本号为版本号i;执行第n次写操作时,分配了版本号n,根据键和版本号n进行编码得到值索引n,该值索引n索引的内容为第n次写操作的值n,值n的版本号为版本号n;如果第n次写操作为截止目前的最后一次写操作,则版本索引索引的内容为版本号n,其为最新版本号。
对于版本索引和值索引的编码方式,需要保证编码后的版本索引和值索引递增或者递减,以及对版本索引解码后能够得到键,对值索引解码后能够得到值的版本号和键,以便于对键值数据库进行高效的操作。
一些实施例中,对于相同的键,随着版本号的增加,版本索引不变,值索引递增或者递减。即,对键进行一次写操作后,版本号增加,该键的版本索引不变,版本索引所索引的版本号变化,根据键和版本号编码得到的值索引相较于上次操作的值索引增大;或者,对键进行一次写操作后,版本号增加,根据键和版本号编码得到的值索引相较于上次操作的值索引减小。
对于不同的键,随着键的增加,版本索引和值索引递增或者递减。即,键增加,所增加的键的版本索引和值索引较已有的键的版本索引和值索引增大;或者,所增加的键的版本索引和值索引较已有的键的版本索引和值索引减小。这样,键值数据库中的版本索引和值索引保持一致的递增趋势或者递减趋势,便于后续快速高效地确定键值数据库的操作位置,执行相关操作,提高操作效率。
一些实施方式中,版本索引根据键和常量进行编码得到,值索引根据键和版本号进行编码得到,表示为:
revisionkeyi=encode(Rawkeyi,const) (1)
objectkeyij=encode(Rawkeyi,revisionj) (2)
其中,revisionkeyi是第i个版本索引,Rawkeyi是第i个键,const为常数,该常数是与可分配的版本号不同的数。objectkeyij为第i个键的第j次写操作的值索引,revisioni为第j次写操作分配的版本号。
可选的,编码方式可以是,在键的尾端附加大端序形式的版本号形成值索引,在键的尾端附加常数0形成版本索引。对于同一个键,每执行一次写操作,按照从小到大的顺序,分配连续且唯一的版本号,随着版本号的增加,值索引增大,版本索引不变。编码方式也可以是,基于键和大端序形式的版本号添加特定常数,形成值索引。需要说明的是,以上编码方式仅为示例性说明,本实施例不对具体的编码方式进行限定。
可选的,可在接收到操作请求后,基于全局逻辑时钟TSO(timestamp oracle)分配连续且唯一的版本号,并由TSO记录版本号的相关信息,例如,记录已分配的最大版本号,记录操作执行成功或者失败的版本号等等。
一些实施例中,本申请实施例的元数据存储方法支持元数据的写操作。从调度系统接收的操作请求为写操作请求;
在接收元数据操作请求之后,分配本次操作的当前版本号;
对目标键进行编码得到当前版本索引;
对目标键和当前版本号进行编码得到当前值索引。
本实施例中,当调度系统执行元数据写操作时,向元数据存储装置发送写操作请求,该写操作请求中包括目标键,元数据存储装置接收写操作请求之后,分配本次写操作的当前版本号,然后对目标键进行编码得到当前版本索引,对目标键和当前版本号进行编码得到当前值索引,通过当前版本索引和当前值索引确定键值数据库的操作位置,之后,可根据具体的写操作类型在操作位置对键值数据库进行相应类型的操作。
一种写操作请求是创建请求,创建请求包括目标键和目标值;
根据创建请求对键值数据库进行操作,包括:
根据当前版本索引查询键值数据库,响应于当前版本索引不存在,或者当前版本索引已存在且已删除,写入当前版本索引及索引的当前版本号,写入当前值索引及索引的目标值。
本实施例中,对于创建请求,需要判断键值数据库中是否已经存在了目标键的键值对,即目标键的键值对是否已经创建,如果已经存在,那么无需创建,如果不存在,则创建目标键的键值对。
结合图4所示,具体的,步骤S401接收创建请求后,步骤S402分配本次创建操作的版本号,步骤S403对目标键进行编码得到当前版本索引,以及步骤S404对目标键和当前版本号进行编码得到当前值索引;之后,步骤S405根据当前版本索引查询键值数据库,步骤S406判断当前版本索引是否存在,如果不存在,步骤S407将当前版本索引及其索引的当前版本号写入键值数据库,将当前值索引及其索引的目标值写入键值数据库,如果上述过程全部执行成功,则创建操作的事务成功。步骤S408如果当前版本索引已存在,进一步判断当前版本索引是否标记了已删除,对于已删除的版本索引,则进一步通过修改操作完成目标键的键值对创建,修改操作的具体方法在后续进行说明。
步骤S409,如果当前版本索引已存在且并未标记已删除,则创建过程终止,创建操作事务执行失败。本实施例支持创建操作事务的原子性,将判断当前版本索引是否存在和是否已删除对应为一个读操作,将写入当前版本号对应为一个写操作,将写入目标值对应为一个写操作,则读操作和两个写操作要么全部成功要么全部失败。本实施例支持创建操作事务的隔离性,即如果同时有两个创建操作,那么只能有一个成功。
另一种写操作请求是修改请求,修改请求包括目标键、目标值和前置版本号;
根据修改请求对键值数据库进行操作,包括:
根据当前版本索引查询键值数据库,响应于当前版本索引存在且当前版本索引索引的最新版本号为前置版本号,写入当前版本索引及索引的当前版本号,写入当前值索引及索引的目标值。
本实施例中,对于修改请求,首先判断键值数据库中是否已存在目标键的键值对,如果存在,对目标键的键值对进行修改。结合图5所示,具体的,步骤S501接收修改请求后,步骤S502分配本次修改操作的版本号,步骤S503对目标键进行编码得到当前版本索引,以及步骤S504对目标键和当前版本号进行编码得到当前值索引;步骤S505根据当前版本索引查询键值数据库,步骤S506判断当前版本索引是否存在,如果存在,步骤S507判断当前版本索引所索引的最新版本号是否为前置版本号,如果是,步骤S508将当前版本索引及其索引的当前版本号写入键值数据库,该当前版本号为截止当前操作的最新版本号,将当前值索引及其索引的目标值写入键值数据库,如果上述过程全部执行成功,则修改操作的事务成功。
步骤S509如果上述任一环节执行失败,包括当前版本索引不存在,或者当前版本号不是前置版本号,则修改操作终止,修改操作事务执行失败。本实施例支持修改操作事务的原子性,将判断当前版本索引是否存在、最新版本号是否为前置版本号对应为一个读操作,将写入当前版本号对应为一个写操作,将写入目标值对应为一个写操作,则读操作和两个写操作要么全部成功要么全部失败;本实施例支持修改操作事务的隔离性,即如果同时有两个修改操作,那么只能有一个成功。
一些实施方式中,写入当前版本索引及索引的当前版本号为:将最新版本号修改为当前版本号;即,对于修改操作,将当前保存的最新版本号更新为本次操作的当前版本号。
写入当前值索引及索引的目标值为:将当前值索引及索引的目标值添加于目标键已存在的最后一个值索引之后;其中,最后一个值索引为目标键的最大值索引或者最小值索引。这样,能够保证同一个键的版本索引和各值索引按顺序连续保存,便于执行读操作。
又一种写操作请求是删除请求,删除请求包括目标键和前置版本号;
根据删除请求对键值数据库进行操作,包括:
根据当前版本索引查询键值数据库,响应于当前版本索引存在且当前版本索引索引的最新版本号为前置版本号,写入当前版本索引及索引的当前版本号,并标记已删除,写入当前值索引及索引的墓碑值。
本实施例中,对于删除请求,需要判断键值数据库中是否存在所要删除的目标键的键值对,如果存在则将目标键的键值对删除。结合图6所示,步骤S601接收删除请求后,步骤S602分配本次删除操作的版本号,步骤S603对目标键进行编码得到当前版本索引,以及步骤S604对目标键和当前版本号进行编码得到当前值索引;步骤S605根据当前版本索引查询键值数据库,步骤S606判断当前版本索引是否存在,如果存在,步骤S607判断当前版本索引所索引的最新版本号是否为前置版本号,如果是,步骤S608将当前版本索引及其索引的当前版本号写入键值数据库,并标记该当前版本索引已删除,将当前值索引及其索引的墓碑值写入键值数据库,该墓碑值用以标记该当前值索引已删除,如果上述过程全部执行成功,则删除操作的事务成功。
步骤S609如果上述任一环节执行失败,包括当前版本索引不存在,或者当前版本号不是前置版本号,则删除操作终止,删除操作事务执行失败。本实施例支持删除操作事务的原子性,将判断当前版本索引是否存在、最新版本号是否为前置版本号对应为一个读操作,将写入当前版本号对应为一个写操作,将写入墓碑值对应为一个写操作,则读操作和两个写操作要么全部成功要么全部失败;本实施例支持删除操作事务的隔离性,即如果同时有两个删除操作,那么只能有一个成功。
一些方式中,还可配置回收器,当满足设定的回收条件时,将满足回收条件的键值对从键值数据库中删除,便于维护键值数据库。
一些实施例中,本申请实施例的元数据存储方法支持事件监听功能。
对键值数据库的目标键进行目标操作之后,还包括:
按照从小到大分配的当前版本号的顺序,将操作信息保存于操作记录空间;其中,操作信息至少包括当前版本号和操作结果。
本实施例中,为实现事件监听功能,需要记录每次写操作的操作记录。每执行一次写操作,分配本次写操作的当前版本号,在操作键值数据库之后,无论操作结果是否成功,均将本次操作的操作信息保存于操作记录空间中,利用操作记录空间按照操作的顺序记录每次操作的操作信息。可选的,根据事件监听的内容和需求,所记录的操作信息包括但不限于当前版本号、操作类型、目标键、目标值和操作结果,其中,当前版本号为本次操作所分配的版本号,目标键和目标值为本次操作所输入的键和值,操作类型可以是创建、修改或者删除等操作。
一些实施例中,将操作信息保存于操作记录空间之后,还包括:
按照从小到大分配的当前版本号的顺序,从操作记录空间提取操作结果为成功的操作信息;
将操作结果为成功的操作信息依序保存于操作完成空间。
本实施例中,操作记录空间中保存了所有的操作记录,所记录的操作记录包括三种情况,一种是操作正在执行,操作结果尚未记录,此种情况下,需要不断获取操作结果,直至得到操作结果并记录操作结果;第二种是操作已经结束,但是操作结果为失败;第三种是操作已经结束,操作结果为成功。基于操作记录空间保存的所有操作记录,按照版本号的顺序,从中提取出操作结果为成功的所有操作信息,并将提取出的操作信息按序保存于操作完成空间中,利用操作完成空间记录所有操作成功的操作记录,便于后续执行事件监听等相关操作。
如图7所示,本实施例中,实现事件监听功能的方法,具体包括:
S701:接收监听请求;其中,监听请求包括监听条件;
S702:根据从小到大分配的当前版本号的顺序,从操作记录空间和操作完成空间提取满足监听条件的操作信息。
本实施例中,基于构建的操作记录空间和操作完成空间,在接收调度系统的监听请求之后,按照版本号的顺序,从操作记录空间和操作完成空间中提取出所需监听的操作信息,调度系统根据获取的操作信息监听特定的操作事件。
一些实施例中,监听条件包括起始版本号和过滤参数;从操作记录空间和操作完成空间提取满足监听条件的操作信息,包括:
按照从小到大分配的当前版本号的顺序,从操作记录空间提取第一监听操作信息;其中,第一监听操作信息是操作结果为成功、且当前版本号大于等于起始版本号的操作信息;
根据从小到大分配的当前版本号的顺序,从操作完成空间提取第二监听操作信息;其中,第二监听操作信息是当前版本号大于等于起始版本号的操作信息;
将第一监听操作信息和第二监听操作信息保存于构建的事件队列中;
对事件队列中的第一监听操作信息和第二监听操作信息进行去重;
按照过滤参数对去重后的事件队列进行过滤,得到过滤后的操作信息。
结合图8所示,本实施例中,需要监听从起始版本号开始且满足过滤条件的所有操作,过滤条件包括但不限于发生变更的键的前缀、前缀的哈希值等。在接收监听请求之后,构建相应的事件队列803,根据过滤参数构建过滤器804。一方面,在操作记录空间801中,确定从起始版本号开始的后续所有操作,从其中提取出操作结果为成功的第一监听操作信息,保存于事件队列803中;另一方面,在操作完成空间802中,确定从起始版本号开始的后续所有操作,保存于事件队列中。考虑到直接从操作完成空间802中提取监听的操作,可能会因执行顺序等因素存在丢失问题,因而,需要同时从操作记录空间801和操作完成空间802中确定出符合监听条件的操作,并全部保存于事件队列803中。之后,基于事件队列803,需要去掉重复的操作信息,然后利用过滤器804对去重后的所有操作信息进行过滤,最后获得满足监听条件的事件流805。
一些方式中,如图9所示,操作记录空间901可以基于环形缓冲区实现,预先分配一定大小的缓冲区间构建环形缓冲区,在环形缓冲区中按序分配若干存储单元9011,每执行一次操作,将操作信息依序保存于环形缓冲区的一个存储单元中。同样的,操作完成空间902也可以基于环形缓冲区实现,依序从操作记录空间中提取出的操作信息,按序保存于操作完成空间的每个存储单元9022中,也可以是,从操作记录空间中提取出的操作信息,进行预定处理后得到包括操作信息的事件信息,将事件信息保存于操作完成空间901中;同时从操作记录空间901和操作完成空间902中确定出符合监听条件的操作,并全部保存于事件队列903中。之后,基于事件队列903,利用过滤器904对去重后的所有操作信息进行过滤,最后获得满足监听条件的事件流905。这样的存储结构,便于实现事件监听功能,并保证操作数据的一致性、正确性和完整性。需要说明的是,操作记录空间和操作完成空间的存储结构仅用于示例说明,不作为具体限定。
一些实施例中,本申请实施例的元数据存储方法支持读操作。
一种读操作请求是读取请求,在接收元数据操作请求之后,还包括:
获取已经操作完成的最大版本号;
对键值数据库中的目标键进行目标操作,包括:
对目标键和最大版本号进行编码得到读取起点;
对目标键进行编码得到当前版本索引作为读取终点;
从读取起点到读取终点,遍历目标键的键值对,响应于读取到一个值索引,对读取到的值索引进行解码得到值的版本号。
如图10所示,对于单键读取请求,先获取目前已经操作完成的最大版本号,根据目标键和最大版本号确定键值数据库的目标键的单键读取操作位置,该单键读取操作位置是由读取起点和读取终点确定的遍历范围。其中,读取起点是根据目标键和最大版本号编码得到的值索引,读取终点是对目标键编码得到的版本索引。基于确定的操作位置,从读取起点到读取终点,读取目标键的键值对,当读取到第一个值索引时,如果该值索引没有标记已删除,则表示该值索引处于有效状态,对该值索引进行解码获得所需读取的目标键的版本号以及目标键的值。这样,对于单键读取操作,在键值数据库中确定目标键的键值对,按照键值对的存储顺序确定读取顺序,按照读取顺序遍历获得单键读取结果。
一些实施方式中,当读取得到第一个值索引,但该值索引标记为已删除时,则未找到有效的读取结果,单键读取操作失败。
本实施例中,对于读取操作,需要获取目前已经操作完成的版本号,读取操作基于已经完成的操作基础上进行。例如,可以从操作记录空间中记录的操作信息中,获取操作成功和操作失败的操作信息,从中选取最大版本号作为已经操作完成的最大版本号;也可以基于从操作记录空间中获取的最大版本号,再根据该最大版本号从键值数据库中按照遍历顺序读取出一个值索引的版本号,将该最大版本号和读取到的版本号中的较大者作为已经操作完成的最大版本号。基于已经完成的操作执行读操作,能够保证数据一致性和正确性。
另一种读操作请求是遍历请求,遍历请求包括目标键的遍历范围和目标版本号;
对目标键进行编码,确定当前版本索引为:
根据目标键的遍历范围,确定目标键对应的版本索引和值索引的遍历范围;
对键值数据库的目标键进行目标操作,包括:
从版本索引和值索引的遍历范围内,筛选出所有的值索引;
对所有的值索引进行解码得到值的版本号和键;
根据解码得到的值的版本号和键,确定目标版本号对应的版本结果。
本实施例中,对于遍历操作,需要获得目标键的遍历范围内,具有目标版本号的遍历结果。首先根据目标键的遍历范围,确定目标键对应的版本索引和值索引的遍历范围,基于该遍历范围,筛选出所有的值索引,对所有的值索引进行解码,得到各值索引的版本号,再从各值索引的版本号中确定出目标版本号的版本结果。
一些实施例中,根据解码得到的值的版本号和键,确定目标版本号对应的版本结果包括:
根据解码得到的键,确定同一个键的所有值索引;
对于每个键的所有值索引:
确定小于等于目标版本号的版本号集合,将版本号集合中的最大者作为目标版本号对应的版本结果。
本实施例中,目标键的遍历范围为起始键到终点键,则根据起始键进行编码得到键值对的读取起点,根据终点键和最大版本号进行编码得到键值对的读取终点,将读取起点到读取终点之间的键值对作为键值对的遍历范围,在键值对的遍历范围内,筛选出所有的值索引,对所有的值索引进行解码得到键和版本号。解码获得键之后,将同一个键的所有值索引划分为同一组,对于每一组值索引,确定小于等于目标版本号的版本号集合,将版本号集合中的最大者作为目标版本号对应的版本结果。
举例来说,如图11所示,对于键“a”,存在四个键值对,四个键值对的值索引可表示为encode(a,1),encode(a,2),encode(a,3),encode(a,4),四个值索引的版本号分别为1,2,3,4,四个值索引所索引的值分别为A、B、C、D。如果目标版本号为3,则从中筛选出版本号小于等于3的版本号集合,即{1,2,3};之后,从版本号集合中确定出版本号最大的一个版本号3,将该版本号对应的键、版本号及值作为目标版本号的版本结果。
可以理解的是,在遍历过程中,对于已删除的值索引,其索引的值为墓碑值,则该值索引不作为目标版本号的版本结果返回。
一些实施例中,键值数据库可以包括至少一个物理分片;读操作请求是并发遍历请求,并发遍历请求包括目标键的遍历范围和目标版本号;
对目标键进行编码,确定当前版本索引为:
根据目标键的遍历范围,确定目标键对应的版本索引和值索引的遍历范围;
对键值数据库的目标键进行目标操作,包括:
查询版本索引和值索引的遍历范围内的所有物理分片;
对各物理分片进行边界规整,将同一个键的所有版本索引和值索引规整在同一个逻辑分片内;
从逻辑分片中,筛选出所有的值索引;
对所有的值索引进行解码得到值的版本号和键;
根据解码得到的值的版本号和键,确定目标版本号对应的版本结果;
汇聚所有物理分片的版本结果。
结合图12所示,本实施例中,键值数据库1203可以包括一个或多个物理分片,利用各个物理分片存储键的版本索引和值索引,通过扩展物理分片,可以提高存储性能和读写操作性能。调度系统1201向元数据存储系统1202发送并发遍历操作请求,元数据存储系统1202并行地对多个物理分片进行并发遍历操作,先根据目标键的遍历范围确定目标键对应的版本索引和值索引的遍历范围,之后,查询遍历范围内所涉及的物理分片,由于可能存在物理分片存储着同一个键的一部分值索引的情况,为保证遍历完整性和准确性,需要对物理分片进行边界规整,将同一个键的所有版本索引和值索引规整在同一个逻辑分片内。之后,基于规整后的逻辑分片,筛选出所有的值索引,对所有的值索引进行解码得到值的版本号和键。解码获得键之后,将同一个键的所有值索引划分为同一组,对于每一组值索引,确定小于等于目标版本号的版本号集合,将版本号集合中的最大者作为目标版本号对应的版本结果。最后,将获得的所有物理分片的版本结果整合在一起输出。对于并发遍历,通过并行的对每个物理分片遍历,能够提高操作效率。
一些方式中,若物理分片的数量为n,则存在n+1个边界,第一个边界为起点键,最后一个边界为终点键,其他的边界按照以下方式确定:
borderi=encode(GetRawkey(borderi),0) (3)
其中,GetRawkey(borderi)为第i个边界对应的键。
举例来说,若起点键为a,则起点键的编码为encode(a,0),终点键为z,终点键的编码为encode(z,MaxRevision),MaxRevison为最大版本号。假设物理分片的边界为encode(a,0),encode(c,1),encode(p,2),encode(z,MaxRevision);进行边界规整后,得到的逻辑分片的边界为encode(a,0),encode(c,0),encode(p,0),encode(z,MaxRevision),对应的逻辑分片为[encode(a,0),encode(c,0)),[encode(c,0),encode(p,0)),[encode(p,0),encode(z,MaxRevision))。
本申请实施例提供的元数据存储方法,基于所构建的键值数据库的数据模型,可以实现元数据的多版本控制,键值数据库的数据结构精简、巧妙,通过版本索引和值索引的编解码,能够快速高效的实现元数据的创建、修改、删除等有条件写操作,以及单键读取、遍历、并发遍历等读操作,基于写入的元数据实现事件监听功能。在此基础上,可通过扩展键值数据库的物理分片、增加键值数据库的数量和/或扩展元数据存储装置的数量等方式,提供不同的存储性能和读写性能,满足不同的调度系统需求,提高性能,具有扩展性。尤其是,在编排调度系统中,能够满足该系统对于元数据版本控制、元数据读写操作、事件监听功能,以及能够根据不同物理集群规模进行扩展以满足不同规模的性能需求。
需要说明的是,本申请实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本申请实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
需要说明的是,上述对本申请的一些实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于上述实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
基于同一发明构思,与上述任意实施例方法相对应的,本申请还提供了一种元数据存储装置。
参考图13,所述元数据存储装置,包括:
接收模块1301,用于接收元数据操作请求,元数据操作请求用于指示针对键值数据库中的目标键执行目标操作;其中,元数据为键值对形式,键值数据库用于存储版本索引和值索引,版本索引是对键值对中的键进行编码得到的,值索引是对键值对中的键以及值的版本号进行编码得到的;
编码模块1302,用于对目标键进行编码,确定当前版本索引;
操作模块1303,用于基于当前版本索引对键值数据库中的目标键进行目标操作,得到操作结果。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本申请时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
上述实施例的装置用于实现前述任一实施例中相应的元数据存储方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
基于同一发明构思,与上述任意实施例方法相对应的,本申请还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上任意一实施例所述的元数据存储方法。
图14示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
上述实施例的电子设备用于实现前述任一实施例中相应的元数据存储方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
基于同一发明构思,与上述任意实施例方法相对应的,本申请还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上任一实施例所述的元数据存储方法。
本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
上述实施例的存储介质存储的计算机指令用于使所述计算机执行如上任一实施例所述的元数据存储方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
需要说明的是,除非另外定义,本申请实施例使用的技术术语或者科学术语应当为本申请所属领域内具有一般技能的人士所理解的通常意义。本申请实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。元素前的冠词“一”或“一个”不排除多个这种元素的存在。
虽然已经参考若干具体实施方式描述了本申请的精神和原理,但是应该理解,本申请并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本申请旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。所附权利要求的范围符合最宽泛的解释,从而包含所有这样的修改及等同结构和功能。
Claims (12)
1.一种元数据存储方法,其特征在于,包括:
接收元数据操作请求,所述元数据操作请求用于指示针对键值数据库中的目标键执行目标操作;其中,所述元数据为键值对形式,所述键值数据库用于存储版本索引及其索引的最新版本号,值索引及其索引的值,一个键值对对应一个版本索引和至少一个值索引,所述值索引的数量根据对键的写操作次数确定,所述版本索引是对所述键值对中的键进行编码得到的,所述值索引是对所述键值对中的键以及值的版本号进行编码得到的;
按照从小到大的顺序,分配连续且唯一的版本号,作为本次操作的当前版本号;
对所述目标键进行编码,确定当前版本索引;
基于所述当前版本索引对所述键值数据库中的目标键进行目标操作,得到操作结果;
按照所述顺序,将操作信息保存于操作记录空间;其中,所述操作信息至少包括所述当前版本号、操作类型和操作结果,所述操作结果包括操作成功或操作失败;
按照所述顺序,从所述操作记录空间提取所述操作结果为成功的操作信息;
将所述操作结果为成功的操作信息依序保存于操作完成空间,以使当接收包括监听条件的监听请求时,根据所述顺序,从所述操作记录空间和所述操作完成空间提取满足所述监听条件的操作信息。
2.根据权利要求1所述的方法,其特征在于,
对于相同的键,所述版本号增加,所述值索引递增或者递减;
对于不同的键,所述键增加,所述版本索引和值索引递增或者递减。
3.根据权利要求1所述的方法,其特征在于,所述元数据操作请求为写操作请求;
所述分配连续且唯一的版本号之后,还包括:
对所述目标键和所述当前版本号进行编码得到当前值索引。
4.根据权利要求3所述的方法,其特征在于,
所述写操作请求为创建请求,所述创建请求包括目标值;
对所述键值数据库中的目标键进行目标操作,包括:
根据所述当前版本索引查询所述键值数据库,响应于所述当前版本索引不存在,或者所述当前版本索引已存在且已删除,写入所述当前版本索引及索引的当前版本号,写入所述当前值索引及索引的目标值;
和/或,
所述写操作请求为修改请求,所述修改请求包括目标值和前置版本号;
对所述键值数据库中的目标键进行目标操作,包括:
根据所述当前版本索引查询所述键值数据库,响应于所述当前版本索引存在且所述当前版本索引索引的最新版本号为所述前置版本号,写入所述当前版本索引及索引的当前版本号,写入所述当前值索引及索引的目标值;
和/或,
所述写操作请求为删除请求,所述删除请求包括前置版本号;
对所述键值数据库中的目标键进行目标操作,包括:
根据所述当前版本索引查询所述键值数据库,响应于所述当前版本索引存在且所述当前版本索引索引的最新版本号为所述前置版本号,写入所述当前版本索引及索引的当前版本号,并标记为已删除,写入所述当前值索引及索引的墓碑值。
5.根据权利要求1所述的方法,其特征在于,所述监听条件包括起始版本号和过滤参数;
根据所述顺序,从所述操作记录空间和所述操作完成空间提取满足所述监听条件的操作信息,包括:
按照所述顺序,从所述操作记录空间提取第一监听操作信息;其中,所述第一监听操作信息是所述操作结果为成功、且所述当前版本号大于等于所述起始版本号的操作信息;
根据所述顺序,从所述操作完成空间提取第二监听操作信息;其中,所述第二监听操作信息是所述当前版本号大于等于所述起始版本号的操作信息;
将所述第一监听操作信息和第二监听操作信息保存于构建的事件队列中;
对所述事件队列中的所述第一监听操作信息和第二监听操作信息进行去重;
按照所述过滤参数对去重后的事件队列进行过滤,得到过滤后的操作信息。
6.根据权利要求1所述的方法,其特征在于,所述元数据操作请求为读取请求;
所述接收元数据操作请求之后,还包括:
获取已经操作完成的最大版本号;
对所述目标键和最大版本号进行编码得到读取起点;
对所述键值数据库中的目标键进行目标操作,包括:
从所述读取起点到所述当前版本索引,遍历所述目标键的键值对,响应于读取到一个值索引,对读取到的值索引进行解码得到值的版本号。
7.根据权利要求1所述的方法,其特征在于,所述元数据操作请求为遍历请求,所述遍历请求包括所述目标键的遍历范围和目标版本号;
对所述目标键进行编码,确定当前版本索引为:
根据所述目标键的遍历范围,确定所述目标键对应的版本索引和值索引的遍历范围;
对所述键值数据库中的目标键进行目标操作,包括:
从所述目标键对应的版本索引和值索引的遍历范围内,筛选出所有的值索引;
对所有的值索引进行解码得到值的版本号和键;
根据解码得到的值的版本号和键,确定所述目标版本号对应的版本结果。
8.根据权利要求1所述的方法,其特征在于,所述键值数据库包括至少一个物理分片;所述操作请求为并发遍历请求,所述并发遍历请求包括所述目标键的遍历范围和目标版本号;
对所述目标键进行编码,确定当前版本索引为:
根据所述目标键的遍历范围,确定所述目标键对应的版本索引和值索引的遍历范围;
对所述键值数据库中的目标键进行目标操作,包括:
查询所述版本索引和值索引的遍历范围内的所有物理分片;
对各物理分片进行边界规整,将同一个键的所有版本索引和值索引规整在同一个逻辑分片内;
从所述逻辑分片中,筛选出所有的值索引;
对所有的值索引进行解码得到值的版本号和键;
根据解码得到的值的版本号和键,确定所述目标版本号对应的版本结果;
汇聚所有物理分片的版本结果。
9.根据权利要求7或8所述的方法,其特征在于,所述根据解码得到的值的版本号和键,确定目标版本号对应的版本结果,包括:
根据解码得到的键,确定同一个键的所有值索引;
对于每个键的所有值索引:
确定小于等于所述目标版本号的版本号集合,将版本号集合中的最大者作为所述目标版本号对应的版本结果。
10.一种元数据存储装置,其特征在于,包括:
接收模块,用于接收元数据操作请求,所述元数据操作请求用于指示针对键值数据库中的目标键执行目标操作;其中,所述元数据为键值对形式,所述键值数据库用于存储版本索引及其索引的最新版本号,值索引及其索引的值,一个键值对对应一个版本索引和至少一个值索引,所述值索引的数量根据对键的写操作次数确定,所述版本索引是对所述键值对中的键进行编码得到的,所述值索引是对所述键值对中的键以及值的版本号进行编码得到的;
分配模块,用于按照从小到大的顺序,分配连续且唯一的版本号,作为本次操作的当前版本号;
编码模块,用于对所述目标键进行编码,确定当前版本索引;
操作模块,用于基于所述当前版本索引对所述键值数据库中的目标键进行目标操作,得到操作结果;
监听模块,用于按照所述顺序,将操作信息保存于操作记录空间;其中,所述操作信息至少包括所述当前版本号、操作类型和操作结果,所述操作结果包括操作成功或操作失败;按照所述顺序,从所述操作记录空间提取所述操作结果为成功的操作信息;将所述操作结果为成功的操作信息依序保存于操作完成空间,以使当接收包括监听条件的监听请求时,根据所述顺序,从所述操作记录空间和所述操作完成空间提取满足所述监听条件的操作信息。
11.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至9任意一项所述的方法。
12.一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,其特征在于,所述计算机指令用于使计算机执行如权利要求1至9任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111602194.9A CN114297196B (zh) | 2021-12-24 | 2021-12-24 | 元数据存储方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111602194.9A CN114297196B (zh) | 2021-12-24 | 2021-12-24 | 元数据存储方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114297196A CN114297196A (zh) | 2022-04-08 |
CN114297196B true CN114297196B (zh) | 2024-05-28 |
Family
ID=80969862
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111602194.9A Active CN114297196B (zh) | 2021-12-24 | 2021-12-24 | 元数据存储方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114297196B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117131012B (zh) * | 2023-08-28 | 2024-04-16 | 中国科学院软件研究所 | 一种可持久化和可扩展的轻量级多版本有序键值存储系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109299194A (zh) * | 2018-09-25 | 2019-02-01 | 平安科技(深圳)有限公司 | 多版本数据存储管理方法及装置、电子设备、存储介质 |
US10254996B1 (en) * | 2018-08-10 | 2019-04-09 | Cohesity, Inc. | Fast migration of metadata |
CN113392087A (zh) * | 2021-05-31 | 2021-09-14 | 阿里巴巴新加坡控股有限公司 | 数据访问方法及计算设备 |
-
2021
- 2021-12-24 CN CN202111602194.9A patent/CN114297196B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10254996B1 (en) * | 2018-08-10 | 2019-04-09 | Cohesity, Inc. | Fast migration of metadata |
CN109299194A (zh) * | 2018-09-25 | 2019-02-01 | 平安科技(深圳)有限公司 | 多版本数据存储管理方法及装置、电子设备、存储介质 |
CN113392087A (zh) * | 2021-05-31 | 2021-09-14 | 阿里巴巴新加坡控股有限公司 | 数据访问方法及计算设备 |
Also Published As
Publication number | Publication date |
---|---|
CN114297196A (zh) | 2022-04-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5732536B2 (ja) | 重複排除に基づくストレージシステムにおけるスケーラブル参照管理のためのシステム、方法及び非一時的なコンピュータ可読ストレージ媒体 | |
Vora | Hadoop-HBase for large-scale data | |
CN111241108B (zh) | 基于键值对kv系统的索引方法、装置、电子设备和介质 | |
CN111061758B (zh) | 数据存储方法、装置及存储介质 | |
CN110147203B (zh) | 一种文件管理方法、装置、电子设备及存储介质 | |
US9298733B1 (en) | Storing files in a parallel computing system based on user or application specification | |
CN111917834A (zh) | 一种数据同步方法、装置、存储介质及计算机设备 | |
CN111930716A (zh) | 一种数据库扩容方法、装置及系统 | |
KR20210058118A (ko) | CaseDB: 엣지컴퓨팅을 위한 저비용 Put-Intensive 키-벨류 저장장치 | |
CN115114370B (zh) | 主从数据库的同步方法、装置、电子设备和存储介质 | |
CN114297196B (zh) | 元数据存储方法、装置、电子设备及存储介质 | |
WO2016150259A1 (en) | Efficient performance of insert and point query operations in a column store | |
US10789234B2 (en) | Method and apparatus for storing data | |
US20170083537A1 (en) | Mapping logical identifiers using multiple identifier spaces | |
US11157456B2 (en) | Replication of data in a distributed file system using an arbiter | |
CN115470235A (zh) | 一种数据处理方法、装置以及设备 | |
Zhao et al. | Toward efficient and flexible metadata indexing of big data systems | |
CN111930684A (zh) | 基于hdfs的小文件处理方法、装置、设备及存储介质 | |
US10083121B2 (en) | Storage system and storage method | |
US20220360458A1 (en) | Control method, information processing apparatus, and non-transitory computer-readable storage medium for storing control program | |
CN111459882A (zh) | 分布式文件系统的命名空间事务处理方法和装置 | |
CN110109866B (zh) | 一种文件系统目录的管理方法及设备 | |
CN107102898B (zh) | 一种基于numa架构的内存管理、构建数据结构的方法及装置 | |
CN114217741A (zh) | 存储装置的存储方法及存储装置 | |
CN110019092B (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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20220714 Address after: 100190 1309, 13th floor, building 4, Zijin Digital Park, Haidian District, Beijing Applicant after: Beijing volcano Engine Technology Co.,Ltd. Address before: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing. Applicant before: BEIJING BYTEDANCE NETWORK TECHNOLOGY Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant |