CN114911410A - 一种数据存储方法、装置、设备及存储介质 - Google Patents

一种数据存储方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN114911410A
CN114911410A CN202110176155.0A CN202110176155A CN114911410A CN 114911410 A CN114911410 A CN 114911410A CN 202110176155 A CN202110176155 A CN 202110176155A CN 114911410 A CN114911410 A CN 114911410A
Authority
CN
China
Prior art keywords
area
interval
data
cache
buffer
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
Application number
CN202110176155.0A
Other languages
English (en)
Inventor
张伟
严俊明
宋兵强
吴承
佟明达
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202110176155.0A priority Critical patent/CN114911410A/zh
Publication of CN114911410A publication Critical patent/CN114911410A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本申请涉及计算机领域,特别涉及云存储技术领域,公开了一种数据存储方法、装置、设备及存储介质,用以提高数据存储效率,避免文件碎片化,其中,方法包括:接收数据写入请求,在确定将待写入数据写入目标缓存区域后,确定待写入数据对应的第一缓存区间,若确定第一缓存区间与至少一个第二缓存区间之间存在重叠区域,合并获得合并缓存区,进而基于合并缓存区,对待写入数据进行保存。这样,在进行文件存储时,不仅可以根据偏移量准确且快速地定位缓存区间,并且可以处理任意长度的待写入数据,降低了操作的时间复杂度,提高了数据存储效率。

Description

