CN110321301B - 一种数据处理的方法及装置 - Google Patents
一种数据处理的方法及装置 Download PDFInfo
- Publication number
- CN110321301B CN110321301B CN201810292667.1A CN201810292667A CN110321301B CN 110321301 B CN110321301 B CN 110321301B CN 201810292667 A CN201810292667 A CN 201810292667A CN 110321301 B CN110321301 B CN 110321301B
- Authority
- CN
- China
- Prior art keywords
- data
- node
- cache
- cache space
- space
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0813—Multiuser, multiprocessor or multiprocessing cache systems with a network or matrix configuration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
- G06F12/0831—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
- G06F12/0835—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means for main memory peripheral accesses (e.g. I/O or DMA)
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0871—Allocation or management of cache space
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例公开了一种数据处理的方法及装置,该方法包括:第一节点接收请求端发送的写请求,所述写请求包括所述请求端待写入的第一数据以及所述第一数据的标识,所述第一节点根据第一指针将所述第一数据写入缓存设备的第一缓存空间中,所述第一缓存空间为可连续寻址访问的地址空间,所述第一指针用于指示所述第一缓存空间中当前可写入的位置,所述第一节点将所述第一缓存空间中的第一指针移动至所述第一数据在所述第一缓存空间中结束后的空闲位置。这样,任意字节大小的数据可写入第一缓存空间,提高了第一缓存空间的利用率。
Description
技术领域
本申请涉及数据存储领域,尤其涉及一种数据处理的方法及装置。
背景技术
消息队列、索引值、数据库的日志、海量的元数据等不同应用和场景,产生了不同的输入/输出(input/output,I/O)大小。同时,应用在修改数据的时候可能只会修改其中少量字节。然而,存储***因受限于硬盘的存储介质的限制,对外提供的最小访问粒度为扇区或页。而且,现有存储***的缓存(Cache)空间切分后的缓存空间(Chunk)单元的容量也是扇区或页大小的整数倍,应用的每次修改和写入都需要按照Chunk粒度将缓存空间中的数据写入硬盘,导致了缓存空间的利用率低,存在大量浪费。
发明内容
本申请实施例提供了一种数据处理的方法及装置,用于提高缓存空间的利用率。
第一方面,本申请实施例提供了一种数据处理的方法,该方法包括:
当请求端(比如为主机或某应用程序)需要向节点集群中的第一节点中的缓存设备写入新的第一数据时,请求端则会向第一节点发送写请求,其中写请求中需携带待写入的第一数据以及该第一数据的标识。该写请求通过节点集群中的管理节点转发至第一节点,或者该写请求直接从请求端发送至第一节点,第一节点接收到该写请求。
第一节点中维护着一个可连续寻址访问的地址空间的第一缓存空间,该第一缓存空间中还维护着一个第一指针,该第一指针始终指向第一缓存空间中当前可写入数据的位置。当第一节点接收到该写请求后,第一节点则根据第一指针将写请求中的第一数据写入第一缓存空间,并相应移动第一指针的位置,即将第一指针移动至第一数据在第一缓存空间中结束后的空闲位置。
由于第一节点的第一缓存空间为可连续寻址访问的地址空间,那么无论请求端所请求写入的数据大小是多少字节,都可以通过该第一指针位置对待写入的数据进行存储,无需如现有技术一样当待写入的数据不满足一个最小Chunk单位时需要补齐写入。这样,既提高了第一缓存空间的利用率,同时也提高了数据写入的效率。
一种可能的实现方式中,第一节点中还维护了一个第一索引表,该第一索引表中用于存储各个写入的数据的索引信息,这些索引信息用于快速从第一缓存空间中查找到其对应的数据。在第一节点将第一数据写入第一缓存后,该方法还包括:
第一节点为新写入的第一数据生成第一索引信息,该第一索引信息至少包括该第一数据的标识,第一节点在生成第一索引信息后,可以先将该第一索引信息***在第一缓存空间中的第一数据的起始位置之前的位置,第一节点再将该第一索引信息添加至第一索引表中。
该实现方式中,第一节点还维护了一个第一索引表,方便后续请求端从第一缓存空间读取数据时可以通过第一索引表快速查找,从而提高了数据读取的效率。
另一种可能的实现方式中,在第一节点为该第一数据生成了相应的第一索引信息后,该方法还包括:
第一节点通过远程直接数据存取方式将第一数据以及第一索引信息写入第二节点的缓存空间中。
其中,第二节点为第一节点的镜像节点,镜像节点用于备份第一节点的数据,第二节点的缓存设备的缓存空间的结构与第一节点的一致,且第二节点的缓存空间的数据与第一节点的缓存空间的数据同步,用于提高数据的安全性。该远程直接数据存取方式可以为远程直接数据存取(remote direct memory access,RDMA)方式,通过该方式第一节点可以在第二节点的处理器未感知的情形下直接将第一数据以及第一数据的索引信息写入第二节点的缓存空间中。这样,第一节点在第二节点写入数据的过程,无需第二节点的处理器进行处理,从而不会产生等待时延,提高了数据备份的效率。
另一种可能的实现方式中,该方法还包括:
当请求端需要从第一节点读取第一节点的缓存设备上的数据时,请求端则向第一节点发送一个第一读请求,该第一读请求至少包括待读的第二数据的标识,该第一读请求还可以包括一个目的地址,该目的地址对应的存储空间并非第一节点的缓存设备中的存储空间,而是该请求端所依赖的操作***在该请求端运行时所为其分配的专有的一段内存空间,这段内存空间由请求端独立管理且可直接访问。
第一节点在接收到第一读请求后,则根据第一读请求的第二数据的标识从第一索引表中查找第二数据的索引信息,若查找到该第二数据的索引信息,则第一节点将第二数据的索引信息所指向的数据发送给请求端。即,第一节点可以将第二数据的索引信息所指向的数据拷贝至该目的地址对应的存储空间中。
本实现方式中,当请求端需要读取数据时,第一节点从第一索引表中快速查找该数据的索引信息,若查找到,则将第一缓存空间中该索引信息指向的数据发送给请求端,从而完成读操作,提高了读取数据的效率。
另一种可能的实现方式中,该方法还包括:
第一节点接收请求端发送的第二读请求,该第二读请求包括待读的第三数据的标识;该第二读请求还可以包括目的地址。
第一节点根据第二读请求的第三数据的标识从第一索引表中查找第三数据的索引信息,当查找到第三数据的索引信息在第一缓存空间中指向的数据不完整时,第一节点先将第三数据的索引信息所指向的不完整的数据发送给请求端,并从第一节点的硬盘中将第三数据的索引信息指向的不完整数据的其它部分数据发送给请求端。即,第一节点向将第一缓存空间中不完整的数据拷贝至目的地址对应的存储空间,再从硬盘中找到其它部分的数据拷贝至目的地址对应的存储空间。
本实现方式中,当第一节点在第一缓存空间中查找到待读的数据不完整时,则将所查找到的不完整的数据发送给请求端,并从硬盘中查找其它部分的数据发送给请求端。这样,由于从缓存空间读取数据的速度快于从硬盘中读取数据的速率,因此,提高了数据读取的效率。
可选的,在另一种可能的实现方式中,当第一节点还可以维护一个第二缓存空间,该第二缓存空间专用于读取数据,当第一节点未从第一缓存空间中查找到待读的数据或者查找到的数据不完整时,第一节点可以从第二缓存空间中查找待读的数据,若从第二缓存空间中仍未找到该待读的数据或者查找到的待读的数据不完整时,第一节点再从硬盘中查找该待读的数据或者查找其它部分的数据。
这样,当读取数据时,第一节点优先从第一缓存空间中读取数据,因为第一缓存空间是用于写入新数据的,那么从第一缓存空间所读取的数据为最新的数据,减少了读取旧的错误数据的情况。第一节点其次从第二缓存空间中读取数据,由于缓存空间的读取速度大于硬盘的读取速度,从而也提高了数据读取的效率。
另一种可能的实现方式中,第一节点的第一缓存空间中,还维护了一个第二指针,该指针用于指向第一缓存空间中未拷贝至所述硬盘的数据的起始位置,该方法还包括:
当第一缓存空间的空闲空间较少或者达到刷盘(将缓存空间的数据拷贝至硬盘)周期时,第一节点根据第二指针按照预设长度将第一缓存空间中的数据拷贝至所述第一节点的硬盘中,并将第二指针移动到第一缓存空间中已经拷贝至所述硬盘的数据的结束后的位置。其中,该预设长度可以为固定的多少字节的长度,比如为20字节,或者该预设长度也可以为一个完整数据的长度,对此不做限定。
本实现方式中,第一节点在第一缓存空间中通过维护一个第二指针将第一缓存空间中的数据逐一拷贝至硬盘中,提高了数据的安全性。
另一种可能的实现方式中,在第一节点将第一缓存空间的部分数据拷贝至硬盘并移动第二指针后,该方法还包括:
第一节点将第二指针的位置信息发送给第二节点,以使得第二节点根据第二指针的位置将第二节点的缓存空间的部分数据也拷贝至第二节点对应的硬盘。需要说明的是,当第一节点与第二节点共享硬盘时,第二节点只需将第二节点的缓存空间中的第二指针移动至相应位置即可,无需执行将数据拷贝至硬盘的操作,因为第二节点与第一节点共享同样的硬盘,此时第一节点已经将数据拷贝至该共享的硬盘,则无需再拷贝一次。
本实现方式中,当第一节点有数据刷盘时,通知第一节点的镜像节点(第二节点)同样进行刷盘操作,使得镜像节点的数据与第一节点的数据同步,提高了的数据的安全性。
另一种可能的实现方式中,第一节点的缓存设备还包括第二缓存空间,该第二缓存空间用于存储待读的数据,该方法还包括:
第一节点根据预设的算法确定第一缓存空间中待迁移的第一目标数据,该第一目标数据可以为不再为热点的数据,即不常被请求端读取。
第一节点将第一目标数据的索引信息从第一索引表中删除,由于该第一目标数据将被迁移,因此,则删掉其在第一索引表中对应的索引信息。
由于即使第一目标数据不再为热点数据,该第一目标数据也不能被直接删除掉,因此第一节点将第一目标数据拷贝至第二缓存空间中。
在拷贝完成后,第一节点释放第一目标数据在第一缓存空间的存储空间。
本实现方式中,第一节点可以周期性的计算第一缓存空间中不再为热点的数据,并将其迁移至其它缓存空间,释放其在第一缓存空间的存储空间,从而提高了第一缓存空间的利用率。
可选的,在第一节点将第一目标数据拷贝至第二缓存空间之前,该方法还包括:
第一节点判断第一目标数据的数量达到第一预设阈值。
由于进行数据的迁移会造成一定的***消耗,因此,第一节点还可以设置一个预设阈值,当待迁移的第一目标数据的数量达到该预设阈值时,再将这些带迁移的目标数据进行整体的迁移,从而减少了***的消耗。
另一种可能的实现方式中,第一节点的缓存设备还包括第三缓存空间,该第三缓存空间用于存储待读的数据,比如从第一节点硬盘中所读取的数据,该方法还包括:
第一节点确定第三缓存空间中待迁移的第二目标数据,第一节点删除第二目标数据的索引信息,第一节点将第二目标数据移动至第三缓存空间中第三指针指向的空闲位置,第三指针用于指向第三缓存空间可写入的位置。第一节点释放第三缓存空间中第二目标数据移动前的存储空间。
本实现方式中,第三缓存空间中部分数据不再为热点数据,则将这些数据迁移至第三缓存空间的可写入的其它位置,从而空闲出其原来的位置,空闲出的位置则可重新利用,存储新的数据。这样,提高了的第三缓存空间的利用率。
另一中可能的实现方式中,在第一节点接收请求端发送的写请求之前,该方法还包括:
第一节点接收请求端发送的创建请求,该创建请求用于请求第一节点创建第一缓存空间,用于写入请求端所产生的一些需要写入的数据。第一节点则根据创建请求创建第一缓存空间。
第二方面,本申请实施例提供了一种数据处理的装置,该装置具有实现上述第一方面中任意一种所描述实现方式中功能。该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块。
第三方面,本申请实施例提供一种数据处理的装置,该装置包括:处理器、存储器,处理器、存储器通过总线连接,存储器存储有计算机指令,处理器通过执行计算机指令用于实现如第一方面所描述的任意一种实现方式。
第四方面,本申请实施例提供一种可读存储介质,该存储介质存储有用于实现如第一方面所描述的任意一种实现方式的计算机指令。
第五方面,本申请实施例提供一种计算机程序产品,该计算机程序产品包括计算机软件指令,该计算机软件指令可通过处理器进行加载来实现如第一方面所描述的任意一种实现方式中的流程。
第六方面,本申请实施例提供一种芯片装置,该芯片***包括处理器和存储器,处理器连接到存储器,该处理器可以运行存储器存储的指令,以使该芯片装置执行上述第一方面所描述的任意一种实现方式。
第七方面,本申请实施例提供一种数据处理的***,该***为节点集群***,该节点集群***中包括多个节点,其中,每个节点如实现第一方面任意实现方式的第一节点。
附图说明
图1为本申请实施例中数据处理的方法所应用的***架构示意图;
图2为本申请实施例中数据在缓存空间的组织形式以及数据写入缓存空间的示意图;
图3为本申请实施例中创建缓存空间流程的一个示意图;
图4为本申请实施例中写缓存流程的一个示意图;
图5为本申请实施例中读缓存流程的一个示意图;
图6为本申请实施例中缓存数据刷盘流程的一个示意图;
图7为本申请实施例中缓存空间释放流程的一个示意图;
图8为本申请实施例中数据处理的装置的一个示意图;
图9为本申请实施例中数据处理的装置的另一示意图。
具体实施方式
本申请实施例提供了一种数据处理的方法及装置,用于提高缓存空间的利用率。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
参照图1所示,图1为本申请实施例中数据处理的方法所应用的一个***架构示意图。图1实施例中,包括节点(Node)0、节点1至节点x多个节点,多个节点之间可通过网络或进一个或多个网络交换机连接,该多个节点组成存储集群。该***架构中还包含管理节点。管理节点可以为单独管理服务器,可选的,管理节点也可以部署在任意一个节点中。该管理节点用于管理存储集群的管理,比如,响应用户的配置运维请求。可选的,每个节点中都设置有硬盘或者都连接有外置于节点的硬盘,每个节点也可以共享相同的硬盘,对此,本申请不做限定。每个节点都具备远程直接数据存取(remote direct memory access,RDMA)的功能,使得每个节点在向其它节点写入数据时,无需其它节点的中央处理器(centralprocessing unit,CPU)参与,从而无需等待其它节点的反馈即可完成数据写入。每个节点均包含有缓存设备,缓存设备包含缓存控制器和缓存介质。需要说明的是,本申请实施例中,节点中的缓存设备不单可以使用内存作为高速缓存介质,也可以使用非易失的存储级内存(storage class memory,SCM)作为缓存介质,比如相变存储器(phase changememory,PCM)、非易失性内存模块(non-volatile dual in-line memory module,NVDIMM)等。本申请对此不做限定。另外,本申请实施例中,节点也可以应用于无硬盘的存储***。比如全内存的存储***、仅使用SCM等内存级介质的存储***。本申请对此不做限定。
缓存设备的缓存控制器划分有缓存核心(Cache Core)控制模块、缓存空间(CacheSpace)管理模块、缓存写(Write Cache)模块以及缓存读(Read Cache)模块,下面对每个模块的功能进行介绍:
缓存核心控制模块:负责缓存中相关的I/O请求的处理逻辑,包括I/O请求的调度、分发、流程控制等。
缓存空间管理模块:用于对缓存空间进行管理,包括数据布局等。其中,缓存空间在图2实施例中再做详细描述。
缓存写模块:用于将新数据写入缓存并管理写入的新数据。比如,记录记录写入缓存空间但是还未写入硬盘的数据,该类数据称之为脏数据。为了提高数据的可靠性,数据除了写入当前节点的缓存空间,还可以写入其它节点(镜像节点)的缓存空间。
缓存读模块:用于管理从缓存空间读数据。读缓存空间中所记录的数据为干净数据,干净数据表示缓存空间中的数据和缓存空间对应的硬盘中的存储地址存储的数据是相同的。在缓存写模块将数据在写入到硬盘后,可以转换为干净数据。
下面结合图2所示,对本申请实施例的数据处理的方法进行示例性说明。
图2所展示是数据在缓存空间的组织形式以及数据写入缓存空间的示意图,下面对图2所示的各对象进行描述:
主机对象(Host Object):为使用缓存设备实现数据缓存的业务逻辑对象,如,存储***对主机提供的逻辑单元号(logical unit number,LUN)、文件等对象。这些对象是主机或者应用可见的。通常,存储***中每个Host Object只会在它的归属节点处理业务并向缓存设备下发I/O请求。若Host Object向非归属节点下发I/O请求,该非归属节点会转发该I/O请求到归属节点。归属节点为该Host Object用于缓存数据的主节点。
Cache I/O请求:请求端向缓存设备请求的读操作或者写操作。比如,由主机或者上层应用下发到节点中,即下发到节点的缓存设备。请求端可以为应用服务器、主机、移动设备等。每个I/O请求包含标识,该标识可以为键值(key)、数据长度(length)、数据(data)对应的存储地址等参数信息,其中:
key:为数据要写入硬盘的位置信息标识,key可以为由硬盘的ID(identification)+逻辑区块地址(logical block address,LBA)等信息组成,也可以为由主机对象的ID+位置偏移(offset)等信息组成,可用于硬盘寻址或作为数据分布的唯一依据。
length:为I/O请求写入或者需读取的数据大小,用于标识data中有效数据的长度,可以以Byte为单位,可以为任意字节长度。
data:对于写请求,其含义是保存了要写入存储***的数据;对于读请求,其指代的是待读取的数据。在实际应用中,一般用data对应的存储地址指代该data。对于写请求,data的存储地址表示该data在存储***的写入地址;对于读请求,data的存储地址(为了便于区分,可以称作data的目的存储地址)表示待读取的data在存储***的地址。
缓存项(Cache Item):在缓存读数据的缓存空间中和缓存写数据的缓存空间中都存储了海量的数据记录,每条数据记录称为一个Cache Item。一个Cache Item由一个头部(Header)信息和一个数据(data)组成。data为发送端需写入到缓存空间中的数据或者是从存储***的硬盘上读取到缓存空间中的数据。Header由节点在添加缓存记录时生成,作为上述data的描述信息。Header包含I/O请求中携带的key、length以及data对应的存储地址、标志位等信息。为了提升数据可靠性,还可以扩展保存数据的校验信息、版本号等信息。同时,为了快速查找Cache Item,Header中还预留部分空间,该预留部分空间用于存储索引信息,该索引信息为基于Header构建Hash链表或者索引树等缓存索引(Cache Index)索引数据结构所创建的关联信息。可选的,为了方便缓存资源的分配和管理,Header通常为固定的大小。Cache Item的大小(size)等于data size加上Header size,因data size是字节级可变的,所以Cache Item的size是可变的。
缓存空间(Cache Space):为保存Cache Item的线性空间,它是一段可连续寻址访问的内存空间。该内存空间可以为虚拟内存空间,即,对底层而言它可以为多段非连续的物理内存段映射组成;或者该内存空间也可以是连续的物理内存空间。对此,本申请不做限定。在本申请中,存储***初始化时,把缓存设备的物理内存空间通过逻辑形式切割为若干不同大小的Chunk,Chunk的容量从MB级到GB级不等,它是空间的基本回收单元。缓存空间采用瘦分配的策略,在其创建时只会映射部分物理内存空间,随着数据的不断写入和淘汰,动态为其分配和释放物理内存空间。缓存空间是为本申请方案中节点中缓存设备的内部组织形式,它可以直接暴露给缓存设备的使用者直接使用。不同的Host Object可以共享使用一个缓存空间,也可以创建自己独享的缓存空间。在本申请中,Cache***按照主机I/O的写入顺序构建Cache Item,并以附加的方式把Cache Item写入到缓存空间中。
如图2中所述,主机对象向Cache中提交了3个写I/O请求,待写入的数据分别为data1、data 2、data 3。***的Cache模块为3个I/O请求分别构建了三个Header,分别为Header 1、Header 1、Header 3。由此,构成3个Cache Item对,它们会按照顺序追加写入到Cache Space中。即数据在Cache Space上的分布顺序为Header 1、data 1、Header2、data2、Header 3、data 3...。
同一个Cache Item的Header、data也支持存放在不同的Cache Space中,但是Header指针需指向data的内存位置。
Cache Space分为读、写两种类型。对于写Cache Space,会维护Head指针和Tail指针。Head指针指向当前可追加写入的位置,Tail指针标识该写Cache Space已经刷盘(已经将数据写入存储***的硬盘)的位置。对于读Cache Space只需要Head指针,表示从硬盘上读出的数据可追加写入读Cache Space的位置。
写Cache Space的Head指针、Tail指针由Cache对象的主节点维护。读Cache Space的Head指针由每个节点维护。
缓存索引(Cache Index):字节级Cache的索引结构,采用哈希(Hash)或者树等高效查找的数据结构。按照功能划分为读Cache Index和写Cache Index,分别用于快速查询Cache中的干净数据和脏数据。Cache Index中的索引节点和数据分别为Cache Item中的Header和data。
在本申请实施例中,第一节点在第一缓存空间中至少维护着一个第一指针(即,上述的Head指针),该第一指针为写指针,该第一指针指向第一缓存空间中当前可写入的位置。当第一节点接收到请求端发送的写请求时,第一节点则根据第一指针的位置将该写请求中的待写入的第一数据写入该第一缓存空间中,并将第一指针进行相应移动,使得第一指针仍指向当前第一缓存空间可写入的位置。由于第一节点的第一缓存空间为可连续寻址访问的内存空间,那么无论请求端所请求写入的数据大小是多少字节,都可以通过该第一指针位置对待写入的数据进行存储,无需如现有技术一样当待写入的数据不满足一个最小Chunk单位时需要补齐写入。这样,既提高了第一缓存空间的利用率,同时也提高了数据写入的效率。
下面结合图3至图6所示,对本申请实施例中数据处理的方法中创建Cache Space的流程、Cache写流程、Cache读流程、Cache刷盘流程以及Cache空间释放流程进行示例性描述。为了方便描述,在一些实施例中,将第一节点与第二节点进行了区分,将第一节点作为主节点,第二节点作为镜像节点进行举例说明。另外,还对节点进行了更细致的划分,比如,在写缓存流程实施例中,对主节点中缓存设备进行了Cache Core控制模块和Cache Index的划分,在读缓存流程的实施例中,对主节点中缓存设备进行了Cache Core控制模块、Cache Index、硬盘以及Cache Space管理模块的划分,具体详见各个图中所示。
参照图3所示,本申请实施例中数据处理的方法的创建Cache Space的实施例包括:
301、请求端下发创建请求。
当请求端在运行时,请求端所依赖的操作***会为该请求端分配一段独立的内存的存储空间用于维护该请求端的运行。比如,该请求端是一个应用程序,该应用程序安装在主机设备上,那么该应用程序运行时,主机设备的操作***为其分配内存的存储空间,使得该应用程序的进程在所分配的内存的存储空间中存储。操作***为该应用程序所分配的内存的存储空间为该应用程序可直接访问和管理的存储空间,应用程序在运行过程中所需的所有数据都需要通过该内存的存储空间获得,比如,即使应用程序需要从硬盘中获取数据,也需要将数据先从硬盘读取至该内存的存储空间,应用程序才能使用该数据。本申请实施例中,为了提高请求端访问数据的效率,当请求端运行时或者为该请求端分配的内存的存储空间不足时,请求端可以向主节点的缓存设备申请一个存储空间,用于存储请求端所产生的一些较为重要的数据,以及方便请求端快速获取一些数据。当请求端存在上述需求时,则会触发请求端向主节点下发的创建请求的操作。
请求端下发创建请求的方式可以为:用户通过操作存储***的管理界面,下发创建LUN或文件等Host Object的请求的操作。由于管理节点为该存储集群中的对外接口节点,因此该创建请求会先通知到存储集群中的管理节点。
302、管理节点通知主节点创建Cache对象。
管理节点在接收到该创建请求后,则会查找到该请求端对应的主节点,并通知该主节点创建一个Cache对象。该Cache对象为一个线程文件。
303、主节点创建Cache句柄。
句柄指的是一个Cache对象的一个实例,该句柄对应创建请求中的Host Object,用于关联后续创建缓存空间(Cache Space)。
304、主节点通知所有镜像节点创建Cache Space。
为了提高存储的可靠性,每个主节点可以关联一个或多个镜像节点,镜像节点用于存储与主节点相同的数据。因此,主节点在创建Cache Space时,还需通知所有的镜像节点也创建Cache Space。
305、镜像节点创建Cache Space。
该Cache Space为可连续寻址访问的内存空间。
镜像节点创建的Cache Space包括读Cache Space和写Cache Space。其中,写Cache Space用于将新数据写入,读Cache Space用于请求端读数据时可以从读CacheSpace快速读取数据。
306、镜像节点向RDMA网络接口控制器(RDMA network interface controller,RNIC)注册写Cache Space。
镜像节点向RNIC注册写Cache Space后,其它节点则可通过RDMA方式直接访问该写Cache Space。从而其它节点(比如主节点)在往该镜像节点写数据时,通过RDMA方式直接将数据写入镜像节点的写Cache Space,无需镜像节点的处理器感知,从而减少的时延等待,提高了镜像存储的效率。
镜像节点向本节点的RNIC注册写Cache Space为一个请求授权过程,在授权后,使得其它节点则能够通过RDMA方式直接访问镜像节点所创建的写Cache Space。
307、镜像节点向主节点返回写Cache Space的用于RDMA访问的地址信息。
该地址信息包括R-key,该R-key为其它节点进行远程访问的内存地址,其它节点在访问该镜像节点时,则可通过该地址信息进行远程寻址。
308、主节点创建本节点的Cache Space。
主节点在接收到镜像节点返回的信息后,表示镜像节点已经创建成功,主节点则可以进行本地的Cache Space的创建。主节点同样创建读Cache Space(第二缓存空间)和写Cache Space(第一缓存空间)。
可选的,主节点创建本地的Cache Space的步骤也可以在镜像主节点通知镜像节点创建Cache Space之前,即,步骤308可以在步骤304之前,对此,本申请不做限定。
309、主节点为Cache句柄关联本节点的读Cache Space、写Cache Space和镜像节点的写Cache Space。
步骤303中主节点已创建了Cache句柄,在主节点创建了读Cache Space、写CacheSpace以及镜像节点创建了些Cache Space后,主节点则将该Cache句柄与其关联,使得主节点可以实现对各个Cache Space的写入或读取等操作。
310、返回对象创建成功。
创建后,请求端的读、写的数据则可以通过该主节点来缓冲。
本实施例中,主节点以及镜像节点创建了可连续寻址访问的内存空间,用于请求端在写入任意字节大小的数据时可直接写入。并且镜像节点中的注册了写Cache Space,使得主节点在向镜像节点写入数据时,无需镜像节点的处理器的感知,而直接将数据写入镜像节点的写Cache Space中,这样,减少了时延等待,提高了镜像存储的效率。
参照图4所示,本申请实施例中数据处理的方法的写缓存流程的实施例包括:
401、请求端向主节点的Cache Core控制模块发送申请信息。
请求端可以具体为主机或者应用程序。在一种实现方式中,当请求端有待写入的第一数据时,可以通过主节点的写Cache Space先存储该待写入的第一数据。此时,请求端可以向主节点发送申请信息,该申请信息指示申请一段写Cache Space用于存储该第一数据。该申请信息中包含待写入的第一数据、第一数据的标识以及第一数据的长度信息。
402、Cache Core控制模块根据待写入的第一数据的长度信息从写Cache Space中预留Cache Item空间。
请求端在向主节点发送该申请信息后,Cache Core控制模块则可以根据待写入的第一数据长度信息确定该数据需要占用的写Cache Space的大小。Cache Core控制模块则从写Cache Space中为其分配一定的存储空间,该分配的存储空间可以为一个Cache Item大小的空间,包括待写入的第一数据的大小空间以及预留的对应该第一数据的Header空间。该Header包含该第一数据的标识、长度信息等信息。
写Cache Space(第一缓存空间)中维护了第一指针(即上述的Head指针),该第一指针指向写Cache Space中当前可写入的位置。Cache Core控制模块将写Cache Space中的Head指针向后移动该Cache Item所需占用空间的长度。
403、Cache Core控制模块向请求端返回在写Cache Space中为第一数据分配的存储地址,该存储地址指向上一步骤所分配的Cache Item的data区。
该存储地址用于请求端生成I/O的写请求通过该存储地址指代待写入的第一数据。
404、请求端将待写入的第一数据填充到该存储地址对应的写Cache Space中,并生成I/O写请求并向主节点的Cache Core控制模块发送该写请求。
请求端在获取到Cache Core控制模块返回的为该待写入的第一数据分配的写Cache Space的存储空间的存储地址后,则可以通过该存储地址将该第一数据填充至写Cache Space中。此时只是将待写入的第一数据单独写入至写Cache Space中,关于该第一数据的其它参数信息仍未写入,因此,请求端仍需要生成I/O写请求,该写请求包括第一数据的标识、长度信息以及第一数据对应在写Cache Space中的存储地址。
需要说明的是,请求端向主节点发送写请求时,此时第一数据其实已经写入主节点的缓存设备中写Cache Space中,只是该第一数据的其它参数信息未写入。当主节点接收到该写请求时,通过该写请求中第一数据的存储地址查找到该第一数据已经存储在写Cache Space中,因此,主节点无需再进行一次对第一数据的写操作,只需为该第一数据生成Header信息并写入写Cache Space中(后续步骤将有详细描述)。
上述401至404步骤的实现方式所描述的是请求端采用主节点的写Cache Space存储待写入的第一数据,从而生成写请求的场景,在另一种实现方式中,请求端不采用主节点的写Cache Space暂存待写入的第一数据,请求端通过其它存储空间暂存该待写入的第一数据,并生成写请求的步骤可以为如下步骤:
请求端先申请临时存储空间(Temporary Buffer),用于暂时保存待写入的第一数据。该临时存储空间可以属于该请求端所管理的内存的存储空间,即,操作***在该请求端运行时为该请求端分配的内存的存储空间,或者,该临时存储空间也可以为请求端在非主节点中的其它节点中的缓存设备所临时申请的一段存储空间。
请求端向将待写入的第一数据填充到该临时存储空间,并生成I/O写请求。
请求端下发写请求到写Cache Core控制模块。
Cache Core控制模块从写Cache Space中为该写请求分配Cache Item空间(包括data区和Header区)。即,把写Cache Space的第一指针向前移动Cache Item占用空间的长度。Cache Core控制模块通过写请求将待写入的第一数据从其所在临时存储空间中拷贝至所分配的写Cache Space的Cache Item空间中。
该实现方式中,与401至404步骤差别是多了一次拷贝过程。在本实现方式中,第一数据先写入临时存储空间,然后由Cache Core拷贝第一数据到写Cache Space中,而在401至404步骤是将待写入的第一数据直接填充写入了写Cache Space中。
405、Cache Core控制模块为第一数据生成Header信息,并写入Cache Item的Header区。
该Header信息包括待写请求中的第一数据的标识、长度信息、data对应的存储地址、以及该待写入的第一数据的第一索引信息,该第一索引信息用于后续通过第一索引表中的Header快速查找到该待写入的第一数据。
需要说明的是,由于请求端可能会将写Cache Space中的数据进行读取,修改后再次写入的操作。那么则导致标识相同的数据在写Cache Space中的数据不相同。因此,CacheCore控制模块还可以通过该第一数据的Header查找写Cache Space中与其冲突的CacheItem,并设置其为数据无效状态。
406、Cache Core控制模块在镜像节点中的写Cache Space写入该Cache Item。
Cache Core控制模块查询镜像节点的写Cache Space,获取该写Cache Space的head指针(即Cache Space的当前可追加写入的位置),并维护该Head指针向后移动增加Cache Item长度。然后,通过RDMA Write的方式追加写入Cache Item到镜像写Cache Space中。RDMA Write为单边操作,镜像节点的CPU不必感知此次通信。
407、Cache Core控制模块把所生成的Header加入第一索引表中。
该第一索引表为Cache Index索引表,比如,Cache Core把该Cache Item的Header作为节点加入查找树或Hash链表中。
可选的,Cache Core控制模块还可以删除查找树上旧的Header记录(比如,出现了对同一数据进行多次读写的操作,则会产生多个记录),便于后续的快速查找。
408、Cache Core控制模块向请求端返回写请求处理完成。
在写流程中,每次缓存的Cache Item的size是不固定的,取决于上层写请求的size。写Cache Space采用Append的方式写入Cache Item记录,对于写入同一个key的I/O不会覆盖修改,最后追加的一条记录则为最新的数据。
因Cache镜像时,主节点除了把数据记录在本节点外,还会以Append的方式把数据写入镜像节点的写Cache Space中,包括Cache Item的Header和对应的data,即镜像的写Cache Space也是自描述的空间。当主节点故障后,镜像节点可以通过扫描本节点的写Cache Space空间的Header区域就可以重建出写Cache索引树(或者索引表),并恢复出还未刷盘的Cache数据和位置。
在本申请实施例中的Cache镜像流程中,数据直接通过RDMA Write操作写入镜像节点内存,Cache镜像流程就结束了,不需要再等待镜像节点的CPU参与处理,可以保证Cache镜像的稳定低时延。因写入镜像节点的Cache数据是自描述的,可以通过后台扫描镜像Cache Space空间添加索引。因镜像节点不提供写功能,也可以不执行扫描。
参照图5所示,本申请实施例中数据处理的方法的读缓存流程的一个实施例示意图包括:
501、请求端向本节点的Cache Core控制模块下发读请求。
该读请求包括待读取的第二数据的标识、长度信息、目的存储地址等,其中,该目的存储地址为请求端所管理的内存中的存储地址。
502、Cache Core控制模块查询写、读Cache Index索引表,查询第二数据的索引信息是否命中。
是否命中标识根据该标识从写、读Cache Index索引表中是否查找到对应的索引信息记录。
主节点中创建了写Cache Space和读Cache Space,写Cache Space用于写入新的数据,写Cache Space对应有第一索引表(写Cache Index索引表),第一索引表中存储有写Cache Space中数据的Header信息(包含数据的索引信息),方便快速的从写Cache Space中查找到对应的数据。读Cache Space用于写入从硬盘读取的数据,方便请求端可以从读Cache Space中快速读取数据,同样的,读Cache Space对应有第二索引表(读Cache Index索引表),第二索引表中存储有读Cache Space数据的Header信息(包含数据的索引信息),方便快速的从读Cache Space查找到对应的数据。
需要说明的是,由于写Cache Space中一定是存储的最新的数据,所以Cache Core控制模块优先从写Cache Space对应的第一索引表中查找待读取的第二数据的索引信息,若在第一索引表中未查找到,则从读Cache Space对应的第二索引表中查找待读取的第二数据的索引信息,若仍未在第二索引表中查找到,则从硬盘中找该数据。在后续步骤中会进行详尽说明。
503、Cache Index返回Cache查询结果。
504、Cache Core控制模块检查是否Cache命中,如果Cache命中则执行步骤505,如果Cache读不命中或者部分字节命中,则执行步骤507。
505、Cache Core控制模块从写Cache Space或读Cache Space中查找待读取的第二数据。
若在写Cache Space对应的第一索引表中查找到该第二数据(待读取的数据)的索引信息,则从写Cache Space中查找待读取的第二数据。若在读Cache Space对应的第二索引表中查找到该第二数据的索引信息,则从读Cache Space中查找待读取的第二数据。
506、Cache Core控制模块拷贝第二数据到的目的存储地址对应的存储空间中,返回读处理完成。
若在写Cache Index索引表或者读Cache Index索引表中是否查找到该标识对应的索引信息记录,则根据所查找到的索引信息从写Cache Space或读Cache Space中将第二数据进行拷贝,从而完成读操作。
507、若Cache未命中,或命中的字节数不完整(部分命中),Cache Core控制模块则向硬盘发送读盘请求。
由于写Cache Space和读Cache Space中的不会永久保存,可能在拷贝至硬盘后被删除。因此,在写Cache Space、和读Cache Space中可能找不到该待读取的第二数据,或者只找到部分该待读取的第二数据。
508、Cache Core控制模块接收该读盘请求的反馈,获取到硬盘上的第二数据。
对于未命中的读请求,表示待读取的第二数据已经完全不存储在Cache Space中,则完全从硬盘中进行数据读取。
对于Cache部分命中的读请求,需要合并盘上的第二数据和Cache中的数据,写Cache Space中的数据优先,且最后追加的Cache数据为最新数据。对于Cache未命中的请求则直接使用硬盘上读取到的数据。数据处理完后拷贝数据到目的存储地址对应的存储空间中。
509、Cache Core控制模块把读取的第二数据写入到读Cache Space中,并在读Cache Index中添加索引记录。
读Cache Space中存储的是干净数据,用于请求端读取数据。为了便于后续读取该第二数据,主节点还可以将读取的第二数据写入读Cache Space,并更新Cache Index的记录,方便再次读该数据时快速查找。可选的,若在读Cache Space存在与该第二数据重复的Cache Item,Cache Core控制模块还需释放之前写入的重复的读Cache Item,以提高了读Cache Space的利用率。
510、Cache Core控制模块返回读数据。
本实施例中,通过索引查找待读取的数据的位置,优先读取写Cache Space的数据,其次是读Cache Space中的数据,最后是硬盘中的数据,这样,提高了数据读取的准确性,以及提高了数据读取的效率。
参照图6所示,本申请实施例中数据处理的方法的缓存数据刷盘流程的一个实施例示意图包括:
601、主节点的Cache Core控制模块的周期刷盘任务触发Cache Space管理模块刷盘。如果写Cache Space不够用,也会触发刷盘。
602、主节点的Cache Space管理模块获取写Cache Space的已刷盘的第二指针(上述的Tail指针)。
603、主节点的Cache Space管理模块按照预设长度批量刷写数据到硬盘(Disk)中。
因同一位置可能存在多条数据记录,为了减少数据写入量可以做数据合并后再刷盘。
604、主节点的Cache Space管理模块接收写Cache Space中的数据刷盘成功指示。
605、主节点刷盘完成后,同步写Cache Space的刷盘第二指针位置给镜像节点。
606、镜像节点维护自己的写Cache Space的第二指针到已刷盘的位置。
需要说明的是,若主节点与镜像节点共享相同的硬盘,那么只需主节点进行刷盘的操作,即将写Cache Space中的数据拷贝至硬盘。主节点刷盘后将第二指针的位置发送给镜像节点,镜像节点只要根据该位置信息将镜像节点中写Cache Space的第二指针的位置移动到相同的位置即可。
若主节点与镜像节点不共享硬盘,即主节点与镜像节点分别对应不同的硬盘,那么镜像节点在接收到主节点发送的第二指针的位置的信息后,镜像节点也需进行一次刷盘操作,使得镜像节点中第二指针的位置与主节点中第二指针的位置相同。
607、镜像节点将已经刷盘的数据的Header添加到读索引表中。
已刷盘的Cache Item和盘上一致,为干净数据,可以添加到读Cache Index中。
608、返回主节点中Cache Space管理模块镜像节点处理刷盘完成。
609、主节点的Cache Space管理模块维护自己的写Cache Space中第二指针到已刷盘的位置。
610、主节点的Cache Space管理模块将已经刷盘的数据的Header添加到读索引表中。
已刷盘的Cache Item到读Cache Index索引中,这部分Cache Item转换为读Cache。
611、返回刷盘完成。
如果主节点和镜像节点不是共享硬盘的,即每个节点都有自己的硬盘或用户数据在硬盘上有多副本,那么主节点和镜像节点需要分别刷盘并维护自己的刷盘Tail指针。
本实施例中,通过维护第二指针对写Cache Space中的数据进行刷盘,这样,使得写写Cache Space中的数据都能够进行刷盘,并减少了重复刷盘的流程,提高了刷盘的效率。
参照图7所示,本申请实施例中数据处理的方法的缓存空间释放流程的一个实施例示意图包括:
701、Cache Core控制模块确定写Cache Space中待迁移的目标数据并通知写Cache Space。
Cache Core控制模块通过Cache淘汰算法确定写Cache Index(第二索引表)中不再为热点的Cache Item,即Cache Core确定在写Cache Space不再为热点的目标数据。
702、Cache Space管理模块从写Cache Index索引结构中移除该目标数据对应的的索引信息。
由于该目标数据不再为热点数据,因此一般不会需要被读取,所以从写CacheIndex中将该目标数据对应的索引信息删除。
703、Cache Space管理模块把待迁移的目标数据的在写Cache Space中的CacheItem的Header设置为无效状态,并更新增加该Cache Item所在写Cache Space区段的垃圾量。
由于该目标数据一般不会再被读取,所以将其Header设置为无效状态。另外,通过统计无效Header的数量更新写Cache Space区段的垃圾量(即待迁移的目标数据的数量)。
704、Cache Space管理模块确定无效Cache Item垃圾量(待迁移的目标数据的数量)达到回收阈值的区段。
由于每次确定的待迁移的目标数据可能不是很多,若每次确定有带移除的目标数据,则进行一次回收,则会造成较大的***开销。因此,写Cache Space会对每次确定的待迁移的目标数据进行累计,若达到一定阈值,则开始进行回收的操作。
705、Cache Space管理模块迁移待迁移的目标拷贝至读Cache Space。
由于该目标数据只是从写Cache Space中移除,而不是完全删除,因此,需要对该目标数据进行拷贝至其它位置,比如,拷贝至读Cache Space(第二缓存空间),这样,方便该目标数据再次被读取。
706、待数据迁移完成后,Cache Space管理模块从读Cache Index中删除该目标数据旧的索引信息,并添加新位置的索引信息。
若该目标数据在读Cache Space中已经存储有,那么则进行更新,淘汰旧的目标数据。
707、若目标数据都已迁移完成(即已经拷贝至读Cache Space),Cache Space管理模块则释放写Cache Space中对应的缓存空间。
释放该目标数据对应的缓存空间即释放该目标数据对应的存储位置。步骤707的时序可以步骤706之前,或者步骤707与步骤706可以同时执行,对此,本申请不做限定。
本实施例中,对于写Cache Space中不再为热点的数据进行标记,在达到一定数量后将其拷贝至其它缓存,并释放其对应的存储空间,从而提高了Cache Space的利用率。
图7实施例描述的是释放写Cache Space的存储位置的实现方案。本申请还提供了释放读Cache Space中存储位置的方案,其实现方式如图7实施例类似,不同之处为,当读Cache Space确定无效Cache Item垃圾量达到回收阈值的区段时,Cache Space管理模块将待迁移的目标数据移动到读Cache Space指针可写入的新的位置区域,使得该目标数据原来的位置可以被被释放。而释放后的位置区域可以用于写入新的从硬盘读取的数据。
参照图8所示,图8为本申请实施例中数据处理的装置的一个实施例示意图,该装置800包括:
接收单元801,用于接收请求端发送的写请求,所述写请求包括所述请求端待写入的第一数据以及所述第一数据的标识;
写入单元802,用于在所述接收单元接收请求端发送的写请求之后,根据第一指针将所述第一数据写入缓存设备的第一缓存空间中,所述第一缓存空间为可连续寻址访问的地址空间,所述第一指针用于指示所述第一缓存空间中当前可写入的位置;
移动单元803,用于将所述第一缓存空间中的第一指针移动至所述第一数据在所述第一缓存空间中结束后的空闲位置。
可选的,所述装置800还包括:
生成单元804,用于为所述第一数据生成第一索引信息,所述第一索引信息指向所述第一数据,所述第一索引信息包含所述第一数据的标识;
***单元805,用于在所述第一缓存空间中的所述第一数据的起始位置之前***所述第一索引信息;
添加单元806,用于将所述第一索引信息添加至第一索引表中。
可选的,所述写入单元802还用于:
通过远程直接数据存取方式将所述第一数据以及所述第一索引信息写入第二节点的缓存空间中。
可选的,所述接收单元801还用于:
接收所述请求端发送的第一读请求,所述第一读请求包括待读的第二数据的标识;
所述装置800还包括:
查找单元807,用于根据所述第一读请求的第二数据的标识从所述第一索引表中查找所述第二数据的索引信息;
发送单元808,用于将所述第二数据的索引信息所指向的数据发送给所述请求端。
可选的,所述接收单元801还用于:
接收所述请求端发送的第二读请求,所述第二读请求包括待读的第三数据的标识;
查找单元807,还用于根据所述第二读请求的第三数据的标识从所述第一索引表中查找所述第三数据的索引信息;其中,所述第三数据的索引信息指向的数据不完整;
发送单元808,还用于将所述第三数据的索引信息所指向的数据发送给所述请求端,并从所述第一节点的硬盘中将所述第三数据的索引信息指向的不完整数据的其它部分数据发送给所述请求端。
可选的,所述装置800还包括:
拷贝单元809,用于根据第二指针按照预设长度将所述第一缓存空间中的数据拷贝至所述第一节点的硬盘中,所述第二指针用于指向所述第一缓存空间中未拷贝至所述硬盘的数据的起始位置;
所述移动单元803还用于,将所述第二指针移动到所述第一缓存空间中已经拷贝至所述硬盘的数据的结束后的位置。
可选的,所述发送单元808,还用于将所述第二指针的位置信息发送给所述第二节点。
可选的,所述缓存设备还包括第二缓存空间,所述装置800还包括:
确定单元810,用于确定所述第一缓存空间中待迁移的第一目标数据;
删除单元811,用于将所述第一目标数据的索引信息从所述第一索引表中删除;
拷贝单元809,还用于将所述第一目标数据拷贝至所述第二缓存空间中;
释放单元812,用于释放所述第一目标数据在所述第一缓存空间的存储空间。
可选的,所述装置800还包括:
判断单元813,用于判断所述第一目标数据的数量达到第一预设阈值。
可选的,所述缓存设备还包括第三缓存空间,所述确定单元810,用于确定所述第三缓存空间中待迁移的第二目标数据,所述第三缓存空间用于存储从所述第一节点硬盘中所读取的数据;
删除单元811,还用于删除所述第二目标数据的索引信息;所述第二目标数据的索引信息包含所述第二目标数据的标识;
所述移动单元803还用于,将所述第二目标数据移动至所述第三缓存空间中第三指针指向的空闲位置,所述第三指针用于指向所述第三缓存空间可写入的位置;
释放单元812,用于释放所述第三缓存空间中所述第二目标数据移动前的存储空间。
可选的,所述判断单元813,还用于判断所述第二目标数据的数量达到第二预设阈值。
可选的,所述接收单元801还用于:接收所述请求端发送的创建请求;
所述装置800还包括:
创建单元814,用于根据所述创建请求创建所述第一缓存空间。
图8实施例所描述的各个单元在运行时执行图3至图7实施例中所描述的执行步骤,详细内容可参照图3至图7实施例,此处不做赘述。
图8实施例所述的装置还有另一个形式的实施例。
参照图9所示,对本申请实施例提供的一种数据处理的装置进行示例性介绍,该装置900包括:处理器901、存储器902、所述处理器901和所述存储器902通过总线903连接,所述存储器902存储有计算机指令。其中,处理器901通过执行存储器902中的计算机指令,用于执行图3至图7实施例中所示的方法。
图8所示的装置的各单元结构也可以对应到图9所示的装置中,如图8所示的装置的各单元结构映射到图9所示的处理器901和存储器902。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
其中,上述任一处提到的处理器,可以是一个通用中央处理器(CPU),微处理器,特定应用集成电路(application-specific integrated circuit,ASIC),或一个或多个用于控制上述第一方面无线通信方法的程序执行的集成电路。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
本发明实施例中节点所执行的功能、方法,具体实现可以由节点中的相应的装置及组件执行,具体描述可参见本发明实施例。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
在本申请所提供的几个实施例中,应该理解到,所揭露的***,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
Claims (23)
1.一种数据处理的方法,其特征在于,所述方法包括:
节点集群中的第一节点接收请求端发送的写请求,所述写请求包括所述请求端待写入的第一数据以及所述第一数据的标识,所述节点集群为存储集群;
所述第一节点根据第一指针将所述第一数据写入缓存设备的第一缓存空间中,所述第一缓存空间为可连续寻址访问的地址空间,所述第一指针用于指示所述第一缓存空间中当前可写入的位置;
所述第一节点将所述第一缓存空间中的第一指针移动至所述第一数据在所述第一缓存空间中结束后的空闲位置;
所述第一节点为所述第一数据生成第一索引信息,所述第一索引信息指向所述第一数据,所述第一索引信息包含所述第一数据的标识;
所述第一节点在所述第一缓存空间中的所述第一数据的起始位置之前***所述第一索引信息;
所述第一节点将所述第一索引信息添加至第一索引表中;
所述第一节点接收所述请求端发送的第二读请求,所述第二读请求包括待读的第三数据的标识;
所述第一节点根据所述第二读请求的第三数据的标识从所述第一索引表中查找所述第三数据的索引信息;其中,所述第三数据的索引信息指向的数据不完整;
所述第一节点将所述第三数据的索引信息所指向的数据发送给所述请求端,并从所述第一节点的硬盘中将所述第三数据的索引信息指向的不完整数据的其它部分数据发送给所述请求端。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述第一节点通过远程直接数据存取方式将所述第一数据以及所述第一索引信息写入第二节点的缓存空间中。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述第一节点接收所述请求端发送的第一读请求,所述第一读请求包括待读的第二数据的标识;
所述第一节点根据所述第一读请求的第二数据的标识从所述第一索引表中查找所述第二数据的索引信息;
所述第一节点将所述第二数据的索引信息所指向的数据发送给所述请求端。
4.根据权利要求2所述的方法,其特征在于,所述方法还包括:
所述第一节点根据第二指针按照预设长度将所述第一缓存空间中的数据拷贝至所述第一节点的硬盘中,所述第二指针用于指向所述第一缓存空间中未拷贝至所述硬盘的数据的起始位置;
所述第一节点将所述第二指针移动到所述第一缓存空间中已经拷贝至所述硬盘的数据的结束后的位置。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
所述第一节点将所述第二指针的位置信息发送给所述第二节点。
6.根据权利要求1所述的方法,其特征在于,所述缓存设备还包括第二缓存空间,所述方法还包括:
所述第一节点确定所述第一缓存空间中待迁移的第一目标数据;
所述第一节点将所述第一目标数据的索引信息从所述第一索引表中删除;
所述第一节点将所述第一目标数据拷贝至所述第二缓存空间中;
所述第一节点释放所述第一目标数据在所述第一缓存空间的存储空间。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
所述第一节点判断所述第一目标数据的数量达到第一预设阈值。
8.根据权利要求1所述的方法,其特征在于,所述缓存设备还包括第三缓存空间,所述方法还包括:
所述第一节点确定所述第三缓存空间中待迁移的第二目标数据,所述第三缓存空间用于存储从所述第一节点硬盘中所读取的数据;
所述第一节点删除所述第二目标数据的索引信息;所述第二目标数据的索引信息包含所述第二目标数据的标识;
所述第一节点将所述第二目标数据移动至所述第三缓存空间中第三指针指向的空闲位置,所述第三指针用于指向所述第三缓存空间可写入的位置;
所述第一节点释放所述第三缓存空间中所述第二目标数据移动前的存储空间。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
所述第一节点判断所述第二目标数据的数量达到第二预设阈值。
10.根据权利要求1至9其中任意一项所述的方法,其特征在于,所述方法还包括:
所述第一节点接收所述请求端发送的创建请求;
所述第一节点根据所述创建请求创建所述第一缓存空间。
11.一种数据处理的装置,所述装置运行在节点集群中的第一节点,其特征在于,所述装置包括:
接收单元,用于接收请求端发送的写请求,所述写请求包括所述请求端待写入的第一数据以及所述第一数据的标识,所述节点集群为存储集群;
写入单元,用于在所述接收单元接收请求端发送的写请求之后,根据第一指针将所述第一数据写入缓存设备的第一缓存空间中,所述第一缓存空间为可连续寻址访问的地址空间,所述第一指针用于指示所述第一缓存空间中当前可写入的位置;
移动单元,用于将所述第一缓存空间中的第一指针移动至所述第一数据在所述第一缓存空间中结束后的空闲位置;
生成单元,用于为所述第一数据生成第一索引信息,所述第一索引信息指向所述第一数据,所述第一索引信息包含所述第一数据的标识;
***单元,用于在所述第一缓存空间中的所述第一数据的起始位置之前***所述第一索引信息;
添加单元,用于将所述第一索引信息添加至第一索引表中;
所述接收单元还用于接收所述请求端发送的第二读请求,所述第二读请求包括待读的第三数据的标识;
查找单元,用于根据所述第二读请求的第三数据的标识从所述第一索引表中查找所述第三数据的索引信息;其中,所述第三数据的索引信息指向的数据不完整;
发送单元,用于将所述第三数据的索引信息所指向的数据发送给所述请求端,并从所述第一节点的硬盘中将所述第三数据的索引信息指向的不完整数据的其它部分数据发送给所述请求端。
12.根据权利要求11所述的装置,其特征在于,所述写入单元还用于:
通过远程直接数据存取方式将所述第一数据以及所述第一索引信息写入第二节点的缓存空间中。
13.根据权利要求11所述的装置,其特征在于,所述接收单元还用于:
接收所述请求端发送的第一读请求,所述第一读请求包括待读的第二数据的标识;
所述装置还包括:
查找单元,用于根据所述第一读请求的第二数据的标识从所述第一索引表中查找所述第二数据的索引信息;
发送单元,用于将所述第二数据的索引信息所指向的数据发送给所述请求端。
14.根据权利要求12所述的装置,其特征在于,所述装置还包括:
拷贝单元,用于根据第二指针按照预设长度将所述第一缓存空间中的数据拷贝至所述第一节点的硬盘中,所述第二指针用于指向所述第一缓存空间中未拷贝至所述硬盘的数据的起始位置;
所述移动单元还用于,将所述第二指针移动到所述第一缓存空间中已经拷贝至所述硬盘的数据的结束后的位置。
15.根据权利要求14所述的装置,其特征在于,所述装置还包括:
发送单元,用于将所述第二指针的位置信息发送给所述第二节点。
16.根据权利要求11所述的装置,其特征在于,所述缓存设备还包括第二缓存空间,所述装置还包括:
确定单元,用于确定所述第一缓存空间中待迁移的第一目标数据;
删除单元,用于将所述第一目标数据的索引信息从所述第一索引表中删除;
拷贝单元,用于将所述第一目标数据拷贝至所述第二缓存空间中;
释放单元,用于释放所述第一目标数据在所述第一缓存空间的存储空间。
17.根据权利要求16所述的装置,其特征在于,所述装置还包括:
判断单元,用于判断所述第一目标数据的数量达到第一预设阈值。
18.根据权利要求11所述的装置,其特征在于,所述缓存设备还包括第三缓存空间,所述装置还包括:
确定单元,用于确定所述第三缓存空间中待迁移的第二目标数据,所述第三缓存空间用于存储从所述第一节点硬盘中所读取的数据;
删除单元,用于删除所述第二目标数据的索引信息;所述第二目标数据的索引信息包含所述第二目标数据的标识;
所述移动单元还用于,将所述第二目标数据移动至所述第三缓存空间中第三指针指向的空闲位置,所述第三指针用于指向所述第三缓存空间可写入的位置;
释放单元,用于释放所述第三缓存空间中所述第二目标数据移动前的存储空间。
19.根据权利要求18所述的装置,其特征在于,所述装置还包括:
判断单元,用于判断所述第二目标数据的数量达到第二预设阈值。
20.根据权利要求11至19其中任意一项所述的装置,其特征在于,所述接收单元还用于:
接收所述请求端发送的创建请求;
所述装置还包括:
创建单元,用于根据所述创建请求创建所述第一缓存空间。
21.一种数据处理的***,所述***为节点集群***,所述节点集群***中包括多个节点,所述多个节点中每个节点如权利要求11至20中任一项所述的第一节点。
22.一种数据处理的装置,包括:处理器和存储器,其中,所述处理器和所述存储器通过总线连接,所述存储器存储有计算机指令,所述处理器通过执行计算机指令用于实现如权利要求1至10中任意一项所述的方法。
23.一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行如权利要求1至10中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810292667.1A CN110321301B (zh) | 2018-03-30 | 2018-03-30 | 一种数据处理的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810292667.1A CN110321301B (zh) | 2018-03-30 | 2018-03-30 | 一种数据处理的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110321301A CN110321301A (zh) | 2019-10-11 |
CN110321301B true CN110321301B (zh) | 2023-09-22 |
Family
ID=68112258
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810292667.1A Active CN110321301B (zh) | 2018-03-30 | 2018-03-30 | 一种数据处理的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110321301B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112684972B (zh) * | 2019-10-17 | 2022-12-27 | ***通信集团浙江有限公司 | 基于分布式块存储的数据存储方法及装置 |
CN110928495B (zh) * | 2019-11-12 | 2023-09-22 | 杭州宏杉科技股份有限公司 | 一种在多控存储***上的数据处理方法及装置 |
CN111209263A (zh) * | 2020-01-14 | 2020-05-29 | 中国建设银行股份有限公司 | 数据存储方法、装置、设备及存储介质 |
CN111796772B (zh) * | 2020-07-07 | 2024-05-07 | 西北工业大学 | 缓存的管理方法、缓存节点及分布式存储*** |
CN112463886B (zh) * | 2020-11-30 | 2024-06-04 | 浙江大华技术股份有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
CN112558870B (zh) * | 2020-12-08 | 2023-08-01 | 机械工业仪器仪表综合技术经济研究所 | 一种针对地址空间的数据处理方法及装置 |
CN114490458B (zh) * | 2021-12-31 | 2023-06-20 | 浙江毫微米科技有限公司 | 数据传输方法、芯片、服务器以及存储介质 |
CN115422207B (zh) * | 2022-11-02 | 2023-03-24 | 苏州浪潮智能科技有限公司 | 双层缓存减少镜像数据传输量的方法、装置、设备、介质 |
CN116107763B (zh) * | 2023-04-12 | 2023-06-20 | 北京燧原智能科技有限公司 | 一种数据发送方法、装置、设备及存储介质 |
CN116955219B (zh) * | 2023-09-13 | 2024-01-19 | 新华三信息技术有限公司 | 一种数据镜像方法、装置、主机及存储介质 |
CN117349483B (zh) * | 2023-12-05 | 2024-04-09 | 杭州行芯科技有限公司 | 一种寄生参数的查找方法、装置、电子设备及存储介质 |
CN117539636A (zh) * | 2023-12-06 | 2024-02-09 | 摩尔线程智能科技(北京)有限责任公司 | 总线模块的内存管理方法、装置、电子设备和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102541757A (zh) * | 2011-11-30 | 2012-07-04 | 华为技术有限公司 | 写缓存方法、缓存同步方法和装置 |
CN103746940A (zh) * | 2013-12-30 | 2014-04-23 | 华为技术有限公司 | 一种网络设备以及解包输出报文的方法 |
CN105224609A (zh) * | 2015-09-07 | 2016-01-06 | 北京金山安全软件有限公司 | 一种索引查询方法及装置 |
CN105740168A (zh) * | 2016-01-23 | 2016-07-06 | 中国人民解放军国防科学技术大学 | 一种容错目录高速缓存控制器 |
CN106469123A (zh) * | 2015-08-10 | 2017-03-01 | 北京忆恒创源科技有限公司 | 一种基于nvdimm的写缓存分配、释放方法及其装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9507752B2 (en) * | 2012-09-27 | 2016-11-29 | Intel Corporation | Methods, apparatus and systems for facilitating RDMA operations with reduced doorbell rings |
-
2018
- 2018-03-30 CN CN201810292667.1A patent/CN110321301B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102541757A (zh) * | 2011-11-30 | 2012-07-04 | 华为技术有限公司 | 写缓存方法、缓存同步方法和装置 |
CN103746940A (zh) * | 2013-12-30 | 2014-04-23 | 华为技术有限公司 | 一种网络设备以及解包输出报文的方法 |
CN106469123A (zh) * | 2015-08-10 | 2017-03-01 | 北京忆恒创源科技有限公司 | 一种基于nvdimm的写缓存分配、释放方法及其装置 |
CN105224609A (zh) * | 2015-09-07 | 2016-01-06 | 北京金山安全软件有限公司 | 一种索引查询方法及装置 |
CN105740168A (zh) * | 2016-01-23 | 2016-07-06 | 中国人民解放军国防科学技术大学 | 一种容错目录高速缓存控制器 |
Also Published As
Publication number | Publication date |
---|---|
CN110321301A (zh) | 2019-10-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110321301B (zh) | 一种数据处理的方法及装置 | |
US11799959B2 (en) | Data processing method, apparatus, and system | |
US10776315B2 (en) | Efficient and flexible organization and management of file metadata | |
KR101137299B1 (ko) | 스냅샷을 제공하는 파일 시스템에 대한 계층적 저장 관리 | |
KR101717644B1 (ko) | 고체-상태 저장 디바이스 상에서 데이터를 캐싱하는 장치, 시스템, 및 방법 | |
CN105549905A (zh) | 一种多虚拟机访问分布式对象存储***的方法 | |
CN107209714B (zh) | 分布式存储***及分布式存储***的控制方法 | |
US20090077327A1 (en) | Method and apparatus for enabling a NAS system to utilize thin provisioning | |
JP6501916B2 (ja) | ファイルストレージにおけるインデックス付け実施方法及びシステム | |
KR20130123897A (ko) | 하이브리드 스토리지 시스템의 파일 관리 방법 및 장치 | |
US10803006B1 (en) | Persistent memory key-value store in a distributed memory architecture | |
JP2020506444A (ja) | 期限切れバックアップ処理方法及びバックアップサーバ | |
CN109407975B (zh) | 写数据方法与计算节点以及分布式存储*** | |
US20190340120A1 (en) | Method, apparatus for data management, and non-transitory computer-readable storage medium for storing program | |
US20220350779A1 (en) | File system cloning method and apparatus | |
CN110955488A (zh) | 一种持久性内存的虚拟化方法及*** | |
JPWO2015097774A1 (ja) | 計算機システム及びデータ管理方法 | |
US20210103400A1 (en) | Storage system and data migration method | |
CN117056245B (zh) | 一种基于zns固态硬盘的面向日志记录应用的数据组织方法 | |
JP2018156594A (ja) | ストレージシステムおよび処理方法 | |
WO2020024590A1 (en) | Persistent memory key-value store in a distributed memory architecture | |
CN117891409A (zh) | 分布式存储***数据管理方法、装置、设备及存储介质 | |
CN111444138A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |