CN114253908A - 键值存储系统的数据管理方法及其装置 - Google Patents
键值存储系统的数据管理方法及其装置 Download PDFInfo
- Publication number
- CN114253908A CN114253908A CN202110220635.2A CN202110220635A CN114253908A CN 114253908 A CN114253908 A CN 114253908A CN 202110220635 A CN202110220635 A CN 202110220635A CN 114253908 A CN114253908 A CN 114253908A
- Authority
- CN
- China
- Prior art keywords
- data
- key
- data layer
- ordered
- stored
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/11—File system administration, e.g. details of archiving or snapshots
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/11—File system administration, e.g. details of archiving or snapshots
- G06F16/128—Details of file system snapshots on the file-level, e.g. snapshot creation, administration, deletion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
- G06F16/137—Hash-based
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1805—Append-only file systems, e.g. using logs or journals to store data
- G06F16/1815—Journaling file systems
Abstract
本申请公开了一种键值存储系统的数据管理方法,属于数据存储技术领域。键值存储系统的逻辑地址空间包括:多个子逻辑地址空间,所述多个子逻辑地址空间互不重叠,所述多个子逻辑地址空间中存储的数据分别使用多个数据结构一一对应管理,该方法包括:获取输入/输出I/O操作请求,所述I/O操作请求中携带有待操作数据的索引信息;基于所述索引信息,确定所述待操作数据的键;基于所述键,在所述多个数据结构中确定用于存储所述待操作数据的键值对的目标数据结构;在所述目标数据结构中对所述键值对进行I/O操作。本申请提高了该键值存储系统根据该数据结构对I/O操作请求进行响应的效率和键值存储系统的性能。
Description
本申请要求于2020年09月23日提交的申请号为202011011617.5、发明名称为“一种键值存储系统”的中国专利申请的优先权,其全部内容通过引用结合在本公开中。
技术领域
本申请涉及数据存储技术领域,特别涉及一种键值存储系统的数据管理方法及其装置。
背景技术
为了便于对计算机设备上的存储介质中存储的数据进行管理,目前基于存储介质提供的存储空间构建有存储系统,用户可以通过该存储系统在存储介质中读写数据。并且,为便于存储系统对存储介质中存储的数据进行管理,在通过存储系统向存储介质中写数据时,不仅要写入用户的数据,还需要写入用户的数据的元数据。元数据为用于描述存储系统中存储的数据的描述信息,根据元数据可以确定该元数据所描述的数据的存储位置等信息。
相关技术中,通常使用数据结构对存储系统中的所有元数据进行管理。在写入待写入数据的过程中,需要在该数据结构中写入该待写入数据的元数据。在读取待读取数据的过程中,可以先在该数据结构中获取该待读取数据的元数据,然后根据该元数据的指示在存储系统中获取待读取数据。
但是,当数据结构中存储的数据量较大时,会导致该存储系统的读性能较差。
发明内容
本申请提供了一种键值存储系统的数据管理方法及其装置。本申请提供的技术方案如下:
第一方面,本申请提供了一种键值存储系统的数据管理方法。键值存储系统的逻辑地址空间包括:多个子逻辑地址空间,多个子逻辑地址空间互不重叠,多个子逻辑地址空间中存储的数据分别使用多个数据结构一一对应管理,该方法包括:获取输入/输出I/O操作请求, I/O操作请求中携带有待操作数据的索引信息;基于索引信息,确定待操作数据的键;基于键,在多个数据结构中确定用于存储待操作数据的键值对的目标数据结构;在目标数据结构中对键值对进行I/O操作。
通过在用于管理键值存储系统的逻辑地址空间的多个数据结构中,确定用于存储所述待操作数据的键值对的目标数据结构,并在目标数据结构中对键值对进行I/O操作,由于该键值存储系统中的多个子逻辑地址空间分别由多个数据结构进行管理,相较于采用一个数据结构管理键值存储系统的逻辑地址空间,减小了该多个数据结构中每个数据结构需要存储的数据量,提高了该键值存储系统根据该数据结构对I/O操作请求进行响应的效率和键值存储系统的性能,能够通过该数据结构向用户提供稳定且可预测的读性能。
并且,由于键值存储系统的多个子逻辑地址空间分别由多个数据结构管理,键值存储系统能够通过该多个数据结构提供存储服务,提高该键值存储系统的并行处理能力,提高了键值存储系统的服务性能。
在一种可实现方式中,索引信息可以是键本身。例如,索引信息和键均包括I/O操作请求的发起者的标识和所述待操作数据的逻辑地址。此时,基于索引信息,确定待操作数据的键,包括:将索引信息确定为键。可选地,索引信息和键还可以包括I/O操作请求的发起者的链接克隆标识和快照标识,即索引信息和键均可以包括四元组,该四元组包括:I/O操作请求的发起者的逻辑单元号标识、链接克隆标识、逻辑块地址和快照标识。
在一种实现场景中,当用户使用云盘时,该I/O操作请求的发起者为云盘,则索引信息和键均包括云盘的标识、所述待操作数据的逻辑地址、云盘的链接克隆标识和快照标识。
在另一种可实现方式中,索引信息包括用于索引键的关键字,键可以根据该关键字索引得到。例如,键包括所述I/O操作请求的发起者的标识和所述待操作数据的逻辑地址,索引信息为用于索引到该I/O操作请求的发起者的标识和所述待操作数据的逻辑地址的关键字。此时,索引信息包括用于索引键的关键字,基于索引信息,确定待操作数据的键,包括:基于关键字进行索引,得到键,键包括I/O操作请求的发起者的标识和待操作数据的逻辑地址。
当I/O操作请求为写操作请求,待操作数据为待写入数据时,在目标数据结构中对键值对进行I/O操作,包括:将键值对存储在目标数据结构的第一有序数据层中,第一有序数据层位于内存中,且第一有序数据层支持更新写操作;当达到参考条件时,将第一有序数据层转换为第二有序数据层,第二有序数据层位于内存中,且第二有序数据层不支持修改操作;将第二有序数据层中的键值对写入目标数据结构的第三数据层中,第三数据层位于硬盘中,且第三数据层支持追加写操作;当第三数据层的数据量达到第二数据量阈值时,使用第三数据层中的键值对和目标数据结构的第四有序数据层中的键值对,更新第四有序数据层中的键值对,第四有序数据层位于硬盘中,且第四有序数据层支持追加写操作。
当I/O操作请求为读操作请求,待操作数据为待读取数据时,在目标数据结构中对键值对进行I/O操作,包括:查找目标数据结构的第一有序数据层中是否存储有待读取数据的键,第一有序数据层位于内存中,且第一有序数据层支持更新写操作;当第一有序数据层中未存储待读取数据的键时,查找目标数据结构的第二有序数据层中是否存储有待读取数据的键,第二有序数据层位于内存中,且第二有序数据层不支持修改操作;当第二有序数据层中未存储待读取数据的键时,查找目标数据结构的第三数据层中是否存储有待读取数据的键,第三数据层位于硬盘中,且第三数据层支持追加写操作;或者,当第一有序数据层中未存储待读取数据的键,且目标数据结构中不存在第二有序数据层时,查找第三有序数据层中是否存储有待读取数据的键;当第三数据层中未存储待读取数据的键时,查找目标数据结构的第四有序数据层中是否存储有待读取数据的键,第四有序数据层位于硬盘中,且第四有序数据层支持追加写操作。
在一种可实现方式中,第四有序数据层包括根节点、中间节点和叶子节点,根节点和中间节点均用于存储待操作数据的键,根节点能够存储的键的范围覆盖中间节点能够存储的键的范围,叶子节点存储有中间节点存储的键对应的键值对。
可选地,根节点还存储有用于存储根节点存储的键所覆盖的键的中间节点的节点标识,中间节点中还存储有用于存储中间节点存储的键所覆盖的键的叶子节点的节点标识。
并且,为了进一步保证键值存储系统的读速度,键值存储系统中还存储有哈希映射表,哈希映射表用于存储根节点、中间节点和叶子节点中至少一个节点存储的节点标识与节点标识指示的节点的存储位置信息的对应关系。
采用通过节点和该节点的存储位置信息的对应关系实现指向节点的指向信息时,对于合并更新后位置发生变化的一个节点的更新,仅需更新该对应关系中记载的存储位置信息,因此能够避免节点更新造成的全路径更新。
在一种可实现方式中,第三数据层为无序数据层。当该第三数据层为无序数据层时,在将第二有序数据层中的数据写入第三数据层的过程中,无需对写入的数据进行排序,缩短了数据写入时间,能够加快将第二有序数据层中的数据写入第三数据层中的速度。且由于第三数据层位于硬盘中,第二有序数据层位于内存中,当将第二有序数据层中的数据写入第三数据层中的速度较快时,能够降低第二有序数据层中的数据因掉电出现丢失的概率,提高了写数据成功的概率。
可选地,第四有序数据层为树状数据结构,第四有序数据层的深度小于3。此时,能够保证读操作的整体开销可控,提供稳定的读性能。并且,能够减小数据结构的复杂度,减少写入数据过程中需要执行的操作,能够降低计算机系统的写放大。
在一种可实现方式中,更新后的第四有序数据层的存储位置与更新前的第四有序数据层的存储位置不同,且更新前的第四有序数据层和更新后的第四有序数据层使用不同版本号进行标识。
并且,为了对合并排序前后的第四有序数据层进行区分,还可以为第四有序数据层设置版本号。同时,还可以为合并排序前的第四有序数据层设置延迟删除机制。也即是,在对第三数据层和第四有序数据层中的键值对进行合并排序的过程中,仍在硬盘中保存第四有序数据层,并在得到经过合并排序后的第四有序数据层后,不立即删除合并排序前的第四有序数据层。
这样一来,一方面能够在合并排序过程中使用合并排序前的第四有序数据层,向用户提供服务,使得读写操作能够并行执行,以不至于因合并排序导致读请求阻塞,避免产生读波动。另一方面能够在合并排序出现故障和/或根据应用需求,将第四有序数据层回退至较早的版本,保证数据的一致性。并且,键值存储系统还可以分别使用第四有序数据层的多个版本提供服务,实现多线程的并发访问服务。
在一种可实现方式中,键包括待操作数据的逻辑地址,逻辑地址通过数值表示,多个数据结构中同一数据结构中存储的键值对中逻辑地址对指定数值的余数相等,不同数据结构中存储的键值对中逻辑地址对指定数值的余数不等。
可选地,键值存储系统包括硬盘,硬盘中存储有日志文件,该方法还包括:接收快照删除请求;将快照删除请求写在日志文件中,并发送针对快照删除请求的操作完成响应;基于日志文件中记录的快照删除请求,执行快照删除请求指示的快照删除操作。
第二方面,本申请提供了一种键值存储系统的数据管理装置。键值存储系统的逻辑地址空间包括:多个子逻辑地址空间,多个子逻辑地址空间互不重叠,多个子逻辑地址空间中存储的数据分别使用多个数据结构一一对应管理。该装置包括:获取模块,用于获取输入/输出 I/O操作请求,I/O操作请求中携带有待操作数据的索引信息;确定模块,用于基于索引信息,确定待操作数据的键;确定模块,还用于基于键,在多个数据结构中确定用于存储待操作数据的键值对的目标数据结构;处理模块,用于在目标数据结构中对键值对进行I/O操作。
可选地,索引信息包括I/O操作请求的发起者的标识和待操作数据的逻辑地址,确定模块,具体用于:将索引信息确定为键。
可选地,I/O操作请求的发起者为云盘。
可选地,索引信息包括用于索引键的关键字,确定模块,具体用于:基于关键字进行索引,得到键,键包括I/O操作请求的发起者的标识和待操作数据的逻辑地址。
可选地,I/O操作请求为写操作请求,处理模块,具体用于:将键值对存储在目标数据结构的第一有序数据层中,第一有序数据层位于内存中,且第一有序数据层支持更新写操作;当达到参考条件时,将第一有序数据层转换为第二有序数据层,第二有序数据层位于内存中,且第二有序数据层不支持修改操作;将第二有序数据层中的键值对写入目标数据结构的第三数据层中,第三数据层位于硬盘中,且第三数据层支持追加写操作;当第三数据层的数据量达到第二数据量阈值时,使用第三数据层中的键值对和目标数据结构的第四有序数据层中的键值对,更新第四有序数据层中的键值对,第四有序数据层位于硬盘中,且第四有序数据层支持追加写操作。
可选地,I/O操作请求为读操作请求,待操作数据为待读取数据,处理模块,具体用于:查找目标数据结构的第一有序数据层中是否存储有待读取数据的键,第一有序数据层位于内存中,且第一有序数据层支持更新写操作;当第一有序数据层中未存储待读取数据的键时,查找目标数据结构的第二有序数据层中是否存储有待读取数据的键,第二有序数据层位于内存中,且第二有序数据层不支持修改操作;当第二有序数据层中未存储待读取数据的键时,查找目标数据结构的第三数据层中是否存储有待读取数据的键,第三数据层位于硬盘中,且第三数据层支持追加写操作;或者,当第一有序数据层中未存储待读取数据的键,且目标数据结构中不存在第二有序数据层时,查找第三有序数据层中是否存储有待读取数据的键;当第三数据层中未存储待读取数据的键时,查找目标数据结构的第四有序数据层中是否存储有待读取数据的键,第四有序数据层位于硬盘中,且第四有序数据层支持追加写操作。
可选地,第四有序数据层包括根节点、中间节点和叶子节点,根节点和中间节点均用于存储待操作数据的键,根节点能够存储的键的范围覆盖中间节点能够存储的键的范围,叶子节点存储有中间节点存储的键对应的键值对。
并且,根节点还存储有用于存储根节点存储的键所覆盖的键的中间节点的节点标识,中间节点中还存储有用于存储中间节点存储的键所覆盖的键的叶子节点的节点标识。
进一步地,键值存储系统中还存储有哈希映射表,哈希映射表用于存储根节点、中间节点和叶子节点中至少一个节点存储的节点标识与节点标识指示的节点的存储位置信息的对应关系。
可选地,第三数据层为无序数据层。
可选地,第四有序数据层为树状数据结构,第四有序数据层的深度小于3。
可选地,更新后的第四有序数据层的存储位置与更新前的第四有序数据层的存储位置不同,且更新前的第四有序数据层和更新后的第四有序数据层使用不同版本号进行标识。
可选地,键包括待操作数据的逻辑地址,逻辑地址通过数值表示,多个数据结构中同一数据结构中存储的键值对中逻辑地址对指定数值的余数相等,不同数据结构中存储的键值对中逻辑地址对指定数值的余数不等。
可选地,键值存储系统包括硬盘,硬盘中存储有日志文件,装置还包括:接收模块,用于接收快照删除请求;处理模块,还用于将快照删除请求写在日志文件中,并发送针对快照删除请求的操作完成响应;处理模块,还用于基于日志文件中记录的快照删除请求,执行快照删除请求指示的快照删除操作。
第三方面,本申请提供了一种计算机设备,包括存储器和处理器,存储器存储有程序指令,处理器运行程序指令以执行本申请第一方面提供的方法。
第四方面,本申请提供了一种计算机可读存储介质,该存储介质为非易失性计算机可读存储介质,该存储介质包括程序指令,当程序指令在计算机设备上运行时,使得计算机设备执行如本申请第一方面提供的方法。
第五方面,本申请提供了一种包含指令的计算机程序产品,当计算机程序产品在计算机上运行时,使得计算机执行本申请第一方面提供的方法。
附图说明
图1是本申请实施例提供的一种键值存储系统的数据管理方法涉及的实施场景的示意图;
图2是本申请实施例提供的一种根据键值存储系统的数据管理方法写数据的流程图;
图3是本申请实施例提供的一种计算机系统的结构示意图;
图4是本申请实施例提供的一种键值存储系统的示意图;
图5是本申请实施例提供的一种根据键值存储系统的数据管理方法读数据的示意图;
图6是本申请实施例提供的一种删除快照的方法流程图;
图7是本申请实施例提供的一种键值存储系统的数据管理装置的结构示意图;
图8是本申请实施例提供的另一种键值存储系统的数据管理装置的结构示意图;
图9是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
为便于理解,下面先对本申请实施例中涉及的相关背景知识进行介绍。
键值(key value,KV)对是数据库最简单的组织形式。键值对中的键(key)指示用于查找用户写入的数据的物理存储地址的关键字,键值对中的值(value)指示该数据的物理存储地址,或者,键值对中的值是数据本身。在用户读数据的过程中,需要先查找到待读取数据的键,然后根据待读取数据的键找到该键指示的值,根据该值得到待读取数据,从而完成数据的读取操作。并且,键中的关键字可以根据应用需求进行设置。在一种可实现方式中,本申请实施例中的键包含数据的四元组,该四元组包括:逻辑单元号(logical unitnumber, LUN)标识、链接克隆(brunch)标识、逻辑块地址(logical block address,LBA)和快照(snap) 标识。其中,快照标识用于指示根据用户写入的数据创建的快照。链接克隆标识用于指示实现键值存储系统的虚拟机。
有序数据层是指该数据层中存储的数据是按照某种规律排序后存储在该数据层中的。在本申请实施例的一种可实现方式中,该排序规律是按照键的大小进行排序。
无序数据层是指该数据层中存储的数据不是按照规律进行排序后存储在该数据层中的。例如,无序数据层中存储的数据未按照键的大小进行排序,仅是按照写入该无序数据层的先后顺序存储在该无序数据层中的。
数据层支持更新写操作,是指在需要采用新的数据修改数据层中已存储的数据时,采用新的数据覆盖数据层中已存储的数据。例如,当数据层中已存储有键为A的数据时,当写操作请求请求写入键为A的数据时,更新写是指在该数据层中已存储有键为A的数据的位置处,使用写操作请求请求写入的键为A的数据覆盖已存储的键为A的数据,从而实现对该键为A 的数据的修改。
数据层支持追加写操作,是指在向该数据层中写数据时,可以将数据写在该数据层中所有已写入数据的尾部。例如,当数据层中已存储有键为A的数据时,当写操作请求请求写入键为A的数据时,更新写是指在该数据层中已存储有键为A的数据的位置处覆盖写入该写操作请求请求写入的数据。
第一存储单位和第二存储单位之间允许键值覆盖,是指第一存储单位能够存储的键的范围和第二存储范围能够存储的键的范围存在重叠的范围。例如,当数据层包括多个有序字符串表(sorted string table,SSTable)时,该数据层包括的多个SSTable存在键值覆盖,是指该多个SSTable能够存储的键的范围存在重叠的范围。
第二存储单位被第一存储单位键值覆盖,是指第二存储单位能够存储的键的范围位于第一存储单位能够存储的键的范围内。例如,若第一存储单位能够存储的键的范围为[1,3],第二存储单位能够存储的键的范围为[1.5,2.1],范围[1.5,2.1]位于范围[1,3]内,则可知第二存储单位被第一存储单位键值覆盖。
图1是本申请实施例提供的键值存储系统的数据管理方法所涉及的应用场景的结构示意图。如图1所示,应用场景包括计算机系统10、客户端20以及存储池30。存储池30用于存储客户端20指示需要存储的数据。其中,客户端20与计算机系统10之间通过网络连接,客户端20可以通过网络向计算机系统10发送输入/输出(input/output,I/O)操作请求。计算机系统10与存储池30之间通过网络连接,计算机系统10可以通过网络与该存储池30进行数据交互,以便于实现客户端20发送的I/O操作请求所请求的I/O操作。
在一种可实现方式中,客户端20可以通过网络向计算机系统10发送写操作请求,计算机系统10可以根据该写操作请求,将写操作请求携带的待写入数据写入存储池30中。或者,客户端20可以通过网络向计算机系统10发送读操作请求,计算机系统10可以根据读操作请求,从存储池30中读出读操作请求请求读取的数据,并向客户端20发送从存储池30中读取的数据。
可选地,图1中的计算机系统10可以是包括若干台主机和/或计算设备的集群。存储池 30可以是包括若干个存储设备的存储设备集群。客户端20例如为手机、平板电脑、虚拟机、容器、个人电脑等,在本申请实施例中客户端20可以是任何需从计算机系统10获取key对应value的设备。客户端20的数量可以是多个,计算机系统10可同时处理多个客户端20发送的I/O操作请求,实现并发处理。
在本申请实施例中,计算机系统10中部署有键值存储系统。该键值存储系统用于采用键值对的方式,对存储池中存储的数据或数据的元数据进行管理。可选地,键值存储系统可以通过部署在该计算机系统10中的物理机、虚拟机或容器实现。
需要说明的是,图1所示的应用场景是本申请实施例提供的键值存储系统的数据管理方法所涉及的应用场景的一种示例,并不用于限定本申请实施例提供的键值存储系统的数据管理方法所涉及的应用场景,该应用场景还可以具有其它类型的架构或变形。
本申请实施例提供了一种键值存储系统的数据管理方法。该键值存储系统的逻辑地址空间可以包括多个子逻辑地址空间,该多个子逻辑地址空间互不重叠,且多个子逻辑地址空间中存储的数据可以分别使用多个数据结构一一对应管理。在该方法中,通过获取I/O操作请求,基于I/O操作请求中携带的待操作数据的索引信息,在用于管理键值存储系统的逻辑地址空间的多个数据结构中,确定用于存储待操作数据的键值对的目标数据结构,并在目标数据结构中对键值对进行I/O操作。
由于该键值存储系统中的多个子逻辑地址空间分别由多个数据结构进行管理,相较于采用一个数据结构管理键值存储系统的逻辑地址空间,减小了该多个数据结构中每个数据结构需要存储的数据量,提高了该键值存储系统根据该数据结构对I/O操作请求进行响应的效率和键值存储系统的性能,能够通过该数据结构向用户提供稳定且可预测的读性能。
并且,由于键值存储系统的多个子逻辑地址空间分别由多个数据结构管理,键值存储系统能够通过该多个数据结构提供存储服务,提高该键值存储系统的并行处理能力,提高了键值存储系统的服务性能。
可选地,将键值存储系统的逻辑地址空间划分为多个子逻辑地址空间时,其划分方式和划分得到的子逻辑地址空间的总数,可以根据应用需求设置。例如,可以根据应用需求,将该键值存储系统的逻辑地址空间平均地划分为多个子逻辑地址空间。或者,根据键值存储系统的最大存储容量和应用需求,确定每个子逻辑地址空间的最大存储容量和该键值存储系统中子逻辑地址空间的总数,然后按照该总数和多个子逻辑地址空间各自的最大存储容量,划分得到多个子逻辑地址空间。
在一种可实现方式中,当采用键值存储系统管理存储池中存储的数据的元数据时,可以根据应用需求确定元数据与通过该元数据管理的数据的比例,并根据该比例和存储池的最大存储容量,确定该键值存储系统的最大存储容量,并根据该键值存储系统的最大存储容量和每个子逻辑地址空间的最大存储容量,确定键值存储系统包括的子逻辑地址空间的总数,并根据该总数和每个子逻辑地址空间的最大存储容量,对键值存储系统的逻辑地址空间进行划分。
并且,为了保证键值存储空间对I/O操作请求的处理效率,可以通过合理划分子逻辑地址空间,控制用于管理子逻辑地址空间的数据结构的存储容量。例如,当用于管理子逻辑地址空间的数据结构为树状数据结构时,可以根据该树状数据结构中的每个数据层的最大存储容量确定该树状数据结构的最大存储容量,然后根据该键值存储系统的最大存储容量和树状数据结构的最大存储容量,对键值存储系统的逻辑地址空间进行划分,以控制用于管理子逻辑地址空间的数据结构的深度小于指定深度,使得数据结构保持为较低的层次及数据结构中的数据层保持为较小的总层数。从而以保证I/O操作的整体开销可控,提供稳定的I/O性能。
I/O操作请求包括写操作请求和读操作请求。下面分别对根据写操作请求向键值存储系统中写数据的过程,及根据读操作请求从键值存储系统中读数据的过程进行说明。
图2是本申请实施例提供的一种根据写操作请求向键值存储系统中写入待写入数据的方法流程图。如图2所示,该写数据的过程包括:
步骤201、计算机系统获取写操作请求,写操作请求中携带有待写入数据和待写入数据的索引信息。
用户需要向存储池中写入数据时,可以通过客户端向计算机系统发送写操作请求,以便于计算机系统根据该写操作请求执行数据写入操作。例如,当用户使用云盘时,用户可以通过云盘的客户端向计算机系统发送写操作请求,该写操作请求可以携带有待写入数据和待写入数据的索引信息。
其中,索引信息为用于索引待写入数据的键的信息。在一种可实现方式中,索引信息可以是键本身。例如,索引信息和键均包括I/O操作请求的发起者的标识和待操作数据的逻辑地址。可选地,索引信息和键还可以包括I/O操作请求的发起者的链接克隆标识和快照标识,即索引信息和键均可以包括四元组,该四元组包括:I/O操作请求的发起者的逻辑单元号标识、链接克隆标识、逻辑块地址和快照标识。其中,I/O操作请求的发起者的链接克隆标识用于指示针对该发起者生成的连接克隆。I/O操作请求的发起者的快照标识用于指示根据该发起者生成的快照。在一种实现场景中,当用户使用云盘时,该I/O操作请求的发起者为云盘,则索引信息和键均包括云盘的标识、待操作数据的逻辑地址、云盘的链接克隆标识和快照标识。
在另一种可实现方式中,索引信息包括用于索引键的关键字,键可以根据该关键字索引得到。例如,键包括I/O操作请求的发起者的标识和待操作数据的逻辑地址,索引信息为用于索引到该I/O操作请求的发起者的标识和待操作数据的逻辑地址的关键字。在该实现方式中,关键字的实现方式可以根据应用需求确定,且键包括的内容也可以根据应用需求进行调整。
步骤202、计算机系统根据写操作请求,确定待写入数据的键值对,得到携带有待写入数据和待写入数据的键值对的写请求。
在本申请实施例中,计算机系统中部署有键值存储系统。该键值存储系统用于采用键值对的方式,对存储池中存储的数据或存储池中存储的数据的元数据进行管理。因此,计算机系统获取写操作请求后,可以根据该写操作请求,确定该待写入数据的键值对,以便于键值存储系统根据该键值对对待写入数据或待写入数据的元数据进行管理。
其中,键值对中的键指示用于查找用户写入的数据的物理存储地址的关键字,键值对中的值指示该数据的物理存储地址,或者,键值对中的值是数据本身。并且,当键值对中的值是待写入数据的物理存储地址时,键值存储系统用于对待写入数据的元数据进行管理。当键值对中的值是待写入数据本身时,键值存储系统用于对待写入数据进行管理。相应的,确定待写入数据的键值对的过程包括分别确定键值对中的键和值的过程。
根据步骤201中的内容可知,键可以根据索引信息确定。并且,根据步骤201中描述的索引信息和键之间的关系,根据索引信息确定键的实现方式至少包括以下两种:
在一种可实现方式中,可以将索引信息本身确定为键。例如,当索引信息包括四元组,且四元组包括云盘的标识、待操作数据的逻辑地址、云盘的链接克隆标识和快照标识时,可以直接将该四元组确定为键。
在另一种可实现方式中,当索引信息包括用于索引键的关键字时,在基于索引信息,确定待操作数据的键时,可以基于关键字进行索引,以得到键。例如,索引信息包括用于索引键的关键字时,可以基于该关键字索引得到键包括云盘的标识、待操作数据的逻辑地址、云盘的链接克隆标识和快照标识。
另外,在本申请实施例中,键值对中的值可以指示待写入数据的物理存储地址,或者,值为待写入数据本身。则针对键值对中值的不同实现方式,根据写操作请求,确定待写入数据的键值对,还包括:当值指示待写入数据的物理存储地址时,可以根据键值存储系统的实现逻辑确定待写入数据的物理存储地址,并将该物理存储地址确定为键值对中的值,当值为待写入数据本身时,可以将该待写入请求中携带的待写入数据确定为键值对中的值。
在一种可实现方式中,如图3所示,计算机系统10包括:I/O操作请求处理模块101和键值存储系统102。该I/O操作请求处理模块101用于根据获取到的写操作请求,确定待写入数据的键值对,得到携带有待写入数据和键值对的写请求,并将该写请求发送至键值存储系统。键值存储系统102用于根据该写请求,对待写入数据的元数据或待写入数据本身进行管理。
步骤203、计算机系统将写请求写入数据日志。
在本申请实施例中,计算机系统配置有日志文件,该日志文件可以包括数据日志。该日志文件可以部署在非易失存储介质上,以保证日志文件中存储的内容在出现掉电等故障后不会丢失。例如,如图4所示,硬盘上部署有日志文件a,该日志文件a包括数据日志a1。计算机系统得到写请求后,可以先将该写请求写入数据日志中,再根据写请求将键值对存储在数据结构中,以保证写数据操作的故障可恢复以及系统的数据一致性和可靠性。在一种可实现方式中,用于管理键值存储系统的多个子逻辑地址空间的多个数据结构共用一个数据日志,这样可以降低键值存储系统的实现成本。
在一种可实现方式中,如图3所示,键值存储系统102包括:日志模块1021。将写请求写入数据日志的操作可以由该日志模块1021执行。并且,如图3所示,该键值存储系统102还包括:故障恢复模块1022,该故障恢复模块1022用于在计算机系统出现故障后,通过重放日志文件,恢复异常关闭的系统和数据,以实现故障恢复。
并且,为进一步保证数据的安全性,该键值存储系统中还设置有缓存机制。缓存可以部署在非易失性存储介质上。在键值存储系统接收到写操作请求或写请求后,可以先将该写操作请求或写请求写入缓存中,然后从缓存中将写操作请求或写请求写入日志文件中。由于写缓存的速度快于写日志文件的速度,通过该实现方式,能够避免在写日志文件的过程中键值存储系统出现故障导致的数据丢失。
相应的,如图3所示,键值存储系统102还包括:日志缓存模块1023。该日志缓存模块 1023用于缓存写操作请求或写请求,以便于从缓存中将写操作请求或写请求写入日志文件中。
步骤204、计算机系统将写请求写入数据日志后,发送针对写操作请求的写操作响应。
在将写请求写入数据日志后,写请求就不会因掉电等故障后丢失,就能够保证完成该写请求所请求的写操作。因此,可以在将写请求写入数据日志后,发送针对写操作请求的写操作响应,以指示完成该写操作请求指示的写操作。通过在将写请求写入数据日志后立即发送写操作响应,能够实现对客户端的快速响应,提高用户体验。
步骤205、计算机系统基于键在多个数据结构中确定用于存储待写入数据的键值对的目标数据结构。
在一种可实现方式中,当键包括待操作数据的逻辑地址,逻辑地址通过数值表示时,在基于键确定用于存储待写入数据的键值对的目标数据结构时,可以通过对逻辑地址取余数实现。例如,基于键确定用于存储待写入数据的键值对的目标数据结构的规则可以为:多个数据结构中同一数据结构中存储的键值对中逻辑地址对指定数值的余数相等,不同数据结构中存储的键值对中逻辑地址对指定数值的余数不等。
例如,假设键值存储系统的逻辑地址空间包括5个子逻辑地址空间,该5个子逻辑地址空间中存储的数据分别使用5个数据结构进行管理,且该5个数据结构存储的键值对中逻辑地址对指定数值的余数分别为1、2、3、4和5,则当键值对中逻辑地址对指定数值的余数为 1时,使用第一个数据结构对该写操作请求中待写入数据或其元数据进行管理,当键值对中逻辑地址对指定数值的余数为2时,使用第二个数据结构对该写操作请求中待写入数据或其元数据进行管理,当键值对中逻辑地址对指定数值的余数为3时,使用第三个数据结构对该写操作请求中待写入数据或其元数据进行管理,当键值对中逻辑地址对指定数值的余数为4 时,使用第四个数据结构对该写操作请求中待写入数据或其元数据进行管理,当键值对中逻辑地址对指定数值的余数为5时,使用第五个数据结构对该写操作请求中待写入数据或其元数据进行管理。
可选的,该规则可以为键值存储系统中预置的规则,也可以是根据需求配置的规则。例如,键值存储系统中可以预留应用程序接口,以通过该应用程序接口根据应用需求配置该规则。
通过在多个数据结构中确定用于存储待写入数据的键值对的目标数据结构,能够将不同的写操作请求较均匀地分配到不同的数据结构上,能够使不同数据结构中存储的数据的总容量处于较均衡的状态,能够保证键值存储系统的整体性能。并且,在该确定目标数据结构的实现方式中,通过执行对键值对中逻辑地址取余的一次操作就能够确定目标数据结构,其实现过程简单,能够简化写操作的实现过程。
其中,该规则可以看成是将写操作请求打散到多个数据结构中的目标数据结构进行处理,因此该规则可称为“静态打散规则”。且该规则可以由功能模块实现,相应的,如图4所示,该功能模块可以称为“静态索引层”。在一种可实现方式中,该静态索引层的功能可以通过图3中I/O操作请求处理模块101实现。并且,如图3所示,键值存储系统102还包括:空间管理模块1024,该空间管理模块1024用于确定用于存储该写操作请求的键值对的物理存储空间。并且,该空间管理模块1024还用于管理存储空间的使用状态。例如,空间管理模块1024可以根据存储空间的使用状态,将存储空间标记为已使用或未使用,以便于为未使用的存储空间进行垃圾回收。
步骤206、将待写入数据的键值对存储在目标数据结构的第一有序数据层中。
如图4所示,本申请实施例提供的数据结构包括第一有序数据层、第二有序数据层、第三数据层和第四有序数据层。其中,第一有序数据层和第二有序数据层位于内存中,第三数据层和第四有序数据层位于硬盘中。该硬盘可以是固态硬盘(solid state drive,SSD)。待写入数据的键值对写入数据结构的过程可以看成是在第一有序数据层、第二有序数据层、第三数据层和第四有序数据层中传递,并存储在第四有序数据层中的过程。因此,计算机系统确定用于存储待写入数据的键值对的目标数据结构后,可以先将该待写入数据的键值对写入该目标数据结构的第一有序数据层中。
该第一有序数据层支持更新写操作。并且,在向第一有序数据层中写键值对的过程中,可以使用链表结构(如跳表结构)对向该第一有序数据层中写入的键值对进行排序,以便于将键值对有序地写入该第一有序数据层。其中,在对键值对进行排序时,可以按照键的大小顺序进行。例如,当键包括上述四元组时,该四元组可以表示为64位的数字串,可以根据键的数字串的大小对键进行排序。
在一种可实现方式中,第一有序数据层包括多个SSTable。该第一有序数据层使用该多个有序字符串表有序地存储键值对。可选地,该第一有序数据层可以为内存表(memTable)。
步骤207、当达到参考条件时,计算机系统将第一有序数据层转换为第二有序数据层。
在一种可实现方式中,参考条件可以为第一有序数据层的数据量达到第一数据量阈值,此时,计算机系统可以将该第一有序数据层转化为第二有序数据层,以待将该第二有序数据层中的键值对写入硬盘中,并使用新的第一有序数据层存储键值对,以便于能够持续地为用户提供写服务。其中,新的第一有序数据层是在达到第一参考条件时新生成的第一有序数据层,且该新的有序数据层是空的数据层。
对应于该实现方式,在向第一有序数据层中写数据的过程中,需要先判断该第一有序数据层中的数据是否达到第一数据量阈值,当该第一有序数据层中的数据未达到第一数据量阈值时,向该第一有序数据层中写入数据,当该第一有序数据层中的数据达到第一数据量阈值时,将该第一有序数据层转换为第二有序数据层,并生成新的第一有序数据层,然后将数据写入新的第一有序数据层。
在另一种可实现方式中,参考条件可以为计算机系统中的数据日志的容量达到参考容量阈值。数据日志的容量可以根据为键值存储系统分配的内存容量匹配设置,当数据日志的容量达到参考容量阈值时,说明为该键值存储系统分配的内存容量即将耗尽,则需要将内存中存储的键值对写入硬盘中。当用于管理键值存储系统的多个子逻辑地址空间的多个数据结构共用一个数据日志时,若该数据日志的容量达到参考容量阈值,说明该多个数据结构使用的内存容量即将耗尽,则可将该多个数据结构中的第一有序数据层均转换为第二有序数据层。当用于管理每个子逻辑地址空间的数据结构单独使用一个数据日志时,当任一数据结构使用的数据日志的容量达到参考容量阈值,说明该数据结构使用的内存容量即将耗尽,则可将该数据结构中的第一有序数据层均转换为第二有序数据层。
并且,在数据日志的容量达到参考容量阈值后,为避免键值存储系统提供的写服务出现阻塞,计算机系统可以新建一个新的数据日志,以使用该新的数据日志实现该达到参考容量阈值的数据日志的功能。
其中,该采用第二有序数据层保存键值对的过程,可以看成是从内存向硬盘写入键值对的过渡过程,此时,为了避免因第二有序数据层中数据的修改导致向硬盘中写操作失败,该第二有序数据层可以为不支持修改操作的数据层。
由上可以看出,第一有序数据层和第二有序数据层均用于在内存中缓存键值对。通过向第一有序数据层中写键值对,并在达到参考条件时,将该第一有序数据层转换成第二有序数据层,然后将该第二有序数据层写入硬盘中,能够将写操作请求的键值对在内存中聚集,将多个数据量较小的写入过程转换为向硬盘中一次性写入具有较大数据块的写入过程,能够提高向硬盘上写数据的带宽利用率。
在一种可实现方式中,第二有序数据层包括多个SSTable。该第二有序数据层使用该多个 SSTable存储键值对。可选地,该第二有序数据层可以为不可修改内存表(immutable memTable)。
步骤208、将第二有序数据层中的数据写入目标数据结构的第三数据层中,第三数据层位于硬盘中。
其中,第三数据层支持追加写操作。将第二有序数据层中的数据写入第三数据层中的过程,也称为将内存中的数据持久化到硬盘中的刷回操作。将第二有序数据层中的数据写入第三数据层中后,可以删除该第二有序数据层。并且,将第二有序数据层中的数据写入第三数据层中之后,由于数据已存储在非易失性存储介质中了,不会因掉电丢失,因此,可以删除数据日志中用于请求写入该数据的写请求。
可选的,第三数据层可以为无序数据层。当该第三数据层为无序数据层时,在将第二有序数据层中的数据写入第三数据层的过程中,无需对写入的数据进行排序,缩短了数据写入时间,能够加快将第二有序数据层中的数据写入第三数据层中的速度。且由于第三数据层位于硬盘中,第二有序数据层位于内存中,当将第二有序数据层中的数据写入第三数据层中的速度较快时,能够降低第二有序数据层中的数据因掉电出现丢失的概率,提高了写数据成功的概率。
并且,该第三数据层允许键值覆盖。当第三数据层支持键值覆盖时,在将第二有序数据层中的数据写入第三数据层的过程中,无需对同一键对应的键值对进行处理,缩短了数据写入时间,能够加快将第二有序数据层中的数据写入第三数据层中的速度,并提高写数据成功的概率。
在一种可实现方式中,第三有序数据层包括多个SSTable。该第三有序数据层使用该多个 SSTable存储键值对。并且,该多个SSTable中存储的数据允许键值覆盖。
并且,该第三数据层不仅可以部署在硬盘中,还可以同时缓存在内存中。此时,当计算机系统需要读取该第三数据层中的数据时,由于内存具有较快的读速度,能够加快从该第三数据层中读取数据的速度。此时,如图3所示,键值存储系统还包括:数据缓存模块1025,该数据缓存模块1025用于在内存中缓存该第三数据层。
进一步的,用于管理键值存储系统的多个数据结构的第三数据层使用的硬盘资源或内存资源可以共享。例如,假设多个数据结构的第三数据层都被配置为包括5个SSTable,但是在键值存储系统提供服务的过程中,可以根据应用需求调整每个数据结构包括的SSTable的总数。例如,部分数据结构的第三数据层能够被调整为包括6个SSTable,部分数据结构的第三数据层能够被调整为包括4个SSTable。
步骤209、当第三数据层的数据量达到第二数据量阈值时,使用第三数据层中的键值对和目标数据结构的第四有序数据层中的键值对,更新第四有序数据层中的键值对。
其中,第四有序数据层位于硬盘中,第四有序数据层支持追加写操作。也即是,在向第四有序数据层中写数据时,可以将数据写在该第四有序数据层中已写入数据的尾部。
当第三数据层的数据量达到第二数据量阈值时,需要将该第三数据层中的键值对写入到第四有序数据层中。且将该第三数据层中的键值对写入到第四有序数据层中时,可以将该第三数据层中的键值对和第四有序数据层中原有的键值对进行合并排序,然后使用第四有序数据层存储经过合并排序后的键值对,实现对该第四有序数据层中的键值对的更新。
在一种可实现方式中,第三数据层中的键值对和第四有序数据层中原有的键值对的合并排序过程包括:
步骤S1:将第三数据层中的键值对读到内存中。
可选的,当第三数据层为无序的数据层时,该第三数据层中包括同一个键对应的多个键值对。此时,该步骤还包括:删除该第三数据层中的无效键值对。其中,对于同一个键对应的多个键值对,写入时间最晚的键值对为有效键值对,写入时间不是最晚的键值对是无效键值对。
并且,在删除第三数据层中的无效键值对后,还可以对第三数据层中的有效键值对进行排序。其中,对键值对进行排序是指按照键的大小对键值对进行排序。或者,也可以不在该步骤中对第三数据层中的有效键值对进行排序,该对第三数据层中的有效键值对进行排序的过程,可以在后续步骤S3中执行。
步骤S2:将第四有序数据层中与第三数据层中键相同的键值对读到内存中。
对第三数据层和第四有序数据层中的键值对进行合并排序,是指对第三数据层和第四有序数据层中具有相同键的键值对进行合并排序,因此该第四有序数据层中需要读取到内存中的键值对是与第三数据层中键相同的键值对。
步骤S3:删除从第四有序数据层中读取到内存中的无效键值对,对从第三数据层和第四有序数据层读取到内存中的有效键值对进行排序,将排序后的有效键值对存储到第四有序数据层的数据节点中。
其中,步骤S2中读入到内存中的键值对的写入时间早于步骤S1中读入的键值对的写入时间,该写入时间早的键值对即为从第四有序数据层中读取到内存中的无效键值对。
可选的,为保证键值存储系统的服务性能,在该步骤S3中,将排序后的有效键值对存储到第四有序数据层的数据节点中时,还可以获取该第四有序数据层中未读取到内存中的数据,并在硬盘中的其他存储位置中存储排序后的有效键值对和该未读取到内存中的数据,即在其他位置存储合并排序后的第四有序数据层,实现对数据结构的异地更新,使得硬盘中保存有不同版本的第四有序数据层。该其他位置为未存储有合并排序前的第四有序数据层的存储位置。
并且,为了对合并排序前后的第四有序数据层进行区分,还可以为第四有序数据层设置版本号。同时,还可以为合并排序前的第四有序数据层设置延迟删除机制。也即是,在对第三数据层和第四有序数据层中的键值对进行合并排序的过程中,仍在硬盘中保存第四有序数据层,并在得到经过合并排序后的第四有序数据层后,不立即删除合并排序前的第四有序数据层。这样一方面能够在合并排序过程中使用合并排序前的第四有序数据层,向用户提供服务,使得读写操作能够并行执行,以不至于因合并排序导致读请求阻塞,避免产生读波动。另一方面能够在合并排序出现故障和/或根据应用需求,将第四有序数据层回退至较早的版本,保证数据的一致性。其中,延迟删除旧版本的第四有序数据层中的数据的时长可以根据应用需求或存储空间的大小等确定,本申请实施例对其不做具体限定。并且,键值存储系统还可以分别使用第四有序数据层的多个版本提供服务,实现多线程的并发访问服务。
需要说明的是,对第三数据层和第四有序数据层的合并排序操作可以串行执行。也即是,若在当前合并排序的过程中,若第三数据层的数据量又达到第二数据量阈值,需要在当前合并排序过程完成后,再对第三数据层和第四有序数据层执行合并排序过程。这样一来,可以保证合并排序操作的有序实现。
在一种可实现方式中,第四有序数据层可以为有序树结构。该第四有序数据层包括根节点、中间节点和叶子节点。根节点和中间节点均用于存储待操作数据的键,叶子节点用于存储中间节点存储的键对应的键值对。其中,根节点中存储的键的范围与中间节点中存储的键的范围存在键值覆盖。根节点用于存储待操作数据的键和指向中间节点的指向信息。中间节点用于存储待操作数据的键和指向叶子节点的指向信息。叶子节点用于存储待操作数据的键值对。
在一种实现方式中,根节点和中间节点中用于指向节点的指向信息可以通过指针实现。例如,根节点还用于存储指向与根节点存储的键的范围存在范围覆盖的中间节点的指针,中间节点还用于存储指向与中间节点存储的键的范围存在范围覆盖的叶子节点的指针。
可选的,当使用指针指示节点的存储位置时,叶子节点还用于存储指向相邻叶子节点的指针。其中,相邻叶子节点存储的键的范围与叶子节点存储的键的范围相邻。这样一来,在该第四有序数据层中进行范围查找时,能够通过该执行相邻叶子结点的指针快速确定当前叶子结点的相邻叶子结点的存储位置,以加快范围查找时的查找速度。
在另一种实现方式中,根节点和中间节点中用于指向节点的指向信息可以通过节点和该节点的存储位置信息的对应关系表示。例如,该指向信息可以通过存储有根节点、中间节点和叶子节点中至少一个节点存储的节点标识与节点标识指示的节点的存储位置信息的对应关系表示。
其中,根节点还存储有用于存储根节点存储的键所覆盖的键的中间节点的节点标识,中间节点中还存储有用于存储中间节点存储的键所覆盖的键的叶子节点的节点标识。此时,根据节点标识与节点标识指示的节点的存储位置信息的对应关系,能够直接确定节点中存储的节点标识指示的节点的存储位置信息,而无需根据节点中存储的指针在第四有序数据层中进行层层查找,加快了在第四有序数据层中查找数据的速度。
在一种可实现方式中,如图4所示,键值存储系统的内存中还存储有哈希映射表,哈希映射表用于记录根节点、中间节点和叶子节点中至少一个节点存储的节点标识与节点标识指示的节点的存储位置信息的对应关系。该哈希映射表又称为节点转换层(nodetranslation layer,NTL)表。并且,为了进一步保证键值存储系统的读速度,一个数据结构中节点标识与节点标识指示的节点的存储位置信息的对应关系可以采用NTL表记录。
另外,如图4所示,日志文件a还包括映射表日志a2,为了避免内存中的节点标识与节点标识指示的节点的存储位置信息的对应关系因掉电等故障丢失,对哈希映射表记载的对应关系的任意修改均可以先持久化到映射表日志a2中,以便于在键值存储系统出现故障时,键值存储系统能够通过重放映射表日志a2,恢复哈希映射表。
当通过用于指向节点的指向信息通过节点和该节点的存储位置信息的对应关系表示时,在对第三数据层和第四有序数据层中的数据进行合并排序后,节点和节点的存储位置信息的实际对应关系可能会根据合并排序结果发生变化,因此,在合并排序完成后,还需要根据数据的实际存储情况更新该对应关系。其中,更新该对应关系的实现方式包括:对于被更新的节点,修改对应关系中记载的被更新的节点的存储位置。对于新增的节点,在对应关系中增加新增的节点与其存储位置信息的对应关系。
并且,当采用指针实现用于指向节点的指向信息时,对于合并更新后的部分节点(如图 4中节点a),其存储位置发生变化,该存储位置发生变化的节点的父节点(如图4中节点b) 的指针需要被修改,而该父节点(如图4中节点b)的修改又会造成该父节点(如图4中节点b)的父节点(如图4中节点c)需要被修改。因此,合并更新后位置发生变化的一个节点的更新,会导致该节点上溯到根节点的全路径更新。而采用通过节点和该节点的存储位置信息的对应关系实现指向节点的指向信息时,对于合并更新后位置发生变化的一个节点的更新,仅需更新该对应关系中记载的存储位置信息,因此能够避免节点更新造成的全路径更新。
可选地,第四有序数据层可以为B+树(B+Tree)。
进一步的,为了提高读性能,还可以在内存中缓存该第四有序数据层的根节点和中间节点,以利用内存较快的读速度快速确定存储有读请求请求读取的数据的叶子节点的存储位置,从而加快从该第四有序数据层中读取数据的速度。并且,这样还能够减小读操作过程中访问硬盘的次数,以减小读操作的硬盘访问开销。其中,当在内存中缓存第三数据层和第四有序数据层中的根节点和中间节点时,可以通过读取内存直接找到用于存储待读取数据的叶子节点的位置信息,然后可以直接根据该位置信息在硬盘中找到该叶子节点,并读取该待读取数据,因此能够通过一次访盘读取到待读取数据,能够将读操作的访问开销维持在一次访盘,减小了读操作的访问开销。此时,图3中的数据缓存模块1025还用于在内存中缓存第四有序数据层的根节点和中间节点。
并且,可以通过设置用于管理键值存储系统的数据结构的总数,以及每个数据结构中第四有序数据层中各层节点的总数,控制数据结构的层次和数据结构中第四有序数据层的深度,例如,将第四有序数据层的有序树的深度控制为小于3,进而保证读操作的整体开销可控,提供稳定的读性能。并且,能够减小数据结构的复杂度,减少写入数据过程中需要执行的操作,能够降低计算机系统的写放大(write amplification)。其中,写放大是计算机系统的实际写数据量与用户写入的数据量的比值,当写放大越大时,计算机系统的额外开销越大。
其中,如图3所示,键值存储系统还包括:存储模块1026,该存储模块1026用于将键值对写入目标数据结构中,即实现上述步骤206至步骤209。
图5是本申请实施例提供的一种根据读操作请求从键值存储系统中读数据的方法流程图。其中,用于管理该键值存储系统的子逻辑空间的数据结构的实现方式,请相应参考写数据过程中的相关描述,此处不再赘述。如图5所示,该读数据的过程包括:
步骤501、计算机系统获取读操作请求,读操作请求中携带有待读取数据的索引信息。
用户需要从存储池中读取数据时,可以通过客户端向计算机系统发送读操作请求,以便于计算机系统根据该读操作请求执行数据读取操作。例如,当用户使用云盘时,用户可以通过云盘的客户端向计算机系统发送读操作请求。该读操作请求携带有待读取数据的索引信息。
步骤502、计算机系统根据读操作请求,确定待读取数据的键,得到携带有待读取数据的键的读请求。
计算机系统可以根据读操作请求中携带的待读取数据的索引信息,确定待读取数据的键,以得到携带有待读取数据的键的读请求,以便于根据该待读取数据的键在键值存储系统中获取待读取数据的键值对。该根据索引信息确定待读取数据的键的实现方式请相应参考步骤202 中的相关内容,此处不再赘述。
在一种可实现方式中,如图3所示,计算机系统10包括:I/O操作请求处理模块101和键值存储系统102。该I/O操作请求处理模块101用于根据获取到的读操作请求,确定待写入数据的键,得到携带有待读取数据的键的读请求,并将该读请求发送至键值存储系统。键值存储系统102用于根据该读请求,查找读请求中键对应的值。
步骤503、计算机系统基于键在多个数据结构中确定用于存储待读取数据的键值对的目标数据结构。
在写数据的过程中,是根据键确定用于存储待写入数据的键值对的目标数据结构的,因此当需要读取写入的数据时,可以按照确定用于存储待写入数据的目标数据结构所使用的逻辑,确定用于存储待读取数据的键值对的目标数据结构。也即是,可以根据待读取数据的键定用于存储待读取数据的键值对的目标数据结构。并且,该根据键确定目标数据结构的实现方式,请相应参考写操作流程中根据键确定目标数据结构的实现方式,此处不再赘述。
步骤504、计算机系统基于读请求,查找目标数据结构的第一有序数据层中是否存储有待读取数据的键。
第一有序数据层位于内存中,由于内存具有较快的读速度,且由于向目标数据结构写数据时,先写入第一有序数据层中,再将第一有序数据层转换为第二有序数据层,以待写入硬盘中。因此,当需要从目标数据结构中读取待读取数据时,计算机系统可以先从第一有序数据层进行查找。并且,查找待读取数据时,可以根据待读取数据的键进行查找。在查找结果指示第一有序数据层中存储有待读取数据的键的值时,返回该键的值,以便于根据该键的值获取待读取数据。在查找结果指示第一有序数据层中未存储待读取数据的键时,继续执行步骤505或执行步骤206。
在一种可实现方式中,第一有序数据层支持更新写操作。并且,该第一有序数据层的实现方式请相应参考前述写数据过程中的相关内容,此处不再赘述。
需要说明的是,当目标数据结构有多个版本时,在目标数据结构中查找待读取数据的键时,可以在最新版本的目标数据结构中进行查找,以保证能够根据键值存储系统的最新状态进行查找,保证根据查找结果读取准确的数据。并且,计算机系统可以统计目标数据结构被引用的总数,以便于根据该总数确定目标数据结构的使用情况。例如,在对目标数据结构执行I/O操作时,可以将目标数据结构的引用总数加一,以指示目标数据结构正处于使用状态,并在完成对目标数据结构的I/O操作时,将目标数据结构的引用总数减一。其中,不同版本的数据结构在创建时的引用计数均为0,即数据结构的引用计数的初始值均为0。并且,为了保证对数据结构的垃圾回收过程不影响键值存储系统提供服务,当需要对数据结构进行垃圾回收时,需要保证该数据结构的引用计数为0且该数据结构的版本不是当前最新版本。
步骤505、当第一有序数据层中未存储待读取数据的键时,计算机系统基于读请求,查找目标数据结构的第二有序数据层中是否存储有待读取数据的键。
当第一有序数据层中未存储待读取数据的键时,则可以继续在目标数据结构位于内存中的数据层中进行查找,即查找目标数据结构的第二有序数据层中是否存储有待读取数据的键。并且,在查找结果指示第二有序数据层中存储有待读取数据的键的值时,返回该键的值,以便于根据该键的值获取待读取数据。在查找结果指示第二有序数据层中未存储待读取数据的键时,继续执行步骤506。其中,第二有序数据层位于内存中,且第二有序数据层不支持修改操作。
步骤506、当第二有序数据层中未存储待读取数据的键时,计算机系统基于读请求,查找目标数据结构的第三数据层中是否存储有待读取数据的键,或者,当第一有序数据层中未存储待读取数据的键,且目标数据结构中不存在第二有序数据层时,查找第三有序数据层中是否存储有待读取数据的键。
当第二有序数据层中未存储待读取数据的键时,则可以继续在目标数据结构位于硬盘中的数据层中进行查找。并且,由于将内存中的键值对写入硬盘是先写入第三数据层,再从第三数据层写入第四有序数据层,因此,当第二有序数据层中未存储待读取数据的键时,先在目标数据结构的第三数据层中查找是否存储有待读取数据的键。并且,如前,目标数据结构中在一些时机不存在第二有序数据层,则当第一有序数据层中未存储待读取数据的键时,可以直接在第三有序数据层中查找是否存储有待读取数据的键。
在查找结果指示第三数据层中存储有待读取数据的键的值时,返回该键的值,以便于根据该键的值获取待读取数据。在查找结果指示第三数据层中未存储待读取数据的键时,继续执行步骤507。其中,第三数据层支持追加写操作。
并且,当在内存中缓存第三数据层时,当查找结果指示第二有序数据层中未存储有待读取数据的键的值时,或者,当第一有序数据层中未存储待读取数据的键,且目标数据结构中不存在第二有序数据层时,可以直接在内存中缓存的第三数据层中查找待读取数据的键的值,以减少访问硬盘的次数,从而加快读速度。
步骤507、当第三数据层中未存储待读取数据的键时,计算机系统基于读请求,查找目标数据结构的第四有序数据层中是否存储有待读取数据的键。
当第三数据层中未存储待读取数据的键时,则可以继续在第四有序数据层中进行查找。并且,在查找结果指示第四有序数据层中存储有待读取数据的键的值时,返回该键的值,以便于根据该键的值获取待读取数据。在查找结果指示第四有序数据层中未存储待读取数据的键时,确定目标数据结构中未存储有待读取数据的键值对,此时可向客户端返回指示读取数据失败的信息。其中,第四有序数据层位于硬盘中,且第四有序数据层支持追加写操作。
并且,当在内存中缓存第四有序数据层中的根节点和中间节点时,当查找结果指示第三数据层中未存储有待读取数据的键的值时,可以直接在内存中,根据缓存的第四有序数据层中的根节点和中间节点,定位到该第四有序数据层中的叶子节点,然后在硬盘中对定位到的叶子节点进行查找,以查找叶子节点是否存储有待读取数据的键。通过根据内存中缓存的根节点和中间节点定位叶子节点,能够减少访问硬盘的次数,从而加快读速度。
键值存储系统的数据管理方法还包括通过该键值存储系统删除快照的过程。图6是本申请实施例提供的一种通过该键值存储系统删除快照的方法流程图。如图6所示,该快照删除的过程包括:
步骤601、计算机系统接收快照删除请求。
键值存储系统包括硬盘。该硬盘中存储有日志文件,通过回放日志文件能够在计算机系统出现故障时对计算机系统进行故障恢复。本申请实施例提供的键值存储系统支持快照服务。例如,该键值存储系统支持删除快照的服务。用户需要删除日志文件中的快照时,可以通过客户端向计算机系统发送快照删除请求,以请求计算机系统删除对应的快照。
其中,为区分不同的快照,计算机系统可以通过快照号对不同的快照进行管理,相应的,该键值存储系统存储的键值对的键包括快照号。因此,快照删除请求中可以携带有快照号,以通过该快照号指示需要删除的快照。
可选地,该键值存储系统还支持创建快照的服务,计算机系统可以根据用户的请求为用户创建快照。并且,计算机系统在创建快照后,还可以为创建的快照分配快照号,以区分不同的快照。在一种可实现方式中,计算机系统在创建快照后,可以对当前已有快照号加一,以得到新创建得到的快照的快照号。相应的,由于后创建的快照比先创建的快照更能反映键值存储系统的当前状态,因此,写入键值存储系统中的键值对中的快照号通常为当前最新创建的快照的快照号,键值存储系统可通过判断快照号的大小确定最新创建的快照,其中快照号最大的快照为最新创建的快照。
步骤602、计算机系统将快照删除请求写在日志文件中,并发送针对快照删除请求的操作完成响应。
计算机系统接收快照删除请求后,可以先将该快照删除请求写在日志文件中,并在完成将快照删除请求写在日志文件中的操作后,向发送操作完成响应,以指示已完成快照删除请求指示的快照删除操作。其中,如图4所示,日志文件a包括快照日志a3,快照删除请求具体可以在写在快照日志a3中。
由于将快照删除请求写在日志文件中的耗时比执行快照删除请求指示的快照删除操作的耗时短,通过在将快照删除请求写在日志文件后发送操作完成响应,能够对快照删除请求进行快速响应,能够为用户提供低时延的快照服务,提高用户体验。
步骤603、计算机系统基于日志文件中记录的快照删除请求,执行快照删除请求指示的快照删除操作。
在步骤602中,通过将快照删除请求写在日志文件中,能够实现对快照删除请求的记录,使得计算机系统能够根据该记录执行快照删除操作。在一种可实现方式中,计算机系统可以在第三数据层中的键值对和第四有序数据层中原有的键值对的合并排序过程中,执行快照删除操作。
由于合并排序过程和执行快照删除操作的过程涉及一些相同的操作(如修改数据结构中节点的操作),通过在合并排序的过程中执行快照删除操作,能够减小部分该相同的操作,减小计算机系统因执行该部分操作的系统开销,能够降低计算机系统的写放大。并且,还能够将快照日志中记录的多个快照删除请求批量处理,批量处理快照删除请求的过程也能够减少相同操作的执行,能够进一步降低计算机系统的写放大。
并且,在完成快照删除操作后,可以清空快照日志。其中,若快照日志中记录有快照删除请求,说明计算机系统需要执行该快照删除请求所指示的快照删除操作。
在一种可实现方式中,如图3所示,键值存储系统102还包括:快照模块1027,该快照模块1027用于提供快照服务,如提供创建快照的服务和删除快照的服务。并且,如图3所示,该键值存储系统102还包括:垃圾回收模块1028,该垃圾回收模块1028用于根据空间管理模块对存储空间的标记状态,对未使用的存储进行垃圾回收。
综上所述,在本申请实施例提供的键值存储系统的数据管理方法中,通过在用于管理键值存储系统的逻辑地址空间的多个数据结构中,确定用于存储待操作数据的键值对的目标数据结构,并在目标数据结构中对键值对进行I/O操作,由于该键值存储系统中的多个子逻辑地址空间分别由多个数据结构进行管理,相较于采用一个数据结构管理键值存储系统的逻辑地址空间,减小了该多个数据结构中每个数据结构需要存储的数据量,提高了该键值存储系统根据该数据结构对I/O操作请求进行响应的效率和键值存储系统的性能,能够通过该数据结构向用户提供稳定且可预测的读性能。
并且,由于键值存储系统的多个子逻辑地址空间分别由多个数据结构管理,键值存储系统能够通过该多个数据结构提供存储服务,提高该键值存储系统的并行处理能力,提高了键值存储系统的服务性能。
需要说明的是,本申请实施例提供的键值存储系统的数据管理方法的步骤先后顺序可以进行适当调整,步骤也可以根据情况进行相应增减。任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化的方法,都应涵盖在本申请的保护范围之内,因此不再赘述。
本申请实施例还提供了一种键值存储系统的数据管理装置。键值存储系统的逻辑地址空间包括:多个子逻辑地址空间,多个子逻辑地址空间互不重叠,多个子逻辑地址空间中存储的数据分别使用多个数据结构一一对应管理。如图7所示,该键值存储系统的数据管理装置 70包括:
获取模块701,用于获取输入/输出I/O操作请求,I/O操作请求中携带有待操作数据的索引信息。
确定模块702,用于基于索引信息,确定待操作数据的键。
确定模块702,还用于基于键,在多个数据结构中确定用于存储待操作数据的键值对的目标数据结构。
处理模块703,用于在目标数据结构中对键值对进行I/O操作。
可选地,索引信息包括I/O操作请求的发起者的标识和待操作数据的逻辑地址,确定模块702,具体用于:将索引信息确定为键。
可选地,I/O操作请求的发起者为云盘。
可选地,索引信息包括用于索引键的关键字,确定模块702,具体用于:基于关键字进行索引,得到键,键包括I/O操作请求的发起者的标识和待操作数据的逻辑地址。
可选地,I/O操作请求为写操作请求,处理模块703,具体用于:将键值对存储在目标数据结构的第一有序数据层中,第一有序数据层位于内存中,且第一有序数据层支持更新写操作;当达到参考条件时,将第一有序数据层转换为第二有序数据层,第二有序数据层位于内存中,且第二有序数据层不支持修改操作;将第二有序数据层中的键值对写入目标数据结构的第三数据层中,第三数据层位于硬盘中,且第三数据层支持追加写操作;当第三数据层的数据量达到第二数据量阈值时,使用第三数据层中的键值对和目标数据结构的第四有序数据层中的键值对,更新第四有序数据层中的键值对,第四有序数据层位于硬盘中,且第四有序数据层支持追加写操作。
可选地,I/O操作请求为读操作请求,待操作数据为待读取数据,处理模块703,具体用于:查找目标数据结构的第一有序数据层中是否存储有待读取数据的键,第一有序数据层位于内存中,且第一有序数据层支持更新写操作;当第一有序数据层中未存储待读取数据的键时,查找目标数据结构的第二有序数据层中是否存储有待读取数据的键,第二有序数据层位于内存中,且第二有序数据层不支持修改操作;当第二有序数据层中未存储待读取数据的键时,查找目标数据结构的第三数据层中是否存储有待读取数据的键,第三数据层位于硬盘中,且第三数据层支持追加写操作;或者,当第一有序数据层中未存储待读取数据的键,且目标数据结构中不存在第二有序数据层时,查找第三有序数据层中是否存储有待读取数据的键;当第三数据层中未存储待读取数据的键时,查找目标数据结构的第四有序数据层中是否存储有待读取数据的键,第四有序数据层位于硬盘中,且第四有序数据层支持追加写操作。
可选地,第四有序数据层包括根节点、中间节点和叶子节点,根节点和中间节点均用于存储待操作数据的键,根节点能够存储的键的范围覆盖中间节点能够存储的键的范围,叶子节点存储有中间节点存储的键对应的键值对。
并且,根节点还存储有用于存储根节点存储的键所覆盖的键的中间节点的节点标识,中间节点中还存储有用于存储中间节点存储的键所覆盖的键的叶子节点的节点标识。
进一步地,键值存储系统中还存储有哈希映射表,哈希映射表用于存储根节点、中间节点和叶子节点中至少一个节点存储的节点标识与节点标识指示的节点的存储位置信息的对应关系。
可选地,第三数据层为无序数据层。
可选地,第四有序数据层为树状数据结构,第四有序数据层的深度小于3。
可选地,更新后的第四有序数据层的存储位置与更新前的第四有序数据层的存储位置不同,且更新前的第四有序数据层和更新后的第四有序数据层使用不同版本号进行标识。
可选地,键包括待操作数据的逻辑地址,逻辑地址通过数值表示,多个数据结构中同一数据结构中存储的键值对中逻辑地址对指定数值的余数相等,不同数据结构中存储的键值对中逻辑地址对指定数值的余数不等。
可选地,键值存储系统包括硬盘,硬盘中存储有日志文件,如图8所示,键值存储系统的数据管理装置70还包括:
接收模块704,用于接收快照删除请求;
处理模块703,还用于将快照删除请求写在日志文件中,并发送针对快照删除请求的操作完成响应;
处理模块703,还用于基于日志文件中记录的快照删除请求,执行快照删除请求指示的快照删除操作。
综上所述,在本申请实施例提供的键值存储系统的数据管理装置中,确定模块在用于管理键值存储系统的逻辑地址空间的多个数据结构中,确定用于存储待操作数据的键值对的目标数据结构,处理模块在目标数据结构中对键值对进行I/O操作,由于该键值存储系统中的多个子逻辑地址空间分别由多个数据结构进行管理,相较于采用一个数据结构管理键值存储系统的逻辑地址空间,减小了该多个数据结构中每个数据结构需要存储的数据量,提高了该键值存储系统根据该数据结构对I/O操作请求进行响应的效率和键值存储系统的性能,能够通过该数据结构向用户提供稳定且可预测的读性能。
并且,由于键值存储系统的多个子逻辑地址空间分别由多个数据结构管理,键值存储系统能够通过该多个数据结构提供存储服务,提高该键值存储系统的并行处理能力,提高了键值存储系统的服务性能。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置和模块的具体工作过程,可以参考前述方法实施例中的对应内容,在此不再赘述。
本申请实施例提供了一种计算机设备。图9示例性的提供了计算机设备的一种可能的架构图。如图9所示,该计算机设备90可以包括处理器901、存储器902、通信接口903和总线904。在计算机设备中,处理器901的数量可以是一个或多个,图9仅示意了其中一个处理器901。可选的,处理器901可以是中央处理器(Central Processing Unit,CPU)。若计算机设备具有多个处理器901,多个处理器901的类型可以不同,或者可以相同。可选的,计算机设备的多个处理器还可以集成为多核处理器。
存储器902存储计算机指令和数据,存储器902可以存储实现本申请提供的键值存储系统的数据管理方法所需的计算机指令和数据。存储器902可以是以下存储介质的任一种或任一种组合:非易失性存储器(如只读存储器(Read-Only Memory,ROM)、固态硬盘(Solid State Disk,SSD)、硬盘(Hard Disk Drive,HDD)、光盘等、易失性存储器)。
通信接口903可以是以下器件的任一种或任一种组合:网络接口(如以太网接口)、无线网卡等具有网络接入功能的器件。
通信接口903用于计算机设备与其他节点或者其他计算机设备进行数据通信。
图9还示例性地绘制出总线904。总线904可以将处理器901与存储器902、通信接口903连接。这样,通过总线904,处理器901可以访问存储器902,还可以利用通信接口903 与其他节点或者其他计算机设备进行数据交互。
在本申请中,计算机设备执行存储器902中的计算机指令,可以实现本申请提供的键值存储系统的数据管理方法。例如,获取输入/输出I/O操作请求,I/O操作请求中携带有待操作数据的索引信息;基于索引信息,确定待操作数据的键;基于键,在多个数据结构中确定用于存储待操作数据的键值对的目标数据结构;在目标数据结构中对键值对进行I/O操作。并且,计算机设备通过执行存储器902中的计算机指令,执行计算机设备的步骤的实现过程可以相应参考上述方法实施例中对应的描述。
本申请实施例还提供了一种存储介质,该存储介质为非易失性计算机可读存储介质,当存储介质中的指令被处理器执行时,实现如本申请实施例提供的键值存储系统的数据管理方法。
本申请实施例还提供了一种包含指令的计算机程序产品,当计算机程序产品在计算机上运行时,使得计算机执行本申请实施例提供的键值存储系统的数据管理方法。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
在本申请实施例中,术语“第一”、“第二”和“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。术语“至少一个”是指一个或多个,术语“多个”指两个或两个以上,除非另有明确的限定。
本申请中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的构思和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (26)
1.一种键值存储系统的数据管理方法,其特征在于,所述键值存储系统的逻辑地址空间包括:多个子逻辑地址空间,所述多个子逻辑地址空间互不重叠,所述多个子逻辑地址空间中存储的数据分别使用多个数据结构一一对应管理,所述方法包括:
获取输入/输出I/O操作请求,所述I/O操作请求中携带有待操作数据的索引信息;
基于所述索引信息,确定所述待操作数据的键;
基于所述键,在所述多个数据结构中确定用于存储所述待操作数据的键值对的目标数据结构;
在所述目标数据结构中对所述键值对进行I/O操作。
2.根据权利要求1所述的方法,其特征在于,所述索引信息包括所述I/O操作请求的发起者的标识和所述待操作数据的逻辑地址,所述基于所述索引信息,确定所述待操作数据的键,包括:
将所述索引信息确定为所述键。
3.根据权利要求2所述的方法,其特征在于,I/O操作请求的发起者为云盘。
4.根据权利要求1所述的方法,其特征在于,所述索引信息包括用于索引所述键的关键字,所述基于所述索引信息,确定所述待操作数据的键,包括:
基于所述关键字进行索引,得到所述键,所述键包括所述I/O操作请求的发起者的标识和所述待操作数据的逻辑地址。
5.根据权利要求1至4任一所述的方法,其特征在于,所述I/O操作请求为写操作请求,所述待操作数据为待写入数据,所述在所述目标数据结构中对所述键值对进行I/O操作,包括:
将所述键值对存储在所述目标数据结构的第一有序数据层中,所述第一有序数据层位于内存中,且所述第一有序数据层支持更新写操作;
当达到参考条件时,将所述第一有序数据层转换为第二有序数据层,所述第二有序数据层位于内存中,且所述第二有序数据层不支持修改操作;
将所述第二有序数据层中的键值对写入所述目标数据结构的第三数据层中,所述第三数据层位于硬盘中,且所述第三数据层支持追加写操作;
当所述第三数据层的数据量达到第二数据量阈值时,使用所述第三数据层中的键值对和所述目标数据结构的第四有序数据层中的键值对,更新所述第四有序数据层中的键值对,所述第四有序数据层位于硬盘中,且所述第四有序数据层支持追加写操作。
6.根据权利要求1至5任一所述的方法,其特征在于,所述I/O操作请求为读操作请求,所述待操作数据为待读取数据,所述在所述目标数据结构中对所述键值对进行I/O操作,包括:
查找所述目标数据结构的第一有序数据层中是否存储有所述待读取数据的键,所述第一有序数据层位于内存中,且所述第一有序数据层支持更新写操作;
当所述第一有序数据层中未存储所述待读取数据的键时,查找所述目标数据结构的第二有序数据层中是否存储有所述待读取数据的键,所述第二有序数据层位于内存中,且所述第二有序数据层不支持修改操作;
当所述第二有序数据层中未存储所述待读取数据的键时,查找所述目标数据结构的第三数据层中是否存储有所述待读取数据的键,所述第三数据层位于硬盘中,且所述第三数据层支持追加写操作;或者,当所述第一有序数据层中未存储所述待读取数据的键,且所述目标数据结构中不存在所述第二有序数据层时,查找所述第三有序数据层中是否存储有所述待读取数据的键;
当所述第三数据层中未存储所述待读取数据的键时,查找所述目标数据结构的第四有序数据层中是否存储有所述待读取数据的键,所述第四有序数据层位于硬盘中,且所述第四有序数据层支持追加写操作。
7.根据权利要求5或6所述的方法,其特征在于,所述第四有序数据层包括根节点、中间节点和叶子节点,所述根节点和所述中间节点均用于存储所述待操作数据的键,所述根节点能够存储的键的范围覆盖所述中间节点能够存储的键的范围,所述叶子节点存储有所述中间节点存储的键对应的键值对;
所述根节点还存储有用于存储所述根节点存储的键所覆盖的键的中间节点的节点标识,所述中间节点中还存储有用于存储所述中间节点存储的键所覆盖的键的叶子节点的节点标识;
所述键值存储系统中还存储有哈希映射表,所述哈希映射表用于存储所述根节点、所述中间节点和所述叶子节点中至少一个节点存储的节点标识与节点标识指示的节点的存储位置信息的对应关系。
8.根据权利要求5至7任一所述的方法,其特征在于,所述第三数据层为无序数据层。
9.根据权利要求5至8任一所述的方法,其特征在于,所述第四有序数据层为树状数据结构,所述第四有序数据层的深度小于3。
10.根据权利要求5至9任一所述的方法,其特征在于,更新后的第四有序数据层的存储位置与更新前的第四有序数据层的存储位置不同,且更新前的第四有序数据层和更新后的第四有序数据层使用不同版本号进行标识。
11.根据权利要求1至10任一所述的方法,其特征在于,所述键包括所述待操作数据的逻辑地址,所述逻辑地址通过数值表示,所述多个数据结构中同一数据结构中存储的键值对中逻辑地址对指定数值的余数相等,不同数据结构中存储的键值对中逻辑地址对指定数值的余数不等。
12.根据权利要求1至11任一所述的方法,其特征在于,所述键值存储系统包括硬盘,所述硬盘中存储有日志文件,所述方法还包括:
接收快照删除请求;
将所述快照删除请求写在所述日志文件中,并发送针对所述快照删除请求的操作完成响应;
基于所述日志文件中记录的快照删除请求,执行所述快照删除请求指示的快照删除操作。
13.一种键值存储系统的数据管理装置,其特征在于,所述键值存储系统的逻辑地址空间包括:多个子逻辑地址空间,所述多个子逻辑地址空间互不重叠,所述多个子逻辑地址空间中存储的数据分别使用多个数据结构一一对应管理,所述装置包括:
获取模块,用于获取输入/输出I/O操作请求,所述I/O操作请求中携带有待操作数据的索引信息;
确定模块,用于基于所述索引信息,确定所述待操作数据的键;
所述确定模块,还用于基于所述键,在所述多个数据结构中确定用于存储所述待操作数据的键值对的目标数据结构;
处理模块,用于在所述目标数据结构中对所述键值对进行I/O操作。
14.根据权利要求13所述的装置,其特征在于,所述索引信息包括所述I/O操作请求的发起者的标识和所述待操作数据的逻辑地址,所述确定模块,具体用于:
将所述索引信息确定为所述键。
15.根据权利要求14所述的装置,其特征在于,I/O操作请求的发起者为云盘。
16.根据权利要求13所述的装置,其特征在于,所述索引信息包括用于索引所述键的关键字,所述确定模块,具体用于:
基于所述关键字进行索引,得到所述键,所述键包括所述I/O操作请求的发起者的标识和所述待操作数据的逻辑地址。
17.根据权利要求13至16任一所述的装置,其特征在于,所述I/O操作请求为写操作请求,所述处理模块,具体用于:
将所述键值对存储在所述目标数据结构的第一有序数据层中,所述第一有序数据层位于内存中,且所述第一有序数据层支持更新写操作;
当达到参考条件时,将所述第一有序数据层转换为第二有序数据层,所述第二有序数据层位于内存中,且所述第二有序数据层不支持修改操作;
将所述第二有序数据层中的键值对写入所述目标数据结构的第三数据层中,所述第三数据层位于硬盘中,且所述第三数据层支持追加写操作;
当所述第三数据层的数据量达到第二数据量阈值时,使用所述第三数据层中的键值对和所述目标数据结构的第四有序数据层中的键值对,更新所述第四有序数据层中的键值对,所述第四有序数据层位于硬盘中,且所述第四有序数据层支持追加写操作。
18.根据权利要求13至17任一所述的装置,其特征在于,所述I/O操作请求为读操作请求,所述待操作数据为待读取数据,所述处理模块,具体用于:
查找所述目标数据结构的第一有序数据层中是否存储有所述待读取数据的键,所述第一有序数据层位于内存中,且所述第一有序数据层支持更新写操作;
当所述第一有序数据层中未存储所述待读取数据的键时,查找所述目标数据结构的第二有序数据层中是否存储有所述待读取数据的键,所述第二有序数据层位于内存中,且所述第二有序数据层不支持修改操作;
当所述第二有序数据层中未存储所述待读取数据的键时,查找所述目标数据结构的第三数据层中是否存储有所述待读取数据的键,所述第三数据层位于硬盘中,且所述第三数据层支持追加写操作;或者,当所述第一有序数据层中未存储所述待读取数据的键,且所述目标数据结构中不存在所述第二有序数据层时,查找所述第三有序数据层中是否存储有所述待读取数据的键;
当所述第三数据层中未存储所述待读取数据的键时,查找所述目标数据结构的第四有序数据层中是否存储有所述待读取数据的键,所述第四有序数据层位于硬盘中,且所述第四有序数据层支持追加写操作。
19.根据权利要求17或18所述的装置,其特征在于,所述第四有序数据层包括根节点、中间节点和叶子节点,所述根节点和所述中间节点均用于存储所述待操作数据的键,所述根节点能够存储的键的范围覆盖所述中间节点能够存储的键的范围,所述叶子节点存储有所述中间节点存储的键对应的键值对;
所述根节点还存储有用于存储所述根节点存储的键所覆盖的键的中间节点的节点标识,所述中间节点中还存储有用于存储所述中间节点存储的键所覆盖的键的叶子节点的节点标识;
所述键值存储系统中还存储有哈希映射表,所述哈希映射表用于存储所述根节点、所述中间节点和所述叶子节点中至少一个节点存储的节点标识与节点标识指示的节点的存储位置信息的对应关系。
20.根据权利要求17至19任一所述的装置,其特征在于,所述第三数据层为无序数据层。
21.根据权利要求17至20任一所述的装置,其特征在于,所述第四有序数据层为树状数据结构,所述第四有序数据层的深度小于3。
22.根据权利要求17至21任一所述的装置,其特征在于,更新后的第四有序数据层的存储位置与更新前的第四有序数据层的存储位置不同,且更新前的第四有序数据层和更新后的第四有序数据层使用不同版本号进行标识。
23.根据权利要求13至22任一所述的装置,其特征在于,所述键包括所述待操作数据的逻辑地址,所述逻辑地址通过数值表示,所述多个数据结构中同一数据结构中存储的键值对中逻辑地址对指定数值的余数相等,不同数据结构中存储的键值对中逻辑地址对指定数值的余数不等。
24.根据权利要求13至23任一所述的装置,其特征在于,所述键值存储系统包括硬盘,所述硬盘中存储有日志文件,所述装置还包括:
接收模块,用于接收快照删除请求;
所述处理模块,还用于将所述快照删除请求写在所述日志文件中,并发送针对所述快照删除请求的操作完成响应;
所述处理模块,还用于基于所述日志文件中记录的快照删除请求,执行所述快照删除请求指示的快照删除操作。
25.一种计算机设备,其特征在于,包括存储器和处理器,所述存储器存储有程序指令,所述处理器运行所述程序指令以执行权利要求1至12任一所述的方法。
26.一种计算机可读存储介质,其特征在于,包括程序指令,当所述程序指令在计算机设备上运行时,使得所述计算机设备执行如权利要求1至12任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2021/119141 WO2022063059A1 (zh) | 2020-09-23 | 2021-09-17 | 键值存储系统的数据管理方法及其装置 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011011617 | 2020-09-23 | ||
CN2020110116175 | 2020-09-23 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114253908A true CN114253908A (zh) | 2022-03-29 |
Family
ID=80790906
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110220635.2A Pending CN114253908A (zh) | 2020-09-23 | 2021-02-26 | 键值存储系统的数据管理方法及其装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114253908A (zh) |
WO (1) | WO2022063059A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114780500A (zh) * | 2022-06-21 | 2022-07-22 | 平安科技(深圳)有限公司 | 基于日志合并树的数据存储方法、装置、设备及存储介质 |
CN117131012A (zh) * | 2023-08-28 | 2023-11-28 | 中国科学院软件研究所 | 一种可持久化和可扩展的轻量级多版本有序键值存储系统 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117493388A (zh) * | 2022-07-25 | 2024-02-02 | 华为云计算技术有限公司 | 一种基于键值存储系统的数据管理方法及其相关设备 |
CN115586871B (zh) * | 2022-10-28 | 2023-10-27 | 北京百度网讯科技有限公司 | 面向云计算场景的数据追加写方法、装置、设备以及介质 |
CN116069267B (zh) * | 2023-04-06 | 2023-07-14 | 苏州浪潮智能科技有限公司 | 一种raid卡的写缓存方法、系统、设备及存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107315745B (zh) * | 2016-04-26 | 2020-05-01 | 北京京东尚科信息技术有限公司 | 一种私信存储方法及系统 |
US10649969B2 (en) * | 2017-06-13 | 2020-05-12 | Western Digital Technologies, Inc. | Memory efficient persistent key-value store for non-volatile memories |
US20190034427A1 (en) * | 2017-12-28 | 2019-01-31 | Intel Corporation | Data management system employing a hash-based and tree-based key-value data structure |
US10839016B2 (en) * | 2018-10-31 | 2020-11-17 | EMC IP Holding Company LLC | Storing metadata in a cuckoo tree |
CN109947709B (zh) * | 2019-04-02 | 2021-10-08 | 北京百度网讯科技有限公司 | 数据存储方法和装置 |
-
2021
- 2021-02-26 CN CN202110220635.2A patent/CN114253908A/zh active Pending
- 2021-09-17 WO PCT/CN2021/119141 patent/WO2022063059A1/zh active Application Filing
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114780500A (zh) * | 2022-06-21 | 2022-07-22 | 平安科技(深圳)有限公司 | 基于日志合并树的数据存储方法、装置、设备及存储介质 |
CN117131012A (zh) * | 2023-08-28 | 2023-11-28 | 中国科学院软件研究所 | 一种可持久化和可扩展的轻量级多版本有序键值存储系统 |
CN117131012B (zh) * | 2023-08-28 | 2024-04-16 | 中国科学院软件研究所 | 一种可持久化和可扩展的轻量级多版本有序键值存储系统 |
Also Published As
Publication number | Publication date |
---|---|
WO2022063059A1 (zh) | 2022-03-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11775392B2 (en) | Indirect replication of a dataset | |
US10282121B2 (en) | Apparatus and method for insertion and deletion in multi-dimensional to linear address space translation | |
CN114253908A (zh) | 键值存储系统的数据管理方法及其装置 | |
US7711916B2 (en) | Storing information on storage devices having different performance capabilities with a storage system | |
US11048757B2 (en) | Cuckoo tree with duplicate key support | |
US11416145B2 (en) | Efficient space management for high performance writable snapshots | |
US9307024B2 (en) | Efficient storage of small random changes to data on disk | |
KR20200122994A (ko) | 키 값 첨부 | |
US10585613B2 (en) | Small storage volume management | |
CN110750507A (zh) | 面向dfs的全局命名空间下的客户端持久缓存方法及系统 | |
US10289345B1 (en) | Contention and metadata write amplification reduction in log structured data storage mapping | |
CN114281762A (zh) | 一种日志存储加速方法、装置、设备及介质 | |
US10394764B2 (en) | Region-integrated data deduplication implementing a multi-lifetime duplicate finder | |
CN110955488A (zh) | 一种持久性内存的虚拟化方法及系统 | |
US10416901B1 (en) | Storage element cloning in presence of data storage pre-mapper with multiple simultaneous instances of volume address using virtual copies | |
US10210067B1 (en) | Space accounting in presence of data storage pre-mapper | |
US10209909B1 (en) | Storage element cloning in presence of data storage pre-mapper | |
US11620062B1 (en) | Resource allocation techniques using a metadata log | |
US11150827B2 (en) | Storage system and duplicate data management method | |
US20230409530A1 (en) | Grouping data to conserve storage capacity | |
WO2021017647A1 (zh) | 一种数据单元的合并方法及装置 | |
US20180293015A1 (en) | OPTIMIZED MANAGEMENT OF FILE SYSTEM METADATA WITHIN SOLID STATE STORAGE DEVICES (SSDs) | |
JP2022070669A (ja) | データベースシステム、及びクエリ実行方法 | |
CN116490847A (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 |