一种数据存储方法、装置、设备及存储介质
技术领域
本申请涉及计算机领域,特别涉及云存储技术领域,公开了一种数据存储方法、装置、设备及存储介质。
背景技术
在存储设备中缓存的访问速度比硬盘的访问速度快,因此,在实际应用中往往预先将数据从硬盘存储到缓存中,存储设备接收到输入/输出(input/output,IO)请求后,对缓存中的数据进行操作,从而大大提高IO请求的处理速度。
页缓存(Page Cache)是一种常用的文件缓存方案,参阅图1所示,文件以页(Page)的形式存储于缓存中,采用基数树作为索引结构。当存储设备接收到IO请求后,通过基数树进行页查找,若命中,则将待写入数据写入命中的页中,并将被写入的页回写至磁盘中。
然而,由于页大小固定,因此对于大块顺序写入操作而言,需要根据页大小对待写入数据进行切分,并多次在基数树中进行页查找,从而导致处理效率低。此外将待写入数据写入多个页,会导致文件碎片、文件空洞,缺少灵活性。
发明内容
本申请实施例提供一种数据存储方法、装置、设备及存储介质,用以提高数据存储效率,避免文件碎片化。
第一方面,本申请实施例提供一种数据存储方法,方法包括:
接收针对目标文件触发的数据写入请求,所述数据写入请求中至少携带对应所述目标文件的待写入数据、文件标识和偏移量;
确定将所述待写入数据写入所述文件标识对应的目标缓存区域时,基于所述目标缓存区域的区域起始位置和所述偏移量,在所述目标缓存区域内确定所述待写入数据对应的第一缓存区间;
若确定所述第一缓存区间与至少一个第二缓存区间之间存在重叠区域,则将所述第一缓存区间和所述至少一个第二缓存区间进行合并,获得合并缓存区;其中,每个第二缓存区间用于在确定所述第一缓存区间之前保存对应所述目标文件的其他待写入数据;
将所述合并缓存区作为新的第二缓存区间,并将所述待写入数据保存至所述新的第二缓存区间。
可选的,将所述新的缓存区域作为新的目标缓存区域之后,将所述待写入数据保存至所述新的目标缓存区域内的第一缓存区间之前,还包括:
生成所述新的目标缓存区域对应的序号,所述序号用于指示所述新的目标缓存区域的元数据信息的保存顺序;
将写入数据后的第一缓存区间作为所述新的目标缓存区域中的一个第二缓存区间之后,还包括:
根据所述新的目标缓存区域中包含的各个第二缓存区间,生成所述新的目标缓存区域的元数据信息,所述元数据信息中至少包含所述新的目标缓存区域中各个第二缓存区间对应的物理存储地址;
根据所述序号,将所述新的目标缓存区域的元数据信息保存至指定的第二存储位置。
第二方面,本申请实施例提供一种数据存储装置,所述数据存储装置包括:
接收单元,用于接收针对目标文件触发的数据写入请求,所述数据写入请求中至少携带对应所述目标文件的待写入数据、文件标识和偏移量;
确定单元,用于确定将所述待写入数据写入所述文件标识对应的目标缓存区域时,基于所述目标缓存区域的区域起始位置和所述偏移量,在所述目标缓存区域内确定所述待写入数据对应的第一缓存区间;
合并单元,用于若确定所述第一缓存区间与至少一个第二缓存区间之间存在重叠区域,则将所述第一缓存区间和所述至少一个第二缓存区间进行合并,获得合并缓存区;其中,每个第二缓存区间用于在确定所述第一缓存区间之前保存对应所述目标文件的其他待写入数据;
保存单元,用于将所述合并缓存区作为新的第二缓存区间,并将所述待写入数据保存至所述新的第二缓存区间。
可选的,所述数据写入请求还携带所述待写入数据的待写入数据量;
所述确定将所述待写入数据写入所述文件标识对应的目标缓存区域时,所述确定单元用于:
若所述目标缓存区域中已存储数据量和所述待写入数据量之和不大于预设的数据量门限值,则确定将所述待写入数据写入所述目标缓存区域;或者,
若所述目标缓存区域中包含的第二缓存区间的数目不大于预设的区间数目门限值,则确定将所述待写入数据写入所述目标缓存区域。
可选的,所述基于所述目标缓存区域的区域起始位置和所述偏移量,在所述目标缓存区域内确定所述待写入数据对应的第一缓存区间时,所述确定单元用于:
基于所述目标缓存区域的区域起始位置和所述偏移量,在所述目标缓存区域内确定所述待写入数据对应的第一缓存区间的区域起始位置;
基于所述待写入数据量,在所述目标缓存区域内确定所述待写入数据对应的第一缓存区间的区域结束位置;
基于所述第一缓存区间的区域起始位置和所述第一缓存区间的区域结束位置,确定所述待写入数据对应的第一缓存区间。
可选的,确定所述第一缓存区间与所述至少一个第二缓存区间中的一个第二缓存区间之间存在重叠区域时,所述确定单元用于执行以下操作中的任意一种或多种的组合:
若所述第一缓存区间的区域起始位置或区域结束位置,位于所述一个第二缓存区间的区域起始位置和区域结束位置之间,则确定所述第一缓存区间与所述一个第二缓存区间之间存在重叠区域;
若所述一个第二缓存区间的区域起始位置或区域结束位置,位于所述第一缓存区间的区域起始位置和区域结束位置之间,则确定所述第一缓存区间与所述一个第二缓存区间之间存在重叠区域;
若所述第一缓存区间的区域起始位置和区域结束位置,与所述一个第二缓存区间的区域起始位置和区域结束位置相同,则确定所述第一缓存区间与所述一个第二缓存区间之间存在重叠区域;
若所述第一缓存区间的区域起始位置,与所述一个第二缓存区间的区域结束位置相同,则确定所述第一缓存区间与所述一个第二缓存区间之间存在重叠区域;
若所述第一缓存区间的区域结束位置,与所述一个第二缓存区间的区域起始位置相同,则确定所述第一缓存区间与所述一个第二缓存区间之间存在重叠区域。
可选的,将所述第一缓存区间和所述至少一个第二缓存区间进行合并,获得合并缓存区时,所述合并单元用于:
根据所述至少一个第二缓存区间和所述第一缓存区间的区域起始位置,将所述至少一个第二缓存区间和所述第一缓存区间的区域起始位置中,与所述目标缓存区域的区域起始位置之间的距离最小的区域起始位置,作为所述合并缓存区的区域起始位置;
根据所述至少一个第二缓存区间和所述第一缓存区间的区域结束位置,将所述至少一个第二缓存区间和所述第一缓存区间的区域起始位置中,与所述目标缓存区域的区域起始位置之间的距离最大的区域结束位置,作为所述合并缓存区的区域结束位置;
基于所述合并缓存区的区域起始位置和所述合并缓存区的区域结束位置,获得所述合并缓存区。
可选的,所述数据存储装置还包括线程池单元,所述线程池单元用于:
按照预设的数据块大小,对所述目标缓存区域中的已保存数据进行切分,得到至少一个数据块;
将所述至少一个数据块回写至指定的第一存储位置。
可选的,所述数据存储装置还包括分配单元;
所述分配单元,用于若确定不将所述待写入数据写入所述文件标识对应的目标缓存区域,则对应所述文件标识生成新的缓存区域,并将所述新的缓存区域作为新的目标缓存区域;
所述确定单元,还用于基于所述新的目标缓存区域的区域起始位置和所述偏移量,在所述新的目标缓存区域内确定所述待写入数据对应的第一缓存区间;
所述保存单元,还用于将所述待写入数据保存至所述新的目标缓存区域内的第一缓存区间,并将写入数据后的第一缓存区间作为所述新的目标缓存区域中的一个第二缓存区间。
可选的,所述数据存储装置还包括提交单元;
将所述新的缓存区域作为新的目标缓存区域之后,所述分配单元还用于:
生成所述新的目标缓存区域对应的序号,所述序号用于指示所述新的目标缓存区域的元数据信息的保存顺序;
将写入数据后的第一缓存区间作为所述新的目标缓存区域中的一个第二缓存区间之后,所述确定单元还用于:
根据所述新的目标缓存区域中包含的各个第二缓存区间,生成所述新的目标缓存区域的元数据信息,所述元数据信息中至少包含所述新的目标缓存区域中各个第二缓存区间对应的物理存储地址;
所述提交单元,用于根据所述序号,将所述新的目标缓存区域的元数据信息保存至指定的第二存储位置。
第三方面,本申请实施例提供一种电子设备,包括处理器和存储器,其中,所述存储器存储有程序代码,当所述程序代码被所述处理器执行时,使得所述处理器执行上述任意一种数据存储方法的步骤。
第四方面,本申请实施例提供一种计算机可读存储介质,其包括程序代码,当所述程序代码在电子设备上运行时,所述程序代码用于使所述电子设备执行上述任意一种数据存储方法的步骤。
第五方面,本申请实施例提供一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述任意一种数据存储方法的步骤。
本申请有益效果如下:
本申请实施例中,接收到一个数据写入请求后,如果确定待写入数据对应的第一缓存区间与至少一个第二缓存区间之间存在重叠区域,则将第一缓存区间和至少一个第二缓存区间进行合并,进而基于合并缓存区,对待写入数据进行保存;这样,每接收到一个数据写入请求后,根据偏移量可以准确且快速地定位第一缓存区间,且由于缓存区间之间可以合并,因此不再受限于页缓存方案中页的大小,面对任意长度的待写入数据,都只需要一次搜索操作,降低了操作的时间复杂度,提高了数据存储效率。
本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为相关技术中的一种页缓存方法的流程示意图;
图2为本申请实施例中的一种应用场景的一个可选的示意图;
图3为本申请实施例中的一种数据存储方法的流程示意图;
图4a为本申请实施例中的重叠区域的第一种示意图;
图4b为本申请实施例中的重叠区域的第二种示意图;
图4c为本申请实施例中的重叠区域的第三种示意图;
图4d为本申请实施例中的重叠区域的第四种示意图;
图4e为本申请实施例中的重叠区域的第五种示意图;
图4f为本申请实施例中的重叠区域的第六种示意图;
图4g为本申请实施例中的重叠区域的第七种示意图;
图4h为本申请实施例中的合并缓存区的第示意图;
图5为本申请实施例中的对数据进行存储的流程示意图;
图6为本申请实施例中的对数据进行存储过程中FRT的示意图;
图7为本申请实施例中的一种缓存与第一存储位置的示意图;
图8为本申请实施例中的对数据进行同步的流程示意图;
图9a为本申请实施例中的最小堆的第一种示意图;
图9b为本申请实施例中的最小堆的第二种示意图;
图10为本申请实施例中的一种数据存储装置的组成结构示意图;
图11为本申请实施例中的另一种数据存储装置的组成结构示意图;
图12为本申请实施例中的一种电子设备的一个硬件组成结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请技术方案的一部分实施例,而不是全部的实施例。基于本申请文件中记载的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请技术方案保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。
本发明实施例中术语“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
以下对本申请实施例中的部分用语进行解释说明,以便于本领域技术人员理解。
1、缓存:将存储在慢速物理设备上的数据通过某种机制转存在高速的内存或者闪存设备中,以提高数据访问的速度和系统的吞吐量。
2、回写:将存储在高速的内存或者闪存设备存储至慢速物理设备中。
3、平衡二叉搜索树:一种二叉搜索树,平衡二叉搜索树中每一个节点的左子树深度和右子树深度之差的绝对值不大于1,且每一个节点的键值比它的左孩子的主键值大,比它的右孩子的小。
4、最小堆:一种经过排序的完全二叉树,根结点的键值是所有堆结点键值中最小者。
5、云技术(Cloud technology):是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。
本申请实施例主要涉及云技术中的云存储这一方面,云存储(cloud storage)是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统(以下简称存储系统)是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。
目前,存储系统的存储方法为:创建逻辑卷,在创建逻辑卷时,就为每个逻辑卷分配物理存储空间,该物理存储空间可能是某个存储设备或者某几个存储设备的磁盘组成。客户端在某一逻辑卷上存储数据,也就是将数据存储在文件系统上,文件系统将数据分成许多部分,每一部分是一个对象,对象不仅包含数据而且还包含数据标识(ID entity,ID)等额外的信息,文件系统将每个对象分别写入该逻辑卷的物理存储空间,且文件系统会记录每个对象的存储位置信息,从而当客户端请求访问数据时,文件系统能够根据每个对象的存储位置信息让客户端对数据进行访问。
存储系统为逻辑卷分配物理存储空间的过程,具体为:按照对存储于逻辑卷的对象的容量估量(该估量往往相对于实际要存储的对象的容量有很大余量)和独立冗余磁盘阵列(Redundant Array of Independent Disk,RAID)的组别,预先将物理存储空间划分成分条,一个逻辑卷可以理解为一个分条,从而为逻辑卷分配了物理存储空间。
下面对本申请实施例的设计思想进行简要介绍。
为了提高数据系统性能,通用方法就是数据缓存,即把存储在慢速物理设备上的数据通过某种机制转存在高速的内存或者闪存设备中,提高数据访问的速度和系统的吞吐量。
Page Cache作为一种常见的文件缓存方案,参阅图1所示,Page Cache默认页大小通常为4千字节(Kilo Byte,KB),当待写入数据的数据量大于4KB时,需要根据4KB对待写入数据进行切分后,多次在基数树中进行页查找,从而导致处理效率低。此外将待写入数据写入多个页,会导致文件碎片和空洞,缺少灵活性。特别是在分布式云存储系统中,存在大块顺序写、小块随机写的场景,若采用Page Cache,数据的存储和管理性能较差。
由于在分布式云存储系统中,若采用Page Cache,会受限于固定的页大小,导致数据存储效率低,同时导致文件碎片、文件空洞等问题,因此,本申请实施例中,结合云技术中的云存储技术,每接收到一个数据写入请求后,根据数据写入请求中携带的偏移量,得到待写入数据在目标缓存区域中的第一缓存区间,进而将与第一缓存区间之间存在重叠区域的第二缓存区间,和第一缓存区间进行合并,进而基于合并缓存区,对待写入数据进行保存。这样,每接收到一个数据写入请求后,根据偏移量可以准确且快速地定位第一缓存区间,且由于缓存区间之间可以合并,因此,不再受限于Page Cache方案中Page的大小,面对任意长度的待写入数据,都只需要一次搜索操作,对顺序写和随机写十分友好,提高了数据存储效率,降低了操作的时间复杂度。
以下结合说明书附图对本申请的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本申请,并不用于限定本申请,并且在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
如图2所示,其为本申请实施例的应用场景示意图。其为本申请实施例的应用场景示意图。该应用场景图中包括两个终端设备210和一个服务器230,可通过终端设备210登录客户端120。终端设备210与服务器230之间可以通过通信网络进行通信。每个终端设备对应的一个用户,图2中是以用户对应左侧的终端设备210,用户B对应右侧的终端设备210为例,实际上不限制终端设备的数量。在某些情况下,各终端设备之间可以先通过服务器230进行通信,终端设备到终端设备之间可以建立直接通信,终端设备到终端设备之间直接通信的方式可以称为点到点通信,在该情况下,各终端设备210之间的某些交互过程可能并不需要服务器230的中转。
在本申请实施例中,终端设备210上可以安装有客户端,客户端用于接收用户输入的操作指令,例如写入、读取等。示例性的,客户端可以采用用户空间文件系统(Filesystemin Userspace,FUSE)客户端。服务器230则是与客户端相对应的服务器。
在一种可选的实施方式中,通信网络是有线网络或无线网络。终端设备210以及服务器230可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
在本申请实施例中,终端设备210为用户使用的电子设备,该电子设备可以是个人计算机、手机、平板电脑、笔记本、电子书阅读器等具有一定计算能力并且运行有即时通信类软件及网站或者社交类软件及网站的计算机设备。各终端设备210通过无线网络与服务器230连接,服务器230可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。
在本申请实施例中,用户通过终端设备210可登录客户端220,终端设备210可响应用户在客户端220触发的各种操作,执行相应的动作。
参阅图3所示,图3为本申请实施例中提供的一种可能的数据存储方法的实施流程图,该方法可以应用于终端设备,也可以应该用于服务器,该方法的具体实施流程如下:
S301:接收针对目标文件触发的数据写入请求,数据写入请求中至少携带对应目标文件的待写入数据、文件标识和偏移量。
其中,该数据写入请求可以是针对目标文件触发的任意一个数据写入请求,偏移量(offset)用于指示在文件标识对应的目标缓存区域中,待写入数据对应的第一缓存区间的区域起始位置。
S302:确定将待写入数据写入文件标识对应的目标缓存区域时,基于目标缓存区域的区域起始位置和偏移量,在目标缓存区域内确定待写入数据对应的第一缓存区间。
需要说明的是,本申请实施例中,将目标缓存区域中未存入待写入数据的缓存区间称为第一缓存区间,将目标缓存区域中已存入待写入数据的缓存区间称为第二缓存区间。第二缓存区间中存储有目标文件中有效且连续的数据段。
接收到一个数据写入请求后,存在但不限于以下两种情况:
第一种可能的情况:数据写入请求还携带待写入数据的待写入数据量。
可以采用但不限于以下两种可能的方式,确定是否将待写入数据写入文件标识对应的目标缓存区域:
第一种可能的实现方式,若目标缓存区域中已存储数据量和待写入数据量之和不大于预设的数据量门限值,则确定将待写入数据写入目标缓存区域,否则确定不将待写入数据写入目标缓存区域。
例如,假设,待写入数据量为10KB,目标缓存区域中已存储数据量为11KB,预设的数据量门限值为20KB,此时目标缓存区域中已存储数据量和待写入数据量之和大于20KB,确定不将待写入数据写入目标缓存区域。
又例如,假设,待写入数据量为10KB,目标缓存区域中已存储数据量为10KB,预设的数据量门限值为20KB,此时目标缓存区域中已存储数据量和待写入数据量之和等于20KB,确定将待写入数据写入目标缓存区域。
再例如,假设,待写入数据量为10KB,目标缓存区域中已存储数据量为9KB,预设的数据量门限值为20KB,此时目标缓存区域中已存储数据量和待写入数据量之和19KB小于20KB,确定将待写入数据写入目标缓存区域。
第二种可能的实现方式,若目标缓存区域中包含的第二缓存区间的数目不大于预设的区间数目门限值,则确定将待写入数据写入目标缓存区域,否则确定不将待写入数据写入目标缓存区域。
例如,目标缓存区域中包含的第二缓存区间的数目为5,预设的区间数目门限值为10,此时目标缓存区域中包含的第二缓存区间的数目不大于10,确定将待写入数据写入目标缓存区域。
确定将待写入数据写入文件标识对应的目标缓存区域后,首先,基于目标缓存区域的区域起始位置和偏移量,在目标缓存区域内确定待写入数据对应的第一缓存区间的区域起始位置,其次,基于待写入数据量,在目标缓存区域内确定待写入数据对应的第一缓存区间的区域结束位置,然后,基于第一缓存区间的区域起始位置和第一缓存区间的区域结束位置,确定待写入数据对应的第一缓存区间。
例如,假设,偏移量为2KB,待写入数据量为3KB,目标缓存区域的区域起始位置为0KB处,首先,基于目标缓存区域的区域起始位置和偏移量2KB,在目标缓存区域内确定待写入数据对应的第一缓存区间的区域起始位置为2KB处,其次,基于待写入数据量3KB,在目标缓存区域内确定待写入数据对应的第一缓存区间的区域结束位置为5KB处,然后,基于第一缓存区间的区域起始位置和第一缓存区间的区域结束位置,确定待写入数据对应的第一缓存区间为[2,5)。
需要说明的是,本申请实施例中,可以采用左闭右开的区间表示第一缓存区间、第二缓存区间,例如,第一缓存区间[2,5)表示2~4KB。
第二种可能的情况:数据写入请求未携带待写入数据的待写入数据量。
采用上述第二种可能的实现方式,确定将待写入数据写入文件标识对应的目标缓存区域后,首先,基于目标缓存区域的区域起始位置和偏移量,在目标缓存区域内确定待写入数据对应的第一缓存区间的区域起始位置,其次,基于预设的区间长度,在目标缓存区域内确定待写入数据对应的第一缓存区间的区域结束位置,然后,基于第一缓存区间的区域起始位置和第一缓存区间的区域结束位置,确定待写入数据对应的第一缓存区间。
例如,假设偏移量为2KB,预设的区间长度为4KB,目标缓存区域的区域起始位置为0KB处,首先,基于目标缓存区域的区域起始位置和偏移量2KB,在目标缓存区域内确定待写入数据对应的第一缓存区间的区域起始位置为2KB处,其次,基于预设的区间长度为4KB,在目标缓存区域内确定待写入数据对应的第一缓存区间的区域结束位置为6KB处,然后,基于第一缓存区间的区域起始位置和第一缓存区间的区域结束位置,确定待写入数据对应的第一缓存区间为[2,6)。
S303:若确定第一缓存区间与至少一个第二缓存区间之间存在重叠区域,则将第一缓存区间和至少一个第二缓存区间进行合并,获得合并缓存区,其中,每个第二缓存区间用于在确定第一缓存区间之前保存对应目标文件的其他待写入数据。
具体的,可以采用但不限于以下操作中的任意一种或多种的组合,确定第一缓存区间与至少一个第二缓存区间中的一个第二缓存区间之间存在重叠区域:
第一种可能的操作:若一个第二缓存区间的区域起始位置或区域结束位置,位于第一缓存区间的区域起始位置和区域结束位置之间,则确定第一缓存区间与一个第二缓存区间之间存在重叠区域。
例如,参阅图4a所示,第一缓存区间为[2,5),第二缓存区间为[4,7),第二缓存区间[4,7)的区域起始位置位于第一缓存区间[2,5)的区域起始位置和区域结束位置之间,确定第一缓存区间[2,5)与第二缓存区间[4,7)之间存在重叠区域。
又例如,参阅图4b所示,第一缓存区间为[2,5),第二缓存区间为[4,5),第二缓存区间[4,5)的区域起始位置位于第一缓存区间[2,5)的区域起始位置和区域结束位置之间,确定第一缓存区间[2,5)与第二缓存区间[4,5)之间存在重叠区域。
再例如,参阅图4c所示,第一缓存区间为[2,5),第二缓存区间为[0,4),第二缓存区间[0,4)的区域结束位置位于第一缓存区间[2,5)的区域起始位置和区域结束位置之间,确定第一缓存区间[2,5)与第二缓存区间[0,4)之间存在重叠区域。
第二种可能的操作:若第一缓存区间的区域起始位置或区域结束位置,位于一个第二缓存区间的区域起始位置和区域结束位置之间,则确定第一缓存区间与一个第二缓存区间之间存在重叠区域。
例如,参阅图4d所示,第一缓存区间为[2,5),第二缓存区间为[0,6),第一缓存区间[2,5)的区域起始位置位于第二缓存区间为[0,6)的区域起始位置和区域结束位置之间,确定第一缓存区间[2,5)与第二缓存区间为[0,6)之间存在重叠区域。
第三种可能的操作:若第一缓存区间的区域起始位置和区域结束位置,与一个第二缓存区间的区域起始位置和区域结束位置相同,则确定第一缓存区间与一个第二缓存区间之间存在重叠区域。
例如,参阅图4e所示,第一缓存区间为[2,5),第二缓存区间为[2,5),第一缓存区间[2,5)的区域起始位置和区域结束位置,与第二缓存区间[2,5)的区域起始位置和区域结束位置相同,确定第一缓存区间[2,5)与第二缓存区间[2,5)之间存在重叠区域。
第四种可能的操作:若第一缓存区间的区域起始位置,与一个第二缓存区间的区域结束位置相同,则确定第一缓存区间与一个第二缓存区间之间存在重叠区域。
例如,参阅图4f所示,第一缓存区间为[2,5),第二缓存区间为[0,2),第一缓存区间[2,5)的区域起始位置,与第二缓存区间[2,5)的区域结束位置相同,确定第一缓存区间[2,5)与第二缓存区间[0,2)之间存在重叠区域。
第五种可能的操作:若第一缓存区间的区域结束位置,与一个第二缓存区间的区域起始位置相同,则确定第一缓存区间与一个第二缓存区间之间存在重叠区域。
例如,参阅图4g所示,第一缓存区间为[2,5),第二缓存区间为[5,7),第一缓存区间[2,5)的区域结束位置,与第二缓存区间[5,7)的区域起始位置相同,确定第一缓存区间[2,5)与第二缓存区间[5,7)之间存在重叠区域。
确定第一缓存区间与至少一个第二缓存区间之间存在重叠区域后,可以采用但不限于以下方式获得合并缓存区:
首先,根据至少一个第二缓存区间和第一缓存区间的区域起始位置,将至少一个第二缓存区间和第一缓存区间的区域起始位置中,与目标缓存区域的区域起始位置之间的距离最小的区域起始位置,作为合并缓存区的区域起始位置。
例如,假设,第一缓存区间为[2,6),至少一个第二缓存区间包括第二缓存区间[0,4)、第二缓存区间[5,8),目标缓存区域的区域起始位置为0。根据至少一个第二缓存区间和第一缓存区间的区域起始位置,将第二缓存区间[0,4)、第二缓存区间[5,8)和第一缓存区间[2,6)的区域起始位置中,与目标缓存区域的区域起始位置之间的距离最小的区域起始位置0,作为合并缓存区的区域起始位置。
其次,根据至少一个第二缓存区间和第一缓存区间的区域结束位置,将至少一个第二缓存区间和第一缓存区间的区域起始位置中,与目标缓存区域的区域起始位置之间的距离最大的区域结束位置,作为合并缓存区的区域结束位置。
例如,第一缓存区间为[2,6),至少一个第二缓存区间包括第二缓存区间[0,4)、第二缓存区间[5,8),目标缓存区域的区域起始位置为0,根据第二缓存区间[0,4)、第二缓存区间[5,8)和第一缓存区间[2,6)的区域结束位置,将第二缓存区间[0,4)、第二缓存区间[5,8)和第一缓存区间[2,6)中,与目标缓存区域的区域起始位置之间的距离最大的区域结束位置8,作为合并缓存区的区域结束位置。
然后,基于合并缓存区的区域起始位置和合并缓存区的区域结束位置,获得合并缓存区。
例如,参阅图4h所示,基于合并缓存区的区域起始位置0和合并缓存区的区域结束位置8,获得合并缓存区[0,8)。
S304:将合并缓存区作为新的第二缓存区间,并将待写入数据保存至新的第二缓存区间。
进一步的,若确定第一缓存区间与任意一个第二缓存区间之间均不存在重叠区域,则将待写入数据保存至第一缓存区间,并将写入数据后的第一缓存区间作为目标缓存区域中的一个第二缓存区间。
例如,假设,第一缓存区间为[13,15),第二缓存区间包括第二缓存区间[0,4)、第二缓存区间[5,8)、第二缓存区间[10,12),第一缓存区间[13,15)与第二缓存区间[0,4)、第二缓存区间[5,8)、第二缓存区间[10,12)之间均不存在重叠区域,则将待写入数据保存至第一缓存区间[13,15),并将第一缓存区间[13,15)作为目标缓存区域中的一个第二缓存区间[13,15)。
为了提高数据写入效率,参阅图5所示,其本申请实施例中,对数据进行存储的流程示意图,具体包括以下过程:
首先,判断是否将待写入数据写入文件标识对应的目标缓存区域,具体判断方式参见上文。若确定将待写入数据写入文件标识对应的目标缓存区域,则执行S302-S304,将待写入数据写入目标缓存区域。
若确定不将待写入数据写入文件标识对应的目标缓存区域,则对应文件标识生成新的缓存区域,并将新的缓存区域作为新的目标缓存区域,然后,基于新的目标缓存区域的区域起始位置和偏移量,在新的目标缓存区域内确定待写入数据对应的第一缓存区间,接着,将待写入数据保存至新的目标缓存区域内的第一缓存区间,并将写入数据后的第一缓存区间作为新的目标缓存区域中的一个第二缓存区间。
在确定不将待写入数据写入文件标识对应的目标缓存区域后,还可以将目标缓存区域的区域标识加入冻结队列中,以使目标缓存区域的状态信息从可更改状态变更为不可更改状态(immutable状态),不可更改状态用于表征目标缓存区域不可写入。相应的,在将待写入数据保存至新的目标缓存区域内的第一缓存区间之前,若前一个目标缓存区域的区域标识的入队等待时长不大于预设的时长门限值,则确定前一个目标缓存区域的状态信息变更为不可更改状态,基于新的目标缓存区域的区域起始位置和偏移量,在新的目标缓存区域内确定待写入数据对应的第一缓存区间,并将待写入数据保存至新的目标缓存区域内的第一缓存区间,以及将写入数据后的第一缓存区间作为新的目标缓存区域中的一个第二缓存区间。其中,入队等待时长用于表征前一个目标缓存区域的区域标识在冻结队列的缓冲区域排队所花费的时长。
例如,假设,预设的时长门限值为10秒,接收到数据写入请求x后,若确定不将数据写入请求x中携带的待写入数据存储到文件标识对应的目标存储区域,则对应文件标识生成新的缓存区域,并将新的缓存区域作为新的目标缓存区域。同时,将前一个目标缓存区域的区域标识IDx加入冻结队列中。若IDx的入队等待时长不大于10秒,则确定前一个目标缓存区域的状态信息变更为不可修改状态,并将待写入数据保存至新的目标缓存区域内的第一缓存区间。
若前一个目标缓存区域的区域标识的入队等待时长大于预设的时长门限值,则重新执行S302-S304。若数据存储的重试次数超过预设的写入重试次数,则确定写入失败,并返回写入失败指示。示例性的,预设的写入重试次数可以为3次。
为了进一步提高数据存储效率,本申请实施例中,提供了一种更为灵活的索引结构,下文中称为文件区域树(File Range Tree,FTR)。FTR中将数据写入请求中携带的偏移量作为索引,每个索引对应于一个第二缓存区间。FTR中的一个节点表示一个第二缓存区间。每一个FRT对应一个目标缓存区域。需要说明的是,本申请实施例中,第二缓存区间也可称为range。下面,以FRT作为索引结构进行说明。
FTR可以基于平衡二叉搜索树实现。针对接收到的每一个数据写入请求,在目标缓存区域内确定待写入数据对应的第一缓存区间之后,可以基于FRT,确定与第一缓存区间之间存在重叠区域的至少一个第二缓存区间。具体的,首先定位FRT中小于offset的最大offset对应的range,以该range作为起始range,若没有找到,则以range树最小offset的range,最左叶子节点作为起始range,然后以offset+size作为终止条件,中序遍历FTR,完成旧range的数据覆盖、删除和新range的合并、插入。
下面以一个具体的实施例为例,对数据存储流程进行说明。
参阅图6所示,接收到第一个数据写入请求(称为数据写入请求1),数据写入请求1中携带的待写入数据的偏移量为0、待写入数据量为3KB,确定将待写入数据写入文件标识对应的目标缓存区域时,基于目标缓存区域的区域起始位置、偏移量和待写入数据量,在目标缓存区域内确定待写入数据对应的第一缓存区间为[0,4),即0~3KB。此时FRT为空表,将第一缓存区间作为一个第二缓存区间[0,4),并将待写入数据保存至第二缓存区间[0,4)。
接收到第二个数据写入请求(称为数据写入请求2),数据写入请求2中携带的待写入数据的偏移量为5、待写入数据量为3KB,确定将待写入数据写入文件标识对应的目标缓存区域时,在目标缓存区域内确定待写入数据对应的第一缓存区间为[5,8),即5~7KB。此时FRT中存在第二缓存区域[0,4),第一缓存区间[5,8)与第二缓存区域[0,4)之间不存在重叠区域,将第一缓存区间[5,8)作为一个第二缓存区间[5,8),并将待写入数据保存至第二缓存区间[5,8)。
接收到第三个数据写入请求(称为数据写入请求3),数据写入请求3中携带的待写入数据的偏移量为10、待写入数据量为2KB,确定将待写入数据写入文件标识对应的目标缓存区域时,在目标缓存区域内确定待写入数据对应的第一缓存区间为[10,12),即10~11KB。此时FRT中存在第二缓存区域[0,4)、第二缓存区间[5,8),第一缓存区间[10,12)与第二缓存区域[0,4)、第二缓存区间[5,8)之间均不存在重叠区域,将第一缓存区间[10,12)作为一个第二缓存区间[10,12),并将待写入数据保存至第二缓存区间[10,12)。由于在FRT中每一个结点的主键值比它的左孩子的主键值大,比它的右孩子的小,因此,将第二缓存区间[5,8)作为父节点。
……
接收到第五个数据写入请求(称为数据写入请求5),数据写入请求5中携带的待写入数据的偏移量为2、待写入数据量为4KB,确定将待写入数据写入文件标识对应的目标缓存区域时,在目标缓存区域内确定待写入数据对应的第一缓存区间为[2,6),即2~5KB。此时FRT中存在第二缓存区域[0,4)、第二缓存区间[5,8)、第二缓存区间[10,12)、第二缓存区间[13,15),第一缓存区间[2,6)与第二缓存区域[0,4)、第二缓存区间[5,8)之间存在重叠区域,则将第一缓存区间[2,6)和第二缓存区域[0,4)、第二缓存区间[5,8)进行合并,获得合并缓存区[0,8),然后,将合并缓存区[0,8)作为新的第二缓存区间[0,8),并将待写入数据保存至新的第二缓存区间[0,8)。为了使FRT保持平衡,降低树内操作的时间复杂度,此时还需要通过旋转调整树结构,调整后的FRT参阅图6所示。
为了保持缓存和预设存储区域的数据一致性,在将待写入数据保持至目标缓存区域之后,需要将缓存中的数据同步到设置的第一存储位置中。参阅图7所示,其为本申请实施例中提供的一种可能的缓存与第一存储位置的示意图,其中,第一存储位置可以部署于硬盘、闪存等设备中,第一存储位置也可以部署于分布式云存储系统的各个存储节点中。示例性的,第一存储位置可以采用对象存储服务(Cloud Object Storage,COS)。
参阅图8所示,其为本申请实施例中的对缓存数据进行同步的流程示意图,具体包括以下过程:
首先,在确定将目标缓存区域中的数据回写至第一存储位置后,对应目标文件的文件标识生成新的目标缓存区域,将前一个目标缓存区域的区域标识加入冻结队列中。
作为一种举例,可以在接收到同步指令后,将目标缓存区域中的数据回写至指定的第一存储位置,该第一存储位置可以是指外部存储设备,也可以是指存储节点。
作为另一种举例,按照设定的同步频率,将目标缓存区域中的数据回写至指定的第一存储位置。比如,设置的同步频率可以是30秒/次。
其次,判断前一个目标缓存区域的区域标识的入队等待时长是否大于预设的时长门限值。若前一个目标缓存区域的区域标识的入队等待时长不大于预设的时长门限值。进一步的,判断前一个目标缓存区域的元数据信息是否在设定提交时长内保存至第二存储位置。
若前一个目标缓存区域的元数据信息在设定提交时长内保存至第二存储位置,确定同步成功,否则重新执行上述缓存数据同步流程。若数据同步的重试次数超过预设的同步重试次数,则确定写入失败,并返回同步失败指示。示例性的,预设的同步重试次数可以为2次。
在文件系统中,目标缓存区域中除了包含目标文件的文件数据,还包含元数据信息,元数据信息包括但不限于目标缓存区域的大小、目标缓存区域中每个第二缓存区间对应的物理存储地址、访问时间等中的任意一项或多项。为了保持元数据信息的一致性,因此在将待写入数据保持至目标缓存区域之后,需要将缓存中的元数据信息同步到指定的第二存储位置中,第二存储位置用于管理元数据信息。示例性的,第二存储位置部署于分布式云存储系统中的元数据管理模块中。
考虑到接收多个数据写入请求的情况,为了保障多个数据写入请求的先后关系,将新的缓存区域作为新的目标缓存区域之后,将待写入数据保存至新的目标缓存区域内的第一缓存区间之前,还包括:
生成新的目标缓存区域对应的序号,序号用于指示新的目标缓存区域的元数据信息的保存顺序;
将写入数据后的第一缓存区间作为新的目标缓存区域中的一个第二缓存区间之后,还包括:
根据新的目标缓存区域中包含的各个第二缓存区间,生成新的目标缓存区域的元数据信息,元数据信息中至少包含新的目标缓存区域中各个第二缓存区间对应的物理存储地址;
根据序号,将新的目标缓存区域的元数据信息保存至第二存储位置。
示例性的,可以基于最小堆,根据序号依次将新的目标缓存区域的元数据信息保存至第二存储位置。其中,采用ID表示目标缓存区域对应的序号,最小堆的各节点的Key为ID,数值(Value)为目标缓存区域的元数据信息,比如FRT的元数据信息。具体的,执行以下步骤:
(1)判断当前最小堆的堆顶的ID是否符合预期顺序的逻辑ID(expect_commit_id),若符合,则执行步骤(2),若不符合,则执行步骤(3);
(2)将当前最小堆的堆顶元数据信息保存至第二存储位置,标记元数据信息提交完成,expect_commit_id自增加1,然后删除堆顶元数据信息,判断最小堆是否为空,若为空,则执行步骤(3),若不为空,则重复执行步骤(1);
(3)等待下次入堆操作。
例如,参阅图9a所示,当前最小堆中各节点的ID的分别为1、2、3、4,其中,ID1、ID2、ID3、ID4分别对应FRT1、FRT2、FRT3、FRT4的元数据信息。假设,预期顺序的逻辑ID为1,当前最小堆的堆顶的ID为ID1,符合预期顺序的逻辑ID,则将FRT1的元数据信息保存至第二存储位置,然后,删除FRT1的元数据信息。删除FRT1的元数据信息后的最小堆参阅图9b所示。
本申请实施例中,为方便细粒度的数据块控制,数据可以数据块的形式存储于第一存储位置中。作为一种可能的实现方式,可以在将待写入数据写入目标缓存区域之后,基于预设的数据块大小,对目标缓存区域中的已保存数据进行切分,然后,将至少一个数据块回写至第一存储位置。
作为另一种可能的实现方式,也可以在将待写入数据写入目标缓存区域之前,基于预设的数据块大小,对待写入数据进行切分,然后,将切分后的待写入数据写入目标缓存区域。示例性的,在该方式中采用的FRT,命名为FBRT(File Block Range Tree)。
基于FRT的索引结构,本申请实施例中提供一种可能的数据读取方法。当接收到针对目标文件的数据读取请求时,根据数据读取请求中携带的待读取数据的偏移量和文件标识,判断目标文件的文件标识对应的FRT中是否存在待读取数据。若FRT中存在待读取数据,则从FRT中读取待读取数据,否则,从第一存储位置中待读取数据。
与上述方法实施例基于同一发明构思,本申请实施例还提供了一种数据存储装置的架构示意图,参阅图10所示,该数据存储装置1000包括接收单元1001和处理单元1002,其中,处理单元1002中包括确定单元1002a、合并单元1002b和保存单元1002c。
其中,接收单元1001用于接收针对目标文件触发的数据写入请求,数据写入请求中至少携带对应目标文件的待写入数据、文件标识和偏移量;
确定单元1002a,用于确定将待写入数据写入文件标识对应的目标缓存区域时,基于目标缓存区域的区域起始位置和偏移量,在目标缓存区域内确定待写入数据对应的第一缓存区间;
合并单元1002b,用于若确定第一缓存区间与至少一个第二缓存区间之间存在重叠区域,则将第一缓存区间和至少一个第二缓存区间进行合并,获得合并缓存区;其中,每个第二缓存区间用于在确定第一缓存区间之前保存对应目标文件的其他待写入数据;
保存单元1002c,用于将合并缓存区作为新的第二缓存区间,并将待写入数据保存至新的第二缓存区间。
可选的,数据写入请求还携带待写入数据的待写入数据量;
确定将待写入数据写入文件标识对应的目标缓存区域时,确定单元1002a用于:
若目标缓存区域中已存储数据量和待写入数据量之和不大于预设的数据量门限值,则确定将待写入数据写入所述目标缓存区域;或者,
若目标缓存区域中包含的第二缓存区间的数目不大于预设的区间数目门限值,则确定将待写入数据写入目标缓存区域。
可选的,基于目标缓存区域的区域起始位置和偏移量,在目标缓存区域内确定待写入数据对应的第一缓存区间时,确定单元1002a用于:
基于目标缓存区域的区域起始位置和偏移量,在目标缓存区域内确定待写入数据对应的第一缓存区间的区域起始位置;
基于待写入数据量,在目标缓存区域内确定待写入数据对应的第一缓存区间的区域结束位置;
基于第一缓存区间的区域起始位置和第一缓存区间的区域结束位置,确定待写入数据对应的第一缓存区间。
可选的,确定第一缓存区间与至少一个第二缓存区间中的一个第二缓存区间之间存在重叠区域时,确定单元1002a用于执行以下操作中的任意一种或多种的组合:
若第一缓存区间的区域起始位置或区域结束位置,位于一个第二缓存区间的区域起始位置和区域结束位置之间,则确定第一缓存区间与一个第二缓存区间之间存在重叠区域;
若一个第二缓存区间的区域起始位置或区域结束位置,位于第一缓存区间的区域起始位置和区域结束位置之间,则确定第一缓存区间与一个第二缓存区间之间存在重叠区域;
若第一缓存区间的区域起始位置和区域结束位置,与一个第二缓存区间的区域起始位置和区域结束位置相同,则确定第一缓存区间与一个第二缓存区间之间存在重叠区域;
若第一缓存区间的区域起始位置,与一个第二缓存区间的区域结束位置相同,则确定第一缓存区间与一个第二缓存区间之间存在重叠区域;
若第一缓存区间的区域结束位置,与一个第二缓存区间的区域起始位置相同,则确定第一缓存区间与一个第二缓存区间之间存在重叠区域。
可选的,将第一缓存区间和至少一个第二缓存区间进行合并,获得合并缓存区时,合并单元1002b用于:
根据至少一个第二缓存区间和第一缓存区间的区域起始位置,将至少一个第二缓存区间和第一缓存区间的区域起始位置中,与目标缓存区域的区域起始位置之间的距离最小的区域起始位置,作为合并缓存区的区域起始位置;
根据至少一个第二缓存区间和第一缓存区间的区域结束位置,将至少一个第二缓存区间和第一缓存区间的区域起始位置中,与目标缓存区域的区域起始位置之间的距离最大的区域结束位置,作为合并缓存区的区域结束位置;
基于合并缓存区的区域起始位置和合并缓存区的区域结束位置,获得合并缓存区。
可选的,数据存储装置1000还包括线程池单元1004,线程池单元1004用于:
按照预设的数据块大小,对目标缓存区域中的已保存数据进行切分,得到至少一个数据块;
将至少一个数据块回写至指定的第一存储位置。
可选的,数据存储装置1000还包括分配单元1003;
分配单元1003,用于若确定不将待写入数据写入文件标识对应的目标缓存区域,则对应文件标识生成新的缓存区域,并将新的缓存区域作为新的目标缓存区域;
确定单元1002a,还用于基于新的目标缓存区域的区域起始位置和偏移量,在新的目标缓存区域内确定待写入数据对应的第一缓存区间;
保存单元1002c,还用于将待写入数据保存至新的目标缓存区域内的第一缓存区间,并将写入数据后的第一缓存区间作为新的目标缓存区域中的一个第二缓存区间。
可选的,数据存储装置1000还包括提交单元1005;
将新的缓存区域作为新的目标缓存区域之后,分配单元1003还用于:
生成新的目标缓存区域对应的序号,序号用于指示新的目标缓存区域的元数据信息的保存顺序;
将写入数据后的第一缓存区间作为新的目标缓存区域中的一个第二缓存区间之后,确定单元1002a还用于:
根据新的目标缓存区域中包含的各个第二缓存区间,生成新的目标缓存区域的元数据信息,元数据信息中至少包含新的目标缓存区域中各个第二缓存区间对应的物理存储地址;
提交单元1005,用于根据序号,将新的目标缓存区域的元数据信息保存至指定的第二存储位置。
下面,结合一个具体的实施例,对本申请实施例中提供的数据存储装置的各模块之间的交互进行说明。
参阅图11所示,数据存储装置1100中包含以下模块:接收单元1101、处理单元1102、分配单元1103、线程池单元1104和提交单元1105。其中,接收单元1101也可称为ID分配器(Allocator),线程池单元1104也可称为线程池(Flush Worker),提交单元1105也可称为committer。第一存储位置部署于分布式云存储系统中的存储节点,第二存储位置部署于分布式云存储系统中的元数据管理模块中。需要说明的是,处理单元1102中包括确定单元、合并单元、保存单元,图11中未示出。
首先,接收单元1101接收到一个针对目标文件的数据写入请求(称为请求1)后,处理单元1102确定将称为请求1中携带的待写入数据1写入文件标识对应的目标缓存区域(称为区域1)后,执行S302-S304,将待写入数据1保存至区域1中,具体不再赘述。
参阅图11所示,区域1中包含第二缓存区间[0,8)、第二缓存区间[10,12)、第二缓存区间[13,15),即0~7KB、10~11KB、13~14KB,接收单元1101再次接收到一个针对目标文件的数据写入请求(称为请求2)后,处理单元1102确定不将请求2中携带的待写入数据2写入文件标识对应的目标缓存区域(称为区域1)时,将区域1的区域标识加入冻结队列中,以使区域1的状态信息从可更改状态变更为不可更改状态。
Allocator对应目标文件的区域标识生成新的缓存区域,并将新的缓存区域作为新的目标缓存区域(称为区域2)。同时,处理单元1102将immutable状态的区域1发送至Flush Worker。Flush Worker将区域1中的数据保存至第一存储位置,然后将区域1的元数据信息发送给committer。committer将区域1的元数据信息提交至第二存储位置。
在Flush Worker将区域1中的数据保存至第一存储位置的过程中,或者,committer将区域1的元数据信息保存至第二存储位置的过程中,处理单元1102均可以将待写入数据2保存至区域2,将待写入数据保存至区域2的过程在此不再赘述。
这样,用户不用等待目标缓存区域的数据全部保存至第一存储位置且元数据信息提交至第二存储位置,再进行下次写入,大大提高了写效率,此外刷数据的并发度可以由Flush Worker控制,可随时调整,灵活性更高。
此外,由于多个immutable状态的目标缓存区域的元数据信息到达committer的时间是随机的,为了保障数据写请求的先后关系,Allocator可以给新生成的目标缓存区域分配逻辑ID作为序号,该逻辑ID可以采用自增ID。相应的,committer按照逻辑ID的顺序,将目标缓存区域的元数据信息提交至第二存储位置进行保存。
在介绍了本申请示例性实施方式的数据存储方法和装置之后,接下来,介绍根据本申请的另一示例性实施方式的电子设备。
所属技术领域的技术人员能够理解,本申请的各个方面可以实现为系统、方法或程序产品。因此,本申请的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
与上述方法实施例基于同一发明构思,本申请实施例中还提供了一种电子设备,参阅图12所示,电子设备1200可以至少包括处理器1201、以及存储器1202。其中,存储器1202存储有程序代码,当程序代码被处理器1201执行时,使得处理器1201执行上述任意一种数据存储方法的步骤。
在一些可能的实施方式中,根据本申请的计算装置可以至少包括至少一个处理器、以及至少一个存储器。其中,存储器存储有程序代码,当程序代码被处理器执行时,使得处理器执行本说明书上述描述的根据本申请各种示例性实施方式的数据存储方法中的步骤。例如,处理器可以执行如图3、图5或图8中所示的步骤。
与上述方法实施例基于同一发明构思,本申请提供的数据存储方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在电子设备上运行时,程序代码用于使电子设备执行本说明书上述描述的根据本申请各种示例性实施方式的数据存储方法中的步骤,例如,电子设备可以执行如图3、图5或图8中所示的步骤。
程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (10)

1.一种数据存储方法,其特征在于,包括:
接收针对目标文件触发的数据写入请求,所述数据写入请求中至少携带对应所述目标文件的待写入数据、文件标识和偏移量;
确定将所述待写入数据写入所述文件标识对应的目标缓存区域时,基于所述目标缓存区域的区域起始位置和所述偏移量,在所述目标缓存区域内确定所述待写入数据对应的第一缓存区间;
若确定所述第一缓存区间与至少一个第二缓存区间之间存在重叠区域,则将所述第一缓存区间和所述至少一个第二缓存区间进行合并,获得合并缓存区;其中,每个第二缓存区间用于在确定所述第一缓存区间之前保存对应所述目标文件的其他待写入数据;
将所述合并缓存区作为新的第二缓存区间,并将所述待写入数据保存至所述新的第二缓存区间。
2.如权利要求1所述的方法,其特征在于,所述数据写入请求还携带所述待写入数据的待写入数据量;
所述确定将所述待写入数据写入所述文件标识对应的目标缓存区域,包括:
若所述目标缓存区域中已存储数据量和所述待写入数据量之和不大于预设的数据量门限值,则确定将所述待写入数据写入所述目标缓存区域;或者,
若所述目标缓存区域中包含的第二缓存区间的数目不大于预设的区间数目门限值,则确定将所述待写入数据写入所述目标缓存区域。
3.如权利要求2所述的方法,其特征在于,所述基于所述目标缓存区域的区域起始位置和所述偏移量,在所述目标缓存区域内确定所述待写入数据对应的第一缓存区间,包括:
基于所述目标缓存区域的区域起始位置和所述偏移量,在所述目标缓存区域内确定所述待写入数据对应的第一缓存区间的区域起始位置;
基于所述待写入数据量,在所述目标缓存区域内确定所述待写入数据对应的第一缓存区间的区域结束位置;
基于所述第一缓存区间的区域起始位置和所述第一缓存区间的区域结束位置,确定所述待写入数据对应的第一缓存区间。
4.如权利要求1所述的方法,其特征在于,确定所述第一缓存区间与所述至少一个第二缓存区间中的一个第二缓存区间之间存在重叠区域,包括以下操作中的任意一种或多种的组合:
若所述第一缓存区间的区域起始位置或区域结束位置,位于所述一个第二缓存区间的区域起始位置和区域结束位置之间,则确定所述第一缓存区间与所述一个第二缓存区间之间存在重叠区域;
若所述一个第二缓存区间的区域起始位置或区域结束位置,位于所述第一缓存区间的区域起始位置和区域结束位置之间,则确定所述第一缓存区间与所述一个第二缓存区间之间存在重叠区域;
若所述第一缓存区间的区域起始位置和区域结束位置,与所述一个第二缓存区间的区域起始位置和区域结束位置相同,则确定所述第一缓存区间与所述一个第二缓存区间之间存在重叠区域;
若所述第一缓存区间的区域起始位置,与所述一个第二缓存区间的区域结束位置相同,则确定所述第一缓存区间与所述一个第二缓存区间之间存在重叠区域;
若所述第一缓存区间的区域结束位置,与所述一个第二缓存区间的区域起始位置相同,则确定所述第一缓存区间与所述一个第二缓存区间之间存在重叠区域。
5.如权利要求1所述的方法,其特征在于,将所述第一缓存区间和所述至少一个第二缓存区间进行合并,获得合并缓存区,包括:
根据所述至少一个第二缓存区间和所述第一缓存区间的区域起始位置,将所述至少一个第二缓存区间和所述第一缓存区间的区域起始位置中,与所述目标缓存区域的区域起始位置之间的距离最小的区域起始位置,作为所述合并缓存区的区域起始位置;
根据所述至少一个第二缓存区间和所述第一缓存区间的区域结束位置,将所述至少一个第二缓存区间和所述第一缓存区间的区域起始位置中,与所述目标缓存区域的区域起始位置之间的距离最大的区域结束位置,作为所述合并缓存区的区域结束位置;
基于所述合并缓存区的区域起始位置和所述合并缓存区的区域结束位置,获得所述合并缓存区。
6.如权利要求1-5任一项所述的方法,其特征在于,将所述待写入数据保存至所述新的第二缓存区间之后,还包括:
按照预设的数据块大小,对所述目标缓存区域中的已保存数据进行切分,得到至少一个数据块;
将所述至少一个数据块回写至指定的第一存储位置。
7.如权利要求1-5任一项所述的方法,其特征在于,还包括:
若确定不将所述待写入数据写入所述文件标识对应的目标缓存区域,则对应所述文件标识生成新的缓存区域,并将所述新的缓存区域作为新的目标缓存区域;
基于所述新的目标缓存区域的区域起始位置和所述偏移量,在所述新的目标缓存区域内确定所述待写入数据对应的第一缓存区间;
将所述待写入数据保存至所述新的目标缓存区域内的第一缓存区间。
8.一种数据存储装置,其特征在于,所述数据存储装置包括:
接收单元,用于接收针对目标文件触发的数据写入请求,所述数据写入请求中至少携带对应所述目标文件的待写入数据、文件标识和偏移量;
确定单元,用于确定将所述待写入数据写入所述文件标识对应的目标缓存区域时,基于所述目标缓存区域的区域起始位置和所述偏移量,在所述目标缓存区域内确定所述待写入数据对应的第一缓存区间;
合并单元,用于若确定所述第一缓存区间与至少一个第二缓存区间之间存在重叠区域,则将所述第一缓存区间和所述至少一个第二缓存区间进行合并,获得合并缓存区;其中,每个第二缓存区间用于在确定所述第一缓存区间之前保存对应所述目标文件的其他待写入数据;
保存单元,用于将所述合并缓存区作为新的第二缓存区间,并将所述待写入数据保存至所述新的第二缓存区间。
9.一种电子设备,其特征在于,其包括处理器和存储器,其中,所述存储器存储有程序代码,当所述程序代码被所述处理器执行时,使得所述处理器执行权利要求1~7中任一所述方法的步骤。
10.一种计算机可读存储介质,其特征在于,其包括程序代码,当所述程序代码在电子设备上运行时,所述程序代码用于使所述电子设备执行权利要求1~7中任一所述方法的步骤。
CN202110176155.0A 2021-02-09 2021-02-09 一种数据存储方法、装置、设备及存储介质 Pending CN114911410A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110176155.0A CN114911410A (zh) 2021-02-09 2021-02-09 一种数据存储方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110176155.0A CN114911410A (zh) 2021-02-09 2021-02-09 一种数据存储方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN114911410A true CN114911410A (zh) 2022-08-16

Family

ID=82761184

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110176155.0A Pending CN114911410A (zh) 2021-02-09 2021-02-09 一种数据存储方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN114911410A (zh)

Similar Documents

Publication Publication Date Title
US11474972B2 (en) Metadata query method and apparatus
KR102240557B1 (ko) 데이터 저장 방법, 장치 및 시스템
CN108519862B (zh) 区块链系统的存储方法、装置、系统和存储介质
US20190140902A1 (en) Centralized configuration data in a distributed file system
EP3131265A1 (en) Data prefetching method for distributed hash table dht storage system, node, and system
US11269902B2 (en) Time series data management method, device, and apparatus
US11210229B2 (en) Method, device and computer program product for data writing
CN107153512B (zh) 一种数据迁移方法和装置
CN103399823A (zh) 业务数据的存储方法、设备和系统
CN113568582A (zh) 数据管理方法、装置和存储设备
CN113806300A (zh) 数据存储方法、系统、装置、设备及存储介质
CN115114232A (zh) 一种历史版本对象列举方法、装置及其介质
US11157456B2 (en) Replication of data in a distributed file system using an arbiter
US11080239B2 (en) Key value store using generation markers
CN106970830B (zh) 一种分布式虚拟机的存储控制方法及虚拟机
CN112764662B (zh) 用于存储管理的方法、设备和计算机程序产品
CN109542860B (zh) 基于hdfs的业务数据管理方法、终端设备
CN116755625A (zh) 一种数据处理方法、装置、设备及可读存储介质
CN114911410A (zh) 一种数据存储方法、装置、设备及存储介质
US11531483B2 (en) Direct data placement
CN112000289B (zh) 全闪存储服务器系统数据管理方法及相关组件
CN114490540A (zh) 数据存储方法、介质、装置和计算设备
CN111399753B (zh) 写入图片的方法和装置
CN107145305B (zh) 一种分布式物理磁盘的使用方法及虚拟机
CN107153513B (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