CN110557964B - 数据写入方法、客户端服务器和系统 - Google Patents
数据写入方法、客户端服务器和系统 Download PDFInfo
- Publication number
- CN110557964B CN110557964B CN201880002799.4A CN201880002799A CN110557964B CN 110557964 B CN110557964 B CN 110557964B CN 201880002799 A CN201880002799 A CN 201880002799A CN 110557964 B CN110557964 B CN 110557964B
- Authority
- CN
- China
- Prior art keywords
- data
- client server
- written
- stripe
- check
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
-
- 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/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0674—Disk device
- G06F3/0676—Magnetic disk device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0689—Disk arrays, e.g. RAID, JBOD
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2211/00—Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
- G06F2211/10—Indexing scheme relating to G06F11/10
- G06F2211/1002—Indexing scheme relating to G06F11/1076
- G06F2211/1035—Keeping track, i.e. keeping track of data and parity changes
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
一种数据写入方法、客户端服务器和系统。该方法包括:客户端服务器接收第一数据;获取目标分条的写入位置信息,目标分条中已经写有其他数据的数据分块,该写入位置信息表示该目标分条中已写入数据分块在该目标分条的位置按所述照目标分条的位置,向目标分条中追加写入另外的数据的数据分块,从而减少数据所需分条总数。
Description
技术领域
本申请涉及信息技术领域,并且更具体地,涉及一种数据写入的方法、客户端服务器和系统。
背景技术
分布式存储系统场景下,存储节点广泛分布在多个地域。随着人工智能、图片存储检索、社交网络、地图导航等应用服务的兴起,其产生的数据量呈指数级递增,对于处理数据的处理器、存储数据的存储介质也提出了更高的要求。为了存储海量的数据,企业用户、数据中心基础设施等需要大量的硬盘。海量数据同时也带来了数据可靠性的问题。
为了保证数据读写的高可靠性,可以在分布式存储系统中引入纠删码(ErasureCoding,EC)技术。在EC技术中,对数据进行切分,得到数据分块(data fragment),然后计算出校验分块(parity fragment),将各个分块分别存入不同的节点。
以EC 4+2模式为例,1个分条(Stripe)包括4个数据分片和2个校验分片,分别用于存储数据分块和校验分块。如果数据的长度足以满足满分条写入操作(即数据不够切分为4个大小为分片大小的完整分块),首先对需要写入的数据进行切分操作,每个分块的大小(等于分片大小)固定,得到4个完整数据分块;然后通过异或运算计算出另外2个校验分块;最后将6个分块分别写入到指定节点,完成分块的持久化过程,一次满分条写入操作即完成。若数据不满足满分条的条件,即数据不够切分为4个大小为分片大小的完整分块,则通过补‘0’操作凑足4个完整分块,再计算4个完整分块的校验分块,然后将所有数据分块和校验分块分别写入到指定节点。然而这种补‘0’操作的方式会带来硬盘空间的无效开销,增加数据所需分条总数。
发明内容
本申请提供了一种数据写入方法、客户端服务器和系统,能够减少数据所需分条总数。
第一方面,提供了一种数据写入方法,该方法包括:
客户端服务器接收第一数据;
获取目标分条的写入位置信息,该写入位置信息表示该目标分条中已写入数据分块在该目标分条的位置,其中该目标分条包括多个分片,每个分片对应一个存储节点,该存储节点和该客户端服务器通信,该目标分条未写满;
该客户端服务器获取该第一数据的一个或多个数据分块,每个数据分块对应该多个分片中的一个存在空闲空间的分片,其中,该第一数据的一个或多个数据分块是基于该写入位置信息生成的;或者,该第一数据的一个或多个数据分块是基于分片大小生成的;
该客户端服务器向该第一数据的一个或多个数据分块对应的分片的存储节点发送写请求,该写请求用于将该第一数据的一个或多个数据分块存储到对应的分片中。
本申请实施例的技术方案,基于写入位置信息写入数据的数据分块,对于数据不满足满分条的情况(分配给所述数据的分条没有被所述数据写满),不需要进行补‘0’操作,可以节省硬盘空间的开销,减少数据所需分条总数,相应的,因分条总数减少,从而可以:(1)降低了分条管理的复杂度,(2)提升了查找分条的速度,(3)故障恢复的分条数目变少,加快了故障恢复的速度。反之,在现有技术中,对于数据不满足满分条的情况,一方面通过补‘0’凑成满分条;另外一方面,客户端服务器收到新的写请求后,无法写入没有写满的分条中写入新的数据,造成分条的浪费。
在一些可能的实现方式中,该写入位置信息用于表示已写入数据分块在该目标分条中的最后位置;
其中,该第一数据的一个或多个数据分块是基于该写入位置信息生成的,具体包括如下情况中的一种:
当该目标分条中已写入数据分块的最后位置是特定分片的最后位置,则按照该分片的大小切分该第一数据,以生成该第一数据的一个或多个数据分块,其中,若该第一数据的大小小于该分片的大小,则将该第一数据作为一个数据分块;
当该目标分条中已写入数据分块的最后位置不是该特定分片的最后位置,则先按该特定分片未写部分的大小从该第一数据中切分出一个数据分块,该切出的一个数据分块对应该特定分片的未写部分,再按照该分片的大小切分该第一数据的余下部分,该第一数据的余下部分所切分出的每个数据分块对应一个空白分片;其中,若该第一数据的大小小于该特定分片未写部分的大小,则将该第一数据作为一个数据分块。
基于该写入位置信息生成该第一数据的一个或多个数据分块,可以使生成的数据分块对应目标分条的未写数据部分,从而可以将数据分块写入到目标分条的未写数据部分,节省硬盘空间的开销,减少数据所需分条总数。
在一些可能的实现方式中,该第一数据的一个或多个数据分块是基于分片大小生成的,具体包括:
按照该分片的大小切分该第一数据以生成该第一数据的一个或多个数据分块,其中,若该第一数据的大小小于该分片的大小,则将该第一数据作为一个数据分块。
在一些可能的实现方式中,在该第一数据满足第一条件时,基于该写入位置信息生成该第一数据的一个或多个数据分块;或者,在该第一数据满足第二条件时,基于该分片大小生成该第一数据的一个或多个数据分块。
在一些可能的实现方式中,该写入位置信息包括:已写入数据分块在该目标分条中的偏移量,以及该已写入数据分块的节点编号。
在一些可能的实现方式中,该目标分条中有用于校验该已写入数据分块的校验分块,在该客户端服务器获取该第一数据的至少一个数据分块之后,还包括:
根据该一个或多个数据分块以及该用于校验该已写入数据分块的校验分块,计算该已写入数据分块以及该一个或多个数据分块共同的校验分块;
将计算出的校验分块存储到该目标条带的校验分片。
在一些可能的实现方式中,该客户端服务器的缓存中有用于校验该已写入数据分块的校验分块,在该客户端服务器获取该第一数据的至少一个数据分块之后,还包括:
根据该一个或多个数据分块以及该用于校验该已写入数据分块的校验分块,计算该已写入数据分块以及该一个或多个数据分块共同的校验分块;
将计算出的校验分块存储到该客户端服务器的缓存中;
当该目标分条的所有数据分片写满数据分块后,将该客户端服务器的缓存中的对应该目标条带的校验分块存储到该目标条带的校验分片。
在一些可能的实现方式中,该存储节点中包括用于存储校验数据块的校验节点,该客户端服务器在发送该写请求之外,还包括:
将该一个或多个数据分块发送给一个或者多个校验节点进行备份;
当该目标分条的所有数据分片写满数据分块后,指令该一个或者多个校验节点根据已备份的该目标条带的所有数据分块生成校验分块,并将生成的该校验分块存储到该目标条带的校验分片。
在一些可能的实现方式中,该客户端服务器获取该第一数据的一个或多个数据分块包括如下情况中的一种:
该客户端服务器对该第一数据进行切分,以生成该第一数据的一个或多个数据分块;
该客户端服务器发送该写入位置信息以及该第一数据给应用服务器,然后从该应用服务器获取该第一数据的一个或多个数据分块。
在一些可能的实现方式中,在客户端服务器接收第一数据之前,还包括:
该客户端服务器接收第二数据;
获取未使用的分条作为该目标分条,该第二数据的大小小于该目标分条的大小;
获取该第二数据的至少一个数据分块,其中,该第二数据的数据分块是基于该分片大小生成的;
确定该第二数据的数据分块对应的分片;
将该第二数据的数据分块写入对应的分片;
记录该第二数据的数据分块在该目标分条中的写入位置,作为该写入位置信息。
在一些可能的实现方式中,该写入位置信息保存在该客户端服务器的内存中;或者,该写入位置信息保存在元数据服务器中。
在一些可能的实现方式中,该写入位置信息可以包括该分条中已写入的最后一个数据分片所在的节点的标识和该分条中已写入的数据相对于本分条起始位置的偏移量。
在一些可能的实现方式中,存储系统中的元数据服务器可以存储分条与节点的映射关系,并向该客户端服务器发送分条和该分条对应的数据节点和校验节点的信息。
在一些可能的实现方式中,可以以追加写方式继续写入新的数据分片。
这种数据写入方式一方面能够尽可能地高效利用硬盘空间,避免出现前后数据的空闲空间;另一方面能够更好地适配闪存型存储介质提高读写性能,均衡颗粒磨损提高介质寿命。
在一些可能的实现方式中,在分条已写满时,可在元数据服务器中标记本分条已写满。
在本申请实施例的技术方案中,由于不需要补‘0’数据,避免了补‘0’数据的传输和持久化,减少了写放大以及无效数据的搬移操作,因而能够提升存储系统的存储效率。
第二方面,提供了一种客户端服务器,包括执行第一方面或第一方面的任意可能的实现方式中的方法的模块。
第三方面,提供了一种客户端服务器,包括:处理器和存储器;该存储器用于存储指令;该处理器用于执行该存储器存储的指令,以执行第一方面或第一方面的任意可能的实现方式中的方法。
第四方面,提供了一种系统,该系统包括:第二方面或第三方面的客户端服务器,以及多个节点;其中,该多个节点用于存储该客户端服务器待写入的数据。
第五方面,提供了一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行第一方面或第一方面的任意可能的实现方式中的方法的指令。
附图说明
图1是可应用本申请实施例的技术方案的场景的示意图。
图2是满分条数据写入的示意图。
图3是非满分条数据写入的示意图。
图4是本申请实施例的数据写入方法的示意性流程图。
图5是本申请一个实施例的数据分块的示意图。
图6是本申请另一个实施例的数据分块的示意图。
图7是本申请实施例的数据写入方式的示意图。
图8是本申请一个实施例的数据写入方法的流程图。
图9是本申请另一个实施例的数据写入方法的流程图。
图10是本申请另一个实施例的数据写入方法的流程图。
图11是本申请另一个实施例的数据写入方法的流程图。
图12是本申请一个实施例的客户端服务器的示意性框图。
图13是本申请另一个实施例的客户端服务器的示意性框图。
具体实施方式
下面将结合附图,对本申请中的技术方案进行描述。
本申请实施例的技术方案可以应用于各种存储系统。在下文中以分布式存储系统为例描述本申请实施例的技术方案,但本申请实施例对此并不限定。在分布式存储系统中,数据(例如文件、对象)分散存储在多台存储设备上,多台存储设备分担了存储负荷,这种存储方式不但提高了系统的可靠性、可用性和存取效率,还易于扩展。存储设备例如是服务器,或者是存储控制器和存储介质的组合。
本发明实施例中:客户端服务器接收第一数据;获取目标分条的写入位置信息,目标分条中已经写有其他数据的数据分块,该写入位置信息表示该目标分条中已写入数据分块在该目标分条的位置按所述照目标分条的位置,向目标分条中追加写入另外的数据的数据分块,相当于同一个分条在不同时刻写入多个数据的数据分块,从而减少数据所需分条总数。
图1是可应用本申请实施例的技术方案的场景的示意图。
如图1所示,客户端服务器(client server)101、应用服务器102和存储系统100通信,存储系统100包括交换机103和多个存储节点(或简称“节点”)104等。其中,存储节点104也可简称为节点,是存储设备;交换机103是可选设备。在其他实施例中,应用服务器102也可以属于存储系统100内部。
每个节点104可以包括多个磁盘或者其他类型的存储介质(例如固态硬盘、软盘或者叠瓦式磁记录)用于存储数据,为了方便介绍,后续仅以硬盘(HDD)进行举例。节点104按照具体的功能可以分为数据节点、校验节点和元数据服务器。数据节点用于存储数据的数据分块,校验节点用于存储数据的校验分块,元数据服务器可以用于存储数据的元数据,还可以用于存储数据分块的元数据、元数据分块的元数据。
客户端服务器101发送请求给应用服务器102,请求中携带待写入的数据。应用服务器102对数据进行切分操作生成数据分块,以及根据数据分块生成校验分块,并将得到的分块返回给客户端服务器101,客户端服务器101通过交换机103将分块发送给各个分块相应的节点104,该节点104存储分块后向客户端服务器101返回写入成功的响应。
应理解,应用服务器102与客户端服务器101也可以合并。例如,应用服务器102与客户端服务器101的功能可以都由客户端服务器101实现。合并后,应用服务器102的功能被整合到客户端服务器101,应用服务器102与客户端服务器101之间的信息交互操作可转换成内部操作或者有些操作可以适应性取消。
分布式存储系统100中,客户端服务器101和节点104之间的路由方式可以采用分布式哈希表(Distributed Hash Table,DHT)方式,但本申请实施例对此并不限定。也就是说,在本申请实施例的技术方案中,可以采用存储系统中的各种可能的路由方式。
为了保证数据读写的高可靠性,可以在分布式存储系统100中采用纠删码(Erasure Code,EC)技术进行数据的存储。在本文中,以EC 4+2模式为例进行说明,即一个分条(stripe)包括4个数据分片和2个校验分片,但本申请实施例对此并不限定。分片(fragment)有时也称为条带(strip)或者分条单元(stripe unit)。如图2所示,若采用EC 4+2模式,应用服务器102将数据按照分片大小(例如512KB)切分,切分为4个大小为分片大小的完整分块(这种情况被称为满足满分条的条件),然后通过异或运算计算出另外2个校验分块。若数据不满足满分条的条件,即数据的大小不够分为4个完整分块,如图3所示,对于分条2,拥有4个数据分片,因此一共可以存储4个完整分块,而数据的实际大小只够分为2个完整分块8、9,在这种情况下,需要进行补‘0’操作得到分块10、11,即这两个分块中的数据全设为0,然后将通过补‘0’生成的数据分块10、11连同数据分块8、9一起,计算出校验分块P2、Q2。补‘0’之后的数据分块10、11并没有携带有用的信息,但是也会存储到数据节点上,这样会导致硬盘空间利用率降低。
针对上述问题,本申请实施例提供了一种技术方案,可以提高数据不满足满分条的情况下的硬盘空间利用率,减少数据所需分条总数。
下面首先对本申请实施例中的一些术语和参数进行说明。
分条是一段对应有物理空间的逻辑空间。具体而言,分条由分片组成,每个分片对应硬盘上的一段物理存储空间,这种对应关系通过分片和硬盘的逻辑区块地址(LogicalBlock Address,LBA)地址的映射关系来描述,这个对应关系可以存储在存储服务器中或者存储咋其他位置。需要特别说明的是,对于瘦提供(thin provision)这种技术而言,在真正往分条中存储数据前,不会给分条分配物理空间,只有在存储服务器真正需要存储数据块时,才由存储服务器(从硬盘中)分配物理空间给分条。当分片所对应的物理空间存储了某个数据块以后,可以认为这个数据块被“写入了”这个分片。
EC模式/冗余配比,表示为n+m,n+m=N,其中n表示数据分片(data fragment)个数,m表示校验分片(parity fragment)个数,N为分条的分片总数。
分条的n个数据分片分别对应到n个数据节点,m个校验分片分别对应到m个校验节点,该n个数据节点为该分条对应的数据节点,该m个校验节点为该分条对应的校验节点。需要说明是,本实施例中,N个分片可以对应N个节点,也就是说每个节点只存储一个分块。在其他实施例中,N个分片也可以对应少于N的节点,只要N个分片对应到N个存储介质即可。
node_id:表示在具体的某个分条中,带硬盘的服务器(节点)编号,其取值范围是[1,N],node_id从1到n表示数据节点的ID,node_id从从n+1到N表示校验节点的ID。当然,在其他实施例中可以不使用node_id,使用其他标签作为节点的ID。
分条与节点的映射关系<stripe_id,node_id>的集合可以保存在元数据服务器上,并且一个节点可能对应多个分条。
client_id:表示客户端服务器的编号。分条分配给客户端服务器后,该分条的stripe_id_owner(在下文中介绍)为该客户端服务器的client_id。该分条由该客户端服务器写入数据,其他客户端服务器只能读取,不能写入。client_id保存在客户端服务器中。
stripe_id:表示分条编号,保存在元数据服务器中。需要数据写入时,由元数据服务器分配一个之前未写入的分条(stripe_id_owner为非法值)给客户端服务器。
stripe_full:表示分条已写满,默认值为FALSE(假),保存在元数据服务器中。
block_size:表示配置/预定的分片大小,其长度是固定的。
stripe_id_owner:表示该分条具体由哪一个客户端服务器来进行数据写入,也就是分条的拥有者。stripe_id_owner的初始值设为非法值,表示该分条未被分配,保存在元数据服务器中。
offset:相对于分条起始位置的偏移量,其中offset最小为0,最大可以为block_size*n(n为EC模式的数据分片个数)。
location:写入位置信息,表示分条中已写入数据分块的最后位置。例如,可以由本轮最后一个写入的数据分块所在的节点id和偏移量共同构成,表示为:(node_id,offset)。
图4示出了本申请实施例的数据写入方法400的示意性流程图。
该方法400应用的场景包括客户端服务器和多个存储节点。该多个存储节点可以包括数据节点和校验节点。例如,该方法400可以应用于图1所示的场景中,但本申请实施例对此并不限定。该方法400可以由客户端服务器执行,例如,图1中的客户端服务器101执行。
410,接收第一数据。
第一数据为待写入的数据,例如需要写入的文件、对象等数据。客户端服务器接收到该第一数据后,准备将该第一数据写入到相应的分条(目标分条)。
420,获取目标分条的写入位置信息,该写入位置信息表示该目标分条中已写入数据分块在该目标分条的位置,其中该目标分条包括多个分片,每个分片对应一个存储节点,该存储节点和该客户端服务器通信,该目标分条未写满。
在本申请实施例中,“分条未写满”表示分条中已经写入数据,但分条中存在处于空闲状态(没有存储数据)的空间。也就是说,分条中已经写入了一部分数据,但分条的空间没有被写满。
在本申请实施例中,该写入位置信息表示分条中已写入数据分块在该分条的位置。也就是说,该写入位置信息可以表示该分条中数据写入的情况。在该分条未写满时,该写入位置信息可以表示出该分条中数据已写到了哪个位置。
可选地,在本申请一个实施例中,该写入位置信息表示已写入数据分块在分条中的最后位置。例如,该分条中数据已写入到哪个节点(分片)以及已写入数据的大小等。
可选地,在本申请一个实施例中,该写入位置信息可以包括该分条中已写入的最后一个数据分块所在的节点信息和该分条中已写入数据的大小。
例如,如图5所示,若分条中已写入768KB数据,即,第一个数据分块(512KB)已写入到数据节点1中,第二个数据分块(256KB)已写入到数据节点2中,在这种情况下,写入位置信息可以为(2,768KB),其中“2”表示已写入的最后一个数据分块在数据节点2(2是数据节点2的node_id),768KB表示该分条中已写入数据的大小为768KB,后者也可以称为偏移量(offset),即已写入的数据相对于本分条起始位置的偏移量。
应理解,由于分片与节点对应,节点编号与分片编号对应,该写入位置信息也可以包括已写入数据分块在该目标分条中的偏移量,以及该已写入数据分块的节点编号。
应理解,该写入位置信息也可以表示为其他形式,本申请实施例对此并不限定。例如,上述偏移量也可以改为在最后写入的节点中已写入数据的大小,由于分片的大小是固定的,这样也可以得到该分条中已写入数据的大小。例如,若采用该形式,图5中第二个数据分片(256KB)写入到数据节点2后,写入位置信息可以表示为(2,256KB)。由于已写入数据节点1的数据分块的大小为固定的512KB(即分片大小),这样根据该写入位置信息也可以得到该分条中已写入数据的大小为768KB。
可选地,该写入位置信息可以保存在该客户端服务器的内存中,也可以保存在其他节点中,例如,可以保存在元数据服务器中。
可选地,对于该写入位置信息保存在该客户端服务器的内存中的情况,该客户端服务器可以直接获取其内存中保存的该写入位置信息。
可选地,对于该写入位置信息保存在元数据服务器中的情况,该客户端服务器可以从该元数据服务器中获取该写入位置信息。
430,获取该第一数据的一个或多个数据分块,每个数据分块对应该多个分片中的一个存在空闲空间的分片,其中,该第一数据的一个或多个数据分块是基于该写入位置信息生成的;或者,该第一数据的一个或多个数据分块是基于分片大小生成的。
在本申请实施例中,通过切分操作生成该第一数据的数据分块,以写入对应的数据分片中。在设置有应用服务器的情况下,可以由该应用服务器进行切分操作;在没有设置应用服务器的情况下,例如,应用服务器与客户端服务器集成的情况下,可以由该客户端服务器进行切分操作。
可选地,在本申请一个实施例中,由该客户端服务器对该第一数据进行切分,以生成该第一数据的一个或多个数据分块。
可选地,在本申请另一个实施例中,对于应用服务器进行切分操作的情况,该客户端服务器可以向该应用服务器发送该写入位置信息以及该第一数据给应用服务器,然后从该应用服务器获取该第一数据的一个或多个数据分块。
可选地,在本申请一个实施例中,基于该写入位置信息生成该第一数据的一个或多个数据分块。具体可以包括如下情况中的一种:
当该目标分条中已写入数据分块的最后位置是特定分片的最后位置,则按照分片的大小(例如前述的512KB)切分该第一数据,以生成该第一数据的一个或多个数据分块,其中,若该第一数据的大小小于该分片的大小,则将该第一数据作为一个数据分块;
当该目标分条中已写入数据分块的最后位置不是该特定分片的最后位置(例如该特定分片中间的某个位置),则先按该特定分片未写部分的大小从该第一数据中切分出一个数据分块,切出的一个数据分块对应该特定分片的未写部分,以便和该特定分片中的已有数据分块共同填满该特定分片,再按照该分片的大小切分该第一数据的余下部分,该第一数据的余下部分所切分出的每个数据分块对应一个空白分片;其中,若该第一数据的大小小于该特定分片未写部分的大小,则将该第一数据作为一个数据分块。
具体而言,如果该目标分条中已写入数据分块的最后位置是特定分片的最后位置,则本轮待写入的数据(第一数据)的写入过程是从下一个分片的起始位置开始,那么将该第一数据按照该分片大小进行切分,最后不满足一个分片大小的待写入数据作为最后一个数据分块,其中,若该第一数据的大小小于该分片的大小,则将整个第一数据作为一个数据分块,由此方式得到该第一数据的数据分块。
如果该分条中已写入数据分块的最后位置不是该特定分片的最后位置,则本轮待写入的数据(第一数据)的写入过程不是从分片的起始位置开始,那么首先需要通过切分操作切出一个分块,与该特定分片中已写入的分块凑足一个分片大小,然后再根据该分片大小进行切分,其中,若该第一数据的大小小于该特定分片未写部分的大小,则将整个第一数据作为一个数据分块,由此方式得到该第一数据的数据分块。
例如,如图6所示,分条中已写入768KB的数据,本轮需要再写入768KB的数据,可以根据该写入位置信息(2,768K)确定已写入数据分块的最后位置在数据节点2(对应数据分片2),且不是数据分片2的最后位置,则先按照数据分片2未写部分的大小256KB,切分出一个数据分块601,再按照分片大小512KB进行切分,由此得到本轮待写入数据的一个256KB的数据分片601和一个512KB的数据分片602。
基于该写入位置信息生成该第一数据的一个或多个数据分块,可以使生成的数据分块对应目标分条的未写数据部分,从而可以将数据分块写入到目标分条的未写数据部分,和现有技术相比,节省硬盘空间的开销,减少数据所需分条总数。
可选地,在本申请一个实施例中,基于分片大小生成该第一数据的一个或多个数据分块。
具体而言,在本实施例中,不论目标分条中已写入数据分块的最后位置是不是特定分片的最后位置,都按照该分片的大小切分该第一数据以生成该第一数据的一个或多个数据分块,其中,若该第一数据的大小小于该分片的大小,则将该第一数据作为一个数据分块。该第一数据的每个数据分块对应一个空白分片。相应地,本轮待写入的数据(第一数据)的写入过程都从下一个分片的起始位置开始。
可选地,可以选择两种切分方式:当所述第一书记满足第一条件时,基于该写入位置信息生成该第一数据的一个或多个数据分块;或者,当所述第一书记满足第二条件时,基于该分片大小生成该第一数据的一个或多个数据分块。例如,可以根据第一数据的大小确定采用上述两种切分方式中的哪种切分方式,例如,可以在该第一数据的大小小于预定阈值(例如把分片的大小作为该预定阈值)时,采用第一种切分方式,即基于该写入位置信息生成该第一数据的一个或多个数据分块;或者,在该第一数据的大小不小于该预定阈值时,采用第二种切分方式,即基于该分片大小生成该第一数据的一个或多个数据分块。或者,还可以根据第一数据的文件类型选择切分方式,例如:如果第一数据是日志文件,采用第一种切分方式;如果第一数据是视频文件,采用第二种切分方式。可选的,还可以根据第一数据的QoS选择切分方式,例如:如果第一数据对时延要求低,采用第一种切分方式;如果第一数据对时延要求高,采用第二种切分方式。
440,向该第一数据的一个或多个数据分块对应的分片对应的存储节点发送写请求,该写请求用于将该第一数据的一个或多个数据分块存储到对应的分片中。
在前述步骤中得到该第一数据的数据分块后,该客户端服务器接下来,将该第一数据的数据分块写入对应的数据分片。由于分片对应到存储节点存储空间,因此数据(具体而言是数据分块)写入数据分片的过程可以视为数据被存储到存储节点的过程。客户端服务器向每个数据分块对应的分片的存储节点发送写请求,该写请求可以携带待写入的数据分块以及分条、节点(或分片)的编号等信息。该存储节点收到该写请求后,将该数据分块存储到对应的分片中。
应理解,客户端服务器向存储节点发送写请求,存储节点根据写请求存储数据的过程,可以称为客户端服务器写数据的过程,即可以称为客户端服务器将分块写入到节点的过程。
可选地,作为本申请的一个实施例,客户端服务器可以将该第一数据的数据分块,以追加写方式写入对应的数据节点。
具体而言,根据该写入位置信息,可以确定分条中已写入数据分块的最后位置,客户端服务器可以以追加写(append)方式从该位置往后继续写入数据分块。
在未使用的条带第一次写入数据时,由于是从分片的起点开始写入数据,因此可以不需要考虑分条中已有数据的情况,直接根据分片大小切分待写入数据。以在未使用的条带中写入第二数据为例,相应流程可以为:
该客户端服务器接收第二数据;获取未使用的分条作为该目标分条,该第二数据的大小小于该目标分条的大小;获取该第二数据的至少一个数据分块,其中,该第二数据的数据分块是基于该分片大小生成的;确定该第二数据的数据分块对应的分片;将该第二数据的数据分块写入对应的分片;记录该第二数据的数据分块在该目标分条中的写入位置,作为该写入位置信息。
例如,如图5所示,在未使用的条带中写入待写入的数据(第二数据),分片大小为512KB,待写入的数据的大小为768KB,待写入的数据的写入过程从第一个数据分片的起始位置开始,因此按照分片大小512KB切分待写入的数据得到一个512KB的数据分块501和一个256KB的数据分块502。然后,该客户端服务器从该分条的起始位置开始写入数据,即数据分块501写入到该分条的第一个分片,数据分块502写入到该分条的第二个分片,并可记录写入位置信息(2,768KB)。
在本申请实施例中,对于校验分块,可以在每次存储数据分块到节点中的同时存储校验分块到节点中;也可以在分条未写满时,不存储校验分块,而在分条写满后再存储校验分块到节点中,下面分别进行说明。
可选地,在本申请一个实施例中,在每次存储数据分块时,都校验分块。在这种情况下,该客户端服务器还获取该分条的校验分块;并将该分条的校验分块写入该分条对应的校验节点。
对于校验分块,可以根据本轮新生成的数据分块与本分条上一轮生成的校验分块生成新的校验分块。例如,对于某个分条,将本轮新生成的数据分块与本分条上一轮生成的校验分块进行异或运算(异或时,不足的部分以0补齐),异或运算的结果作为新的校验分块。如果在本轮所生成的数据分块写入本分条之前,本分条没有写入过数据分块,那么只根据本轮所生成的数据分块生成校验分块,例如:像现有技术一样对本轮生成的数据分块补0,然后按照EC算法生成校验分块;而和现有技术不同之处在于,补0的主要目标用于计算校验分块之用,补的0在将来不糊发送给节点进行存储。
可选地,该目标分条中有用于校验该已写入数据分块的校验分块,在该客户端服务器获取该第一数据的至少一个数据分块之后,该客户端服务器还可以根据该一个或多个数据分块以及该用于校验该已写入数据分块的校验分块,计算该已写入数据分块以及该一个或多个数据分块共同的校验分块;以及将计算出的校验分块存储到该目标条带的校验分片。
可选地,对于客户端服务器执行切分操作的情况,该客户端服务器根据该第一数据的数据分块和已写入该分条的校验分块,生成新的校验分块。
可选地,对于应用服务器执行切分操作的情况,该应用服务器根据该第一数据的数据分块和已写入该分条的校验分块生成新的校验分块,并发送给该客户端服务器。
例如,在存储图5所示的数据时,可以根据512KB的数据分块501和第256KB的数据分块502进行异或运算得到校验分块503和校验分块504。在对图6所示的数据进行存储时,可以根据新生成的256KB的数据分块601和512KB的数据分块602,以及上一次存储数据时生成的校验分块503和504进行异或运算得到两个新的校验分块603和604。
在得到该第一数据的数据分块601、602和校验分块603、604后,客户端服务器分别将该第一数据的数据分块和校验分块写入对应的数据节点和校验节点。
可选地,元数据服务器可以存储分条与节点的映射关系,并向该客户端服务器发送该分条和该分条对应的数据节点和校验节点的信息。
例如,元数据服务器中可以存储分条的stripe_id和节点的node_id的映射关系、分条由哪一个客户端服务器写入(stripe_id_owner)。客户端服务器在新写一个分条时,向元数据服务器查询需要写入的分条的stripe_id以及分条与节点的映射关系。元数据服务器可以选取一个stripe_id_owner的值为非法值的分条分配给客户端服务器用于数据写入,并将stripe_id_owner的值更新为客户端服务器的编号client_id。其中,stripe_id_owner的初始值为非法值,表示该分条未被分配。元数据服务器向客户端服务器发送分配的分条的stripe_id以及对应的node_id。客户端服务器据此可以获知分配的分条以及该分条对应的数据节点和校验节点。
举例来说,在存储图5所示的数据时,由于分条中还未写数据,该写入位置信息为(1,0KB),或者该写入位置信息为空,或者此时还没有该写入位置信息,该客户端服务器从该分条的起始位置开始写入数据,即数据分块501写入到该分条对应的数据节点1,数据分块502写入到该分条对应的数据节点2。假设该分条的stripe_id的值为5,针对数据分块501,该客户端服务器可以发送数据写入请求,包括数据分块501,并携带参数(stripe_id5,node_id 1,offset 0KB,length 512KB),其中,stripe_id 5表示该数据写入请求是分条5的,node_id 1表示该分条的数据节点1,offset 0KB表示写入位置相对于该分条起始位置的偏移量为0KB,即表示从该分条的起始位置开始写入数据,length 512KB表示写入数据的大小为512KB。数据节点1根据该数据写入请求,将数据分块501持久化到硬盘上,然后向该客户端服务器返回写入成功的响应。类似的,针对数据分块502,该客户端服务器可以发送数据写入请求,包括数据分块502,并携带参数(stripe_id 5,node_id 2,offset 512KB,length 256KB)。数据节点2根据该数据写入请求,将数据分块502持久化到硬盘上,并向该客户端服务器返回写入成功的响应。同时,该客户端服务器将校验分块503和校验分块504分别发送到校验节点1和校验节点2,校验节点1和校验节点2分别将校验分块503和校验分块504持久化到硬盘上,并向该客户端服务器返回写入成功的响应。把分块持久化到硬盘上实际上就是将分块保存到硬盘,保存分块的过程实质上就是分块持久化的过程。
可选地,对于写入位置信息保存在该客户端服务器的内存中的情况,该客户端服务器在将该第一数据的数据分块写入对应的数据节点之后,更新该客户端服务器的内存中保存的写入位置信息。可选地,各数据节点返回的写入成功的响应中可以包括该数据节点已写入数据分块的最后位置,或者包括各数据节点返回写入成功的响应的同时向客户端服务器发送该数据节点已写入数据分块的最后位置。该客户端服务器可以比较各数据节点已写入数据分块的最后位置确定该分条中已写入数据分块的最后位置,进而更新该客户端服务器的内存中保存的写入位置信息。
例如,在存储完图5所示的数据时,该客户端服务器可以确定数据节点2返回的已写入数据分块的最后位置为分条中已写入数据分块的最后位置,从而可以更新该客户端服务器的内存中保存的写入位置信息为(2,768KB)。
可选地,在本申请另一个实施例中,对于写入位置信息保存在元数据服务器中的情况,在该第一数据的数据分块被写入对应的数据节点之后,该元数据服务器更新该写入位置信息。可选地,各数据节点在将数据分块持久化成功后,还可以向元数据服务器发送该数据节点已写入数据分块的最后位置,该元数据服务器可以比较各数据节点已写入数据分块的最后位置确定该分条中已写入数据分块的最后位置,进而更新该元数据服务器中保存的写入位置信息。
例如,在存储完图5所示的数据时,该元数据服务器根据数据节点1和2返回的已写入数据分块的最后位置,可以确定数据节点2返回的已写入数据分块的最后位置为分条中已写入数据分块的最后位置,从而可以更新该元数据服务器中保存的写入位置信息为(2,768KB)。
在存储完图5所示的数据后,如图6所示,在下一轮数据写入过程中,根据写入位置信息,新生成数据分块601和602,以及校验分块603和604。该客户端服务器根据写入位置信息确定从(2,768KB)处开始写入数据,因此,该客户端服务器将数据分块601发送到数据节点2,将数据分块602发送到数据节点3,数据节点2和数据节点3分别将数据分块601和数据分块602持久化到硬盘上,并向该客户端服务器返回写入成功的响应。
可选地,对于已经写了IO请求的数据分块的分条,可以以追加写(append-only/append)方式继续写入新的IO请求的数据分块。在append-only方式中,后续写入数据分块的起始位置是前面已成功写入数据分块的最后位置。这种数据分块写入方式一方面能够尽可能地高效利用硬盘空间,避免出现前后数据的空闲空间;另一方面能够更好地适配闪存(Flash)型存储介质提高读写性能,均衡颗粒磨损提高介质寿命,如固态硬盘(Solid StateDrive,SSD)、存储级内存(Storage Class Memory,SCM)等。
同时,该客户端服务器将校验分块603和校验分块604分别发送到校验节点1和校验节点2,校验节点1和校验节点2分别将校验分块603和校验分块604持久化到自己的硬盘上,并向该客户端服务器返回写入成功的响应。
在存储完图6所示的数据后,分条中已写入数据分块的最后位置为数据节点3的最后位置或数据节点4的起始位置,因此可以将写入位置信息更新为(3,1536KB)或(4,1536KB)。
在分条未写满时,可循环执行上述的流程,在分条已写满时,可在元数据服务器中标记本分条已写满,从而完成一次满分条数据写入过程。
例如,在客户端服务器更新写入位置信息的情况下,若客户端服务器更新写入位置信息后,确定本分条已经写满,则可以向元数据服务器发送本分条已写满的指示信息,元数据服务器根据该指示信息标记本分条已写满,例如:置本分条写满标记stripe_full为TRUE(真)。
在元数据服务器更新写入位置信息的情况下,若元数据服务器更新写入位置信息后,确定本分条已经写满,则标记本分条已经写满,如置本分条写满标记为TRUE。元数据服务器还可以向客户端服务器发送本分条已经写满的指示信息,这样客户端服务器可以不再往已写满的分条写入新的数据,而继续写下一分条。
可选地,在本申请另一个实施例中,在分条未写满时,不将校验分块存储到节点,而是将每一轮得到的校验分块存储到缓存中,在分条已写满时再存储最终的校验分块到节点。
在本实施例中,该客户端服务器的缓存中有用于校验该已写入节点的数据分块的校验分块。在该客户端服务器获取该第一数据的至少一个数据分块之后,该客户端服务器还可以根据(1)该一个或多个数据分块,以及(2)该用于校验该已写入数据分块的校验分块计算出:该已写入数据分块以及该一个或多个数据分块共同的校验分块;将计算出的校验分块存储到该客户端服务器的缓存中。当该目标分条的所有数据分片写满数据分块(即“满分条写”)后,将该客户端服务器的缓存中的对应该目标条带的校验分块存储到该目标条带的校验分片。
在本实施例中,除了在分条未写满时,将校验分块存储到缓存中,其他处理与前述实施例类似,可以参考前述实施例中的相应描述,为了简洁,不再赘述。
可选地,在本申请另一个实施例中,在分条未写满时,不计算和存储校验分片,而在分条已写满时再计算并存储校验分片。
在本实施例中,该存储节点中包括用于存储校验数据块的校验节点,在发送该写请求之外,该客户端服务器还将该一个或多个数据分块发送给一个或者多个校验节点进行备份;当该目标分条的所有数据分片写满数据分块后,指令该一个或者多个校验节点根据已备份的该目标条带的所有数据分块生成校验分块,并将生成的该校验分块存储到该目标条带的校验分片。
在本实施例中,客户端服务器除了将该第一数据的数据分块写入数据节点,还将该第一数据的数据分块发送给该分条对应的校验节点进行备份;在该分条已写满时,向该校验节点发送该分条已写满的指示信息,该指示信息用于指示该校验节点根据该分条的所有数据分块生成并存储该分条的校验分块。
在本实施例中,除了以下描述外,其他处理,例如客户端服务器将该第一数据的数据分块写入数据节点以及写入位置信息的使用和更新等,与前述实施例类似,可以参考前述实施例中的相应描述,为了简洁,不再赘述。
在将该第一数据的数据分块写入数据节点后,客户端服务器还将该第一数据的数据分块发送给该分条对应的校验节点。该校验节点缓存该数据分块。在该分条未写满时,客户端服务器可以以类似方式继续存储下一轮的数据(例如:来自于主机的下一个写IO请求所携带的待写数据)。在该分条已写满时,客户端服务器向该校验节点发送该分条已写满的指示信息,该校验节点收到该指示信息后,根据该分条的所有数据分块生成并存储该分条的校验分块。然后,该校验节点可以删除缓存的该分条的所有数据分块,并可以向该客户端服务器返回校验分块写入成功的响应。
客户端服务器确定分条是否写满的方式与前述实施例类似。例如,在客户端服务器更新写入位置信息的情况下,客户端服务器在更新写入位置信息后,可以确定本分条是否已写满;在元数据服务器更新写入位置信息的情况下,若元数据服务器更新写入位置信息后,确定本分条已经写满,可以向客户端服务器发送本分条已经写满的指示信息,客户端服务器可以根据是否收到该指示信息确定本分条是否已写满。
本申请实施例的技术方案,基于写入位置信息写入数据的数据分块,对于数据不满足满分条的情况,不需要进行补‘0’操作,可以节省硬盘空间的开销,减少数据所需分条总数,从而:(1)对分条的管理变得更为简单快捷,降低了分条管理的复杂度,(2)提升了查找分条的速度,当需要查找一个分条时,可以更快的找到需要的分条(3)故障恢复的分条数目变少,加快了故障恢复的速度,例如当某个硬盘发生故障,需要对故障硬盘涉及的所有分条进行数据恢复,在分条总数减少的情况下,需要恢复的分条变少,从而恢复时间缩短。
另外,在本申请实施例的技术方案中,由于不需要补‘0’数据,避免了补‘0’数据的传输和持久化,减少了写放大以及无效数据的搬移操作,因而能够提升存储系统的存储效率。
下面将结合具体的例子详细描述本申请实施例。应注意,这些例子只是为了帮助本领域技术人员更好地理解本申请实施例,而非限制本申请实施例的范围。
图7示出了本申请一个实施例的数据写入方式的示意图。
图7中,T1-T4表示时间轴,以EC 4+2模式为例,分片大小为512KB,N1-N4表示数据分片所在的节点,P、Q表示校验分片所在的节点。在元数据服务器(未图示)中存储写入位置信息,在客户端服务器中存储写入位置信息的情况与此类似,为了简洁,不再赘述。
T1时刻需要写入数据分块1,将数据分块2、3、4以全‘0’代替,通过数据分块1、2、3和4计算出校验分块p1、q1,然后通过路由信息寻址到指定的节点(例如通过DHT方式),将数据分块1和校验分块p1、q1持久化到硬盘上(数据分块2、3和4不需要持久化存储),更新本时刻数据分块写入的最后位置到元数据服务器。
T2时刻需要写入数据分块2,通过查询元数据服务器获取数据分块2写入的位置,利用数据分块2、校验分块p1、q1计算出校验分块p2、q2,并将数据分块2和校验分块p2、q2持久化到硬盘上,更新本时刻数据分块写入的最后位置到元数据服务器,然后删除p1和q1。
T3时刻需要写入数据分块3,通过查询元数据服务器获取数据分块3写入的位置,利用数据分块3、校验分块p2、q2计算出校验分块p3、q3,并将数据分块3和校验分块p3、q3持久化到硬盘上,更新本时刻数据分块写入的最后位置到元数据服务器,然后删除p2和q2。
T4时刻需要写入数据分块4,此时满足满分条写入条件(数据分块总大小=512KB*4=存储数据分块的分片总大小),利用数据分块4、校验分块p3、q3计算出最终的校验分块p、q并持久化,然后删除p3、q3,并标记此分条已经完成满分条写入过程。至此,一次满分条数据写入过程结束。数据分块1、2、3和4可以分别来自于主机的不同写数据请求。后续数据写入过程可重复T1-T4的步骤。
图8示出了本申请一个实施例的数据写入方法的流程图。
在图8中,存储系统包括客户端服务器,应用服务器,元数据服务器、数据节点和校验节点。数据节点和校验节点可按照EC的模式存储数据分块和校验分块。图8中分条对应的数据节点和校验节点的数量由采用的EC模式而决定。例如,对于EC 4+2模式,一个分条对应四个数据节点和两个校验节点。在图8中,在客户端服务器的内存中保存写入位置信息。
应理解,对于应用服务器与客户端服务器合并设置的情况,可以由客户端服务器实现应用服务器的相应功能,为了简洁,不再赘述。
下面的步骤801-813介绍了客户端服务器如何把第一个IO请求携带的第一数据持久化到节点;下面的步骤814-825介绍了客户端服务器如何把第二个IO请求携带的第二数据持久化到节点。其中,IO请求例如是收到的来自主机或者其他设备的写IO请求,或者客户端服务器自己所产生的写IO请求。
801,客户端服务器向应用服务器发送数据写入请求。
客户端服务器在需要存储数据时(第一数据),向应用服务器发送数据写入请求,该数据写入请求包括待写入的数据,例如,需要写入的文件、对象等数据。
802,应用服务器进行切分操作。
应用服务器收到客户端服务器的数据写入请求后,依据配置的EC冗余配比和分片大小,对待写入的数据进行切分操作,并计算出校验分块。由于此时没有写入位置信息,因此,应用服务器可以按照配置的分片大小进行分块切分操作。
803,应用服务器向客户端服务器返回数据分块和校验分块。
804,客户端服务器向元数据服务器查询数据写入的分条的信息。
客户端服务器向元数据服务器查询需要写入的分条的stripe_id以及分条与节点的映射关系。
805,元数据服务器分配分条。
元数据服务器可以随机选取一个stripe_id_owner为非法值的分条分配给客户端服务器用于数据写入,并将stripe_id_owner的值更新为客户端服务器的编号client_id。stripe_id_owner为非法值意味着这个分条是空白分条,分条中尚未存储任何数据块,因此也就不存在写入位置信息(或者写入位置信息的值为0,或者写入位置信息的值为非法值)。
806,元数据服务器向客户端服务器发送分配的分条以及对应的节点的信息。
例如,元数据服务器可以向客户端服务器发送分配的分条的stripe_id以及对应的node_id。
807,客户端服务器写入数据分块。
由于此时没有写入位置信息,客户端服务器从分配的分条的起始位置开始写入数据。客户端服务器将数据分块发送给对应的数据节点。
808,数据节点持久化数据分块。
收到数据分块的相应数据节点将数据分块持久化到硬盘中。
809,数据节点向客户端服务器发送写入成功的响应以及已写入数据分块的最后位置。
数据节点将客户端服务器发送的数据分块持久化成功后,向客户端服务器返回写入成功的响应。该响应中可以包括该数据节点已写入数据分块的最后位置或者数据节点返回写入成功的响应的同时向客户端服务器发送该数据节点已写入数据分块的最后位置。
810,客户端服务器写入校验分块。
客户端服务器将校验分块发送给对应的校验节点。
811,校验节点持久化校验分块。
校验节点将校验分块持久化到硬盘中。
812,校验节点向客户端服务器发送写入成功的响应。
客户端服务器收到本轮数据分块和校验分块均写入成功的响应后,本轮数据写入成功。
813,客户端服务器记录写入位置信息。
客户端服务器可以比较各数据节点已写入数据分块的最后位置确定该分条中已写入数据分块的最后位置,进而在该客户端服务器的内存中记录写入位置信息(如果写入位置新为0或者非法值,本步骤的“记录”可以理解为“更新”)。
814,客户端服务器向应用服务器发送数据写入请求。
在有新的数据(第二数据)需要存储时,客户端服务器向应用服务器发送数据写入请求,该数据写入请求包括待写入的数据和该写入位置信息。该写入位置信息表示该分条中上一轮已写入数据分块的最后位置。
815,应用服务器生成数据分块。
应用服务器收到客户端服务器的数据写入请求后,基于该写入位置信息生成待写入的数据的数据分块。具体生成方式可以参见前述各实施例,为了简洁,不再赘述。
816,应用服务器读取该分条上一轮写入的校验分块。
817,应用服务器生成校验分块。
应用服务器根据本轮新生成的数据分块与该分条上一轮写入的校验分块生成新的校验分块。
818,应用服务器向客户端服务器返回数据分块和校验分块。
819,客户端服务器写入数据分块。
客户端服务器根据该写入位置信息,从该分条中上一轮已写入数据分块的最后位置开始写入数据。客户端服务器将数据分块发送给对应的数据节点。
820,数据节点持久化数据分块。
收到数据分块的数据节点将数据分块持久化到硬盘中。例如,可以以Append-Only方式继续写入新的数据分块。
821,数据节点向客户端服务器发送写入成功的响应以及已写入数据分块的最后位置。
数据节点将客户端服务器发送的数据分块持久化成功后,向客户端服务器返回写入成功的响应。该响应中可以包括该数据节点已写入数据分块的最后位置或者数据节点返回写入成功的响应的同时向客户端服务器发送该数据节点已写入数据分块的最后位置。
822,客户端服务器写入校验分块。
客户端服务器将校验分块发送给对应的校验节点。
823,校验节点持久化校验分块。
校验节点将校验分块持久化到硬盘中。
824,校验节点向客户端服务器发送写入成功的响应。
客户端服务器收到本轮数据分块和校验分块均写入成功的响应后,本轮数据写入成功。
825,客户端服务器更新写入位置信息。
客户端服务器可以比较各数据节点已写入数据分块的最后位置确定该分条中已写入数据分块的最后位置,进而更新该客户端服务器的内存中保存的写入位置信息。
如果该分条未写满,则循环执行上述814-825的流程。如果该分条已写满,则可以执行以下流程。
826,客户端服务器向元数据服务器发送该分条已写满的指示信息。
827,元数据服务器标记本分条已写满。
元数据服务器根据该指示信息标记本分条已经写满,如置本分条写满标记为TRUE,从而完成一次满分条数据写入过程。
图9示出了本申请另一个实施例的数据写入方法的流程图。
图9与图8所示实施例的不同在于,在图9中,在元数据服务器中保存写入位置信息。除此之外,其他相关描述可以参见图8所示实施例,为了简洁,不再赘述。
901,客户端服务器向应用服务器发送数据写入请求。
客户端服务器在需要存储数据时,向应用服务器发送数据写入请求,该数据写入请求包括待写入的数据,例如,需要写入的文件、对象等数据。
902,应用服务器进行切分操作。
应用服务器收到客户端服务器的数据写入请求后,依据配置的EC冗余配比和分片大小,对待写入的数据进行切分操作,并计算出校验分块。由于此时没有写入位置信息,因此,应用服务器可以按照配置的分片大小进行分块切分操作。
903,应用服务器向客户端服务器返回数据分块和校验分块。
904,客户端服务器向元数据服务器查询数据写入的分条的信息和写入位置信息。
客户端服务器向元数据服务器查询需要写入的分条的stripe_id以及分条与节点的映射关系,以及写入位置信息。
905,元数据服务器分配分条。
元数据服务器可以随机选取一个stripe_id_owner为非法值的分条分配给客户端服务器用于数据写入,并将stripe_id_owner的值更新为客户端服务器的编号client_id。由于此次为新分配分条,因此没有写入位置信息,或者写入位置信息可以为该分条的起始位置。
906,元数据服务器向客户端服务器发送分配的分条以及对应的节点的信息。
例如,元数据服务器可以向客户端服务器发送分配的分条的stripe_id以及对应的node_id。另外,若有写入位置信息,元数据服务器也将写入位置信息发送给客户端服务器。
907,客户端服务器写入数据分块。
对于新分配的分条,客户端服务器从分配的分条的起始位置开始写入数据。客户端服务器将数据分块发送给对应的数据节点。
908,数据节点持久化数据分块。
收到数据分块的数据节点将数据分块持久化到硬盘中。
909,数据节点向客户端服务器发送写入成功的响应。
数据节点将客户端服务器发送的数据分块持久化成功后,向客户端服务器返回写入成功的响应。
910,数据节点向元数据服务器发送该数据节点已写入数据分块的最后位置。
911,元数据服务器更新写入位置信息。
元数据服务器可以比较各数据节点已写入数据分块的最后位置确定该分条中已写入数据分块的最后位置,进而更新写入位置信息。
912,客户端服务器写入校验分块。
客户端服务器将校验分块发送给对应的校验节点。
913,校验节点持久化校验分块。
校验节点将校验分块持久化到硬盘中。
914,校验节点向客户端服务器发送写入成功的响应。
客户端服务器收到本轮数据分块和校验分块均写入成功的响应后,本轮数据写入成功。
915,客户端服务器向元数据服务器查询写入位置信息。
在有新的数据需要存储时,客户端服务器先向元数据服务器查询写入位置信息,即该分条中上一轮已写入数据分块的最后位置。
916,元数据服务器向客户端服务器返回写入位置信息。
917,客户端服务器向应用服务器发送数据写入请求。
客户端服务器向应用服务器发送数据写入请求,该数据写入请求包括待写入的数据和该写入位置信息。
918,应用服务器生成数据分块。
应用服务器收到客户端服务器的数据写入请求后,基于该写入位置信息生成待写入的数据的数据分块。
919,应用服务器读取该分条上一轮写入的校验分块。
920,应用服务器生成校验分块。
应用服务器根据本轮新生成的数据分块与该分条上一轮写入的校验分块生成新的校验分块。
921,应用服务器向客户端服务器返回数据分块和校验分块。
922,客户端服务器写入数据分块。
客户端服务器根据该写入位置信息,从该分条中上一轮已写入数据分块的最后位置开始写入数据。客户端服务器将数据分块发送给对应的数据节点。
923,数据节点持久化数据分块。
收到数据分块的数据节点将数据分块持久化到硬盘中。例如,可以以Append-Only方式继续写入新的数据分块。
924,数据节点向客户端服务器发送写入成功的响应。
数据节点将客户端服务器发送的数据分块持久化成功后,向客户端服务器返回写入成功的响应。
925,数据节点向元数据服务器发送该数据节点已写入数据分块的最后位置。
926,元数据服务器更新写入位置信息。
元数据服务器可以比较各数据节点已写入数据分块的最后位置确定该分条中已写入数据分块的最后位置,进而更新写入位置信息。
927,客户端服务器写入校验分块。
客户端服务器将校验分块发送给对应的校验节点。
928,校验节点持久化校验分块。
校验节点将校验分块持久化到硬盘中。
929,校验节点向客户端服务器发送写入成功的响应。
客户端服务器收到本轮数据分块和校验分块均写入成功的响应后,本轮数据写入成功。
930,元数据服务器确定该分条是否已写满。
元数据服务器可以根据最新的写入位置信息确定该分条是否已写满。如果该分条未写满,则执行931;如果该分条已写满,则执行932和933。
931,元数据服务器向客户端服务器发送该分条未写满的指示信息。
客户端服务器根据该指示信息确定该分条未写满,继续循环执行上述915-931的流程。
932,元数据服务器向客户端服务器发送该分条已写满的指示信息。
客户端服务器根据该指示信息确定该分条已写满,从而继续写下一分条。
933,元数据服务器标记本分条已写满。
例如,元数据服务器置本分条写满标记为TRUE,从而完成一次满分条数据写入过程。
图10示出了本申请另一个实施例的数据写入方法的流程图。
图10与图8所示实施例的不同在于,在图10中,在分条未写满时,不存储校验分块,而在分条已写满时再存储校验分块。除此之外,其他相关描述可以参见图8所示实施例,为了简洁,不再赘述。
1001,客户端服务器向应用服务器发送数据写入请求。
客户端服务器在需要存储数据时,向应用服务器发送数据写入请求,该数据写入请求包括待写入的数据,例如,需要写入的文件、对象等数据。
1002,应用服务器进行切分操作。
应用服务器收到客户端服务器的数据写入请求后,依据配置的EC冗余配比和分片大小,对待写入的数据进行切分操作。由于此时没有写入位置信息,因此,应用服务器可以按照配置的分片大小进行分块切分操作。
1003,应用服务器向客户端服务器返回数据分块。
1004,客户端服务器向元数据服务器查询数据写入的分条的信息。
客户端服务器向元数据服务器查询需要写入的分条的stripe_id以及分条与节点的映射关系。
1005,元数据服务器分配分条。
元数据服务器可以随机选取一个stripe_id_owner为非法值的分条分配给客户端服务器用于数据写入,并将stripe_id_owner的值更新为客户端服务器的编号client_id。
1006,元数据服务器向客户端服务器发送分配的分条以及对应的节点的信息。
例如,元数据服务器可以向客户端服务器发送分配的分条的stripe_id以及对应的node_id。
1007,客户端服务器写入数据分块。
由于此时没有写入位置信息,客户端服务器从分配的分条的起始位置开始写入数据。客户端服务器将数据分块发送给对应的数据节点。
1008,数据节点持久化数据分块。
收到数据分块的数据节点将数据分块持久化到硬盘中。
1009,数据节点向客户端服务器发送写入成功的响应以及已写入数据分块的最后位置。
数据节点将客户端服务器发送的数据分块持久化成功后,向客户端服务器返回写入成功的响应。该响应中可以包括该数据节点已写入数据分块的最后位置或者数据节点返回写入成功的响应的同时向客户端服务器发送该数据节点已写入数据分块的最后位置。
1010,客户端服务器向校验节点写入数据分块。
客户端服务器将数据分块发送给分条对应的校验节点。
1011,校验节点缓存数据分块。
校验节点将收到的数据分块进行缓存。
1012,校验节点向客户端服务器发送写入成功的响应。
1013,客户端服务器更新写入位置信息。
客户端服务器可以比较各数据节点已写入数据分块的最后位置确定该分条中已写入数据分块的最后位置,进而在该客户端服务器的内存中更新写入位置信息。
1014,客户端服务器向应用服务器发送数据写入请求。
在有新的数据需要存储时,客户端服务器向应用服务器发送数据写入请求,该数据写入请求包括待写入的数据和该写入位置信息。该写入位置信息表示该分条中上一轮已写入数据分块的最后位置。
1015,应用服务器生成数据分块。
应用服务器收到客户端服务器的数据写入请求后,基于该写入位置信息生成待写入的数据的数据分块。具体生成方式可以参见前述各实施例,为了简洁,不再赘述。
1016,应用服务器向客户端服务器返回数据分块。
1017,客户端服务器写入数据分块。
客户端服务器根据该写入位置信息,从该分条中上一轮已写入数据分块的最后位置开始写入数据。客户端服务器将数据分块发送给对应的数据节点。
1018,数据节点持久化数据分块。
收到数据分块的数据节点将数据分块持久化到硬盘中。例如,可以以Append-Only方式继续写入新的数据分块。
1019,数据节点向客户端服务器发送写入成功的响应以及已写入数据分块的最后位置。
数据节点将客户端服务器发送的数据分块持久化成功后,向客户端服务器返回写入成功的响应。该响应中可以包括该数据节点已写入数据分块的最后位置或者数据节点返回写入成功的响应的同时向客户端服务器发送该数据节点已写入数据分块的最后位置。
1020,客户端服务器向校验节点写入数据分块。
客户端服务器将校验分块发送给对应的校验节点。
1021,校验节点缓存数据分块。
校验节点将收到的数据分块进行缓存。
1022,校验节点向客户端服务器发送写入成功的响应。
1023,客户端服务器更新写入位置信息。
客户端服务器可以比较各数据节点已写入数据分块的最后位置确定该分条中已写入数据分块的最后位置,进而更新该客户端服务器的内存中保存的写入位置信息。
如果该分条未写满,则循环执行上述1014-1023的流程。如果该分条已写满,则可以执行以下流程。
1024,客户端服务器向校验节点发送该分条已写满的指示信息。
1025,校验节点计算和存储校验分块。
校验节点根据缓存的该分条的所有数据分块生成并存储该分条的校验分块。然后,该校验节点可以删除缓存的该分条的所有数据分块。
1026,校验节点向客户端服务器返回校验分块写入成功的响应。
1027,客户端服务器向元数据服务器发送该分条已写满的指示信息。
1028,元数据服务器标记本分条已写满。
元数据服务器根据该指示信息标记本分条已经写满,如置本分条写满标记为TRUE,从而完成一次满分条数据写入过程。
图11示出了本申请另一个实施例的数据写入方法的流程图。
图11与图9所示实施例的不同在于,在图11中,在分条未写满时,不存储校验分块,而在分条已写满时再存储校验分块。除此之外,其他相关描述可以参见图9所示实施例,为了简洁,不再赘述。
1101,客户端服务器向应用服务器发送数据写入请求。
客户端服务器在需要存储数据时,向应用服务器发送数据写入请求,该数据写入请求包括待写入的数据,例如,需要写入的文件、对象等数据。
1102,应用服务器进行切分操作。
应用服务器收到客户端服务器的数据写入请求后,依据配置的EC冗余配比和分片大小,对待写入的数据进行切分操作。由于此时没有写入位置信息,因此,应用服务器可以按照配置的分片大小进行分块切分操作。
1103,应用服务器向客户端服务器返回数据分块。
1104,客户端服务器向元数据服务器查询数据写入的分条的信息和写入位置信息。
客户端服务器向元数据服务器查询需要写入的分条的stripe_id以及分条与节点的映射关系,以及写入位置信息。
1105,元数据服务器分配分条。
元数据服务器可以随机选取一个stripe_id_owner为非法值的分条分配给客户端服务器用于数据写入,并将stripe_id_owner的值更新为客户端服务器的编号client_id。由于此次为新分配分条,因此没有写入位置信息,或者写入位置信息可以为该分条的起始位置。
1106,元数据服务器向客户端服务器发送分配的分条以及对应的节点的信息。
例如,元数据服务器可以向客户端服务器发送分配的分条的stripe_id以及对应的node_id。另外,若有写入位置信息,元数据服务器也将写入位置信息发送给客户端服务器。
1107,客户端服务器写入数据分块。
对于新分配的分条,客户端服务器从分配的分条的起始位置开始写入数据。客户端服务器将数据分块发送给对应的数据节点。
1108,数据节点持久化数据分块。
收到数据分块的数据节点将数据分块持久化到硬盘中。
1109,数据节点向客户端服务器发送写入成功的响应。
数据节点将客户端服务器发送的数据分块持久化成功后,向客户端服务器返回写入成功的响应。
1110,数据节点向元数据服务器发送该数据节点已写入数据分块的最后位置。
1111,元数据服务器更新写入位置信息。
元数据服务器可以比较各数据节点已写入数据分块的最后位置确定该分条中已写入数据分块的最后位置,进而更新写入位置信息。
1112,客户端服务器向校验节点写入数据分块。
客户端服务器将数据分块发送给分条对应的校验节点。
1113,校验节点缓存数据分块。
校验节点将收到的数据分块进行缓存。
1114,校验节点向客户端服务器发送写入成功的响应。
1115,客户端服务器向元数据服务器查询写入位置信息。
在有新的数据需要存储时,客户端服务器先向元数据服务器查询写入位置信息,即该分条中上一轮已写入数据分块的最后位置。
1116,元数据服务器向客户端服务器返回写入位置信息。
1117,客户端服务器向应用服务器发送数据写入请求。
客户端服务器向应用服务器发送数据写入请求,该数据写入请求包括待写入的数据和该写入位置信息。
1118,应用服务器生成数据分块。
应用服务器收到客户端服务器的数据写入请求后,基于该写入位置信息生成待写入的数据的数据分块。
1119,应用服务器向客户端服务器返回数据分块。
1120,客户端服务器写入数据分块。
客户端服务器根据该写入位置信息,从该分条中上一轮已写入数据分块的最后位置开始写入数据。客户端服务器将数据分块发送给对应的数据节点。
1121,数据节点持久化数据分块。
收到数据分块的数据节点将数据分块持久化到硬盘中。例如,可以以Append-Only方式继续写入新的数据分块。
1122,数据节点向客户端服务器发送写入成功的响应。
数据节点将客户端服务器发送的数据分块持久化成功后,向客户端服务器返回写入成功的响应。
1123,数据节点向元数据服务器发送该数据节点已写入数据分块的最后位置。
1124,元数据服务器更新写入位置信息。
元数据服务器可以比较各数据节点已写入数据分块的最后位置确定该分条中已写入数据分块的最后位置,进而更新写入位置信息。
1125,客户端服务器向校验节点写入数据分块。
客户端服务器将校验分块发送给对应的校验节点。
1126,校验节点缓存数据分块。
校验节点将收到的数据分块进行缓存。
1127,校验节点向客户端服务器发送写入成功的响应。
1128,元数据服务器确定该分条是否已写满。
元数据服务器可以根据最新的写入位置信息确定该分条是否已写满。如果该分条未写满,则执行1129;如果该分条已写满,则执行1130。
1129,元数据服务器向客户端服务器发送该分条未写满的指示信息。
客户端服务器根据该指示信息确定该分条未写满,继续循环执行上述1115-1129的流程。
1130,元数据服务器向客户端服务器发送该分条已写满的指示信息。
1131,客户端服务器向校验节点发送该分条已写满的指示信息。
1132,校验节点计算和存储校验分块。
校验节点根据缓存的该分条的所有数据分块生成并存储该分条的校验分块。然后,该校验节点可以删除缓存的该分条的所有数据分块。
1133,校验节点向客户端服务器返回校验分块写入成功的响应。
1134,元数据服务器标记本分条已写满。
例如,元数据服务器置本分条写满标记为TRUE,从而完成一次满分条数据写入过程。
本申请实施例的技术方案,对于数据不满足满分条的情况,不产生补‘0’数据,既可以减少数据所需分条总数,降低分条管理的复杂度,提升查找分条的速度,加快故障恢复的速度,又可以避免补‘0’数据的传输和持久化,减少网络和硬盘的写放大,并能够减少无效数据的搬移操作,从而能够提升存储系统的存储效率。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
还应理解,本申请实施例中的具体的例子只是为了帮助本领域技术人员更好地理解本申请实施例,而非限制本申请实施例的范围。
上文中详细描述了本申请实施例的数据写入的方法,下面将描述本申请实施例的客户端服务器。应理解,本申请实施例的客户端服务器可以执行前述本申请实施例的各种方法,即以下各种产品的具体工作过程,可以参考前述方法实施例中的对应过程。
图12示出了本申请实施例的客户端服务器1200的示意性框图。
如图12所示,该客户端服务器1200可以包括接收模块1210,获取模块1220和写入模块1230。
接收模块1210,用于接收第一数据;
获取模块1220,用于获取目标分条的写入位置信息,该写入位置信息表示该目标分条中已写入数据分块在该目标分条的位置,其中该目标分条包括多个分片,每个分片对应一个存储节点,该存储节点和该客户端服务器通信,该目标分条未写满;以及获取该第一数据的一个或多个数据分块,每个数据分块对应该多个分片中的一个存在空闲空间的分片,其中,该第一数据的一个或多个数据分块是基于该写入位置信息生成的;或者,该第一数据的一个或多个数据分块是基于分片大小生成的;
写入模块1230,用于向该第一数据的一个或多个数据分块对应的分片的存储节点发送写请求,该写请求用于将该第一数据的一个或多个数据分块存储到对应的分片中。
可选地,在本申请一个实施例中,该写入位置信息用于表示已写入数据分块在该目标分条中的最后位置;
其中,该第一数据的一个或多个数据分块由如下方式中的一种生成:
当该目标分条中已写入数据分块的最后位置是特定分片的最后位置,则按照该分片的大小切分该第一数据,以生成该第一数据的一个或多个数据分块,其中,若该第一数据的大小小于该分片的大小,则将该第一数据作为一个数据分块;
当该目标分条中已写入数据分块的最后位置不是该特定分片的最后位置,则先按该特定分片未写部分的大小从该第一数据中切分出一个数据分块,切出的一个数据分块对应该特定分片的未写部分,再按照该分片的大小切分该第一数据的余下部分,该第一数据的余下部分所切分出的每个数据分块对应一个空白分片;其中,若该第一数据的大小小于该特定分片未写部分的大小,则将该第一数据作为一个数据分块。
可选地,在本申请一个实施例中,该第一数据的一个或多个数据分块由如下方式生成:
按照该分片的大小切分该第一数据以生成该第一数据的一个或多个数据分块,其中,若该第一数据的大小小于该分片的大小,则将该第一数据作为一个数据分块。
可选地,在本申请一个实施例中,该第一数据的一个或多个数据分块由如下方式生成:
在该第一数据满足第一条件时,基于该写入位置信息生成该第一数据的一个或多个数据分块;或者,在该第一数据满足第二条件时,基于该分片大小生成该第一数据的一个或多个数据分块。
可选地,在本申请一个实施例中,该写入位置信息包括:已写入数据分块在该目标分条中的偏移量,以及该已写入数据分块的节点编号。
可选地,在本申请一个实施例中,该目标分条中有用于校验该已写入数据分块的校验分块,该获取模块1220还用于:
根据该一个或多个数据分块以及该用于校验该已写入数据分块的校验分块,计算该已写入数据分块以及该一个或多个数据分块共同的校验分块;
该写入模块1230还用于将计算出的校验分块存储到该目标条带的校验分片。
可选地,在本申请一个实施例中,该客户端服务器的缓存中有用于校验该已写入数据分块的校验分块,该获取模块1220还用于:
根据该一个或多个数据分块以及该用于校验该已写入数据分块的校验分块,计算该已写入数据分块以及该一个或多个数据分块共同的校验分块;
该写入模块1230还用于将计算出的校验分块存储到该客户端服务器的缓存中;以及当该目标分条的所有数据分片写满数据分块后,将该客户端服务器的缓存中的对应该目标条带的校验分块存储到该目标条带的校验分片。
可选地,在本申请一个实施例中,该存储节点中包括用于存储校验数据块的校验节点,该写入模块1230还用于:
将该一个或多个数据分块发送给一个或者多个校验节点进行备份;
当该目标分条的所有数据分片写满数据分块后,指令该一个或者多个校验节点根据已备份的该目标条带的所有数据分块生成校验分块,并将生成的该校验分块存储到该目标条带的校验分片。
可选地,在本申请一个实施例中,该获取模块1220具体用于如下情况中的一种:
对该第一数据进行切分,以生成该第一数据的一个或多个数据分块;
发送该写入位置信息以及该第一数据给应用服务器,然后从该应用服务器获取该第一数据的一个或多个数据分块。
可选地,在本申请一个实施例中,该接收模块1210还用于接收第二数据;
该获取模块1220还用于获取未使用的分条作为该目标分条,该第二数据的大小小于该目标分条的大小;获取该第二数据的至少一个数据分块,其中,该第二数据的数据分块是基于该分片大小生成的;以及确定该第二数据的数据分块对应的分片;
该写入模块1230还用于将该第二数据的数据分块写入对应的分片;以及记录该第二数据的数据分块在该目标分条中的写入位置,作为该写入位置信息。
可选地,在本申请一个实施例中,该写入位置信息保存在该客户端服务器的内存中;或者,该写入位置信息保存在元数据服务器中。
可选地,在本申请一个实施例中,元数据服务器用于存储分条与节点的映射关系,并向该客户端服务器发送该分条和该分条对应的数据节点和校验节点的信息。获取模块1220还用于从元数据服务器获取该分条和该分条对应的数据节点和校验节点的信息。
可选地,在本申请一个实施例中,该元数据服务器还用于,在该分条已写满时,标记该分条已写满。
本申请实施例的客户端服务器1200可以执行前述方法实施例中的相应流程,相应的具体描述可参考前述各实施例,为了简洁,在此不再赘述。
图13示出了本申请又一个实施例提供的客户端服务器的结构示意图。该客户端服务器包括至少一个处理器1302(例如CPU),至少一个网络接口1305或者其他通信接口,和存储器1306。这些部件之间通信连接。处理器1302用于执行存储器1306中存储的可执行模块,例如计算机程序。通过至少一个网络接口1305(可以是有线或者无线)实现与至少一个其他网元之间的通信连接。
在一些实施方式中,存储器1306存储了程序13061,处理器1302执行程序13061,用于执行前述本申请各种实施例中的方法。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当该指令在计算机上运行时,使得该计算机执行前述本申请各种实施例中的方法。
本申请实施例还提供了一种系统,该系统可以包括前述各种实施例中的客户端服务器以及多个节点。该多个节点可以包括数据节点、校验节点和元数据服务器。该系统还可以包括应用服务器。
本申请还提供一种包含指令的计算机程序产品,当所述计算机程序产品在客户端服务器上运行时,使得所述客户端服务器拥有上述功能,例如上述各实施例中由客户端服务器所执行的步骤。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘(Solid State Disk,SSD))等。
应理解,在本申请实施例中,术语“第一”等仅仅是为了指代对象,并不表示相应对象的次序。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (25)
1.一种数据写入方法,其特征在于,包括:
客户端服务器接收第一数据;
获取目标分条的写入位置信息,所述写入位置信息表示所述目标分条中已写入数据分块在所述目标分条的位置,其中所述目标分条包括多个分片,所述多个分片包括数据分片和校验分片,每个所述分片对应一个存储节点,所述存储节点和所述客户端服务器通信,所述目标分条未写满;
所述客户端服务器获取所述第一数据的一个或多个数据分块,每个数据分块对应所述多个分片中的一个存在空闲空间的分片,其中,所述第一数据的一个或多个数据分块是基于所述写入位置信息生成的;或者,所述第一数据的一个或多个数据分块是基于分片大小生成的;
所述客户端服务器向所述第一数据的一个或多个数据分块对应的分片的存储节点发送写请求,所述写请求用于将所述第一数据的一个或多个数据分块存储到所述对应的分片中;
所述客户端服务器将所述已写入数据分块以及所述一个或多个数据分块共同的校验分块写入所述校验分片对应的存储节点。
2.根据权利要求1所述的数据写入方法,其中,所述写入位置信息用于表示已写入数据分块在所述目标分条中的最后位置;
其中,所述第一数据的一个或多个数据分块是基于所述写入位置信息生成的,具体包括如下情况中的一种:
当所述目标分条中已写入数据分块的最后位置是特定分片的最后位置,则按照所述分片的大小切分所述第一数据,以生成所述第一数据的一个或多个数据分块,其中,若所述第一数据的大小小于所述分片的大小,则将所述第一数据作为一个数据分块;
当所述目标分条中已写入数据分块的最后位置不是所述特定分片的最后位置,则先按所述特定分片未写部分的大小从所述第一数据中切分出一个数据分块,所述切分出的一个数据分块对应所述特定分片的未写部分,再按照所述分片的大小切分所述第一数据的余下部分,所述第一数据的余下部分所切分出的每个数据分块对应一个空白分片;其中,若所述第一数据的大小小于所述特定分片未写部分的大小,则将所述第一数据作为一个数据分块。
3.根据权利要求1所述的数据写入方法,其中,所述第一数据的一个或多个数据分块是基于分片大小生成的,具体包括:
按照所述分片的大小切分所述第一数据以生成所述第一数据的一个或多个数据分块,其中,若所述第一数据的大小小于所述分片的大小,则将所述第一数据作为一个数据分块。
4.根据权利要求1所述的数据写入方法,其中,在所述第一数据满足第一条件时,基于所述写入位置信息生成所述第一数据的一个或多个数据分块;或者,在所述第一数据满足第二条件时,基于所述分片大小生成所述第一数据的一个或多个数据分块。
5.根据权利要求1所述的数据写入方法,其中,所述写入位置信息包括:
所述已写入数据分块在所述目标分条中的偏移量,以及所述已写入数据分块的节点编号。
6.根据权利要求1至5中任一项所述的数据写入方法,其中,所述客户端服务器将所述已写入数据分块以及所述一个或多个数据分块共同的校验分块写入所述校验分片对应的存储节点,包括:
根据所述一个或多个数据分块以及所述用于校验所述已写入数据分块的校验分块,计算所述已写入数据分块以及所述一个或多个数据分块共同的校验分块。
7.根据权利要求1至5中任一项所述的数据写入方法,其中,所述客户端服务器将所述已写入数据分块以及所述一个或多个数据分块共同的校验分块写入所述校验分片对应的存储节点,包括:
根据所述一个或多个数据分块以及所述用于校验所述已写入数据分块的校验分块,计算所述已写入数据分块以及所述一个或多个数据分块共同的校验分块;
将计算出的校验分块存储到所述客户端服务器的缓存中;
当所述目标分条的所有数据分片写满数据分块后,将所述客户端服务器的缓存中的对应所述目标分条的校验分块存储到所述目标分条的校验分片。
8.根据权利要求1至5中任一项所述的数据写入方法,其中,所述存储节点中用于存储校验数据块的存储节点是校验节点,所述客户端服务器在发送所述写请求之外,还包括:
将所述一个或多个数据分块发送给一个或者多个校验节点进行备份;
当所述目标分条的所有数据分片写满数据分块后,指令所述一个或者多个校验节点根据已备份的所述目标分条的所有数据分块生成校验分块,并将生成的所述校验分块存储到所述目标分条的校验分片。
9.根据权利要求1至5中任一项所述的数据写入方法,其中,所述客户端服务器获取所述第一数据的一个或多个数据分块包括如下情况中的一种:
所述客户端服务器对所述第一数据进行切分,以生成所述第一数据的一个或多个数据分块;
所述客户端服务器发送所述写入位置信息以及所述第一数据给应用服务器,然后从所述应用服务器获取所述第一数据的一个或多个数据分块。
10.根据权利要求1至5中任一项所述的数据写入方法,其中,在客户端服务器接收第一数据之前,还包括:
所述客户端服务器接收第二数据;
获取未使用的分条作为所述目标分条,所述第二数据的大小小于所述目标分条的大小;
获取所述第二数据的至少一个数据分块,其中,所述第二数据的数据分块是基于所述分片大小生成的;
确定所述第二数据的数据分块对应的分片;
将所述第二数据的数据分块写入对应的分片;
记录所述第二数据的数据分块在所述目标分条中的写入位置,作为所述写入位置信息。
11.根据权利要求1至5中任一项所述的数据写入方法,其中,所述写入位置信息保存在所述客户端服务器的内存中;或者,所述写入位置信息保存在元数据服务器中。
12.一种客户端服务器,其特征在于,包括:
接收模块,用于接收第一数据;
获取模块,用于获取目标分条的写入位置信息,所述写入位置信息表示所述目标分条中已写入数据分块在所述目标分条的位置,其中所述目标分条包括多个分片,所述多个分片包括数据分片和校验分片,每个所述分片对应一个存储节点,所述存储节点和所述客户端服务器通信,所述目标分条未写满;以及获取所述第一数据的一个或多个数据分块,每个数据分块对应所述多个分片中的一个存在空闲空间的分片,其中,所述第一数据的一个或多个数据分块是基于所述写入位置信息生成的;或者,所述第一数据的一个或多个数据分块是基于分片大小生成的;
写入模块,用于向所述第一数据的一个或多个数据分块对应的分片的存储节点发送写请求,所述写请求用于将所述第一数据的一个或多个数据分块存储到所述对应的分片中;
所述写入模块还用于:将所述已写入数据分块以及所述一个或多个数据分块共同的校验分块写入所述校验分片对应的存储节点。
13.根据权利要求12所述的客户端服务器,其中,所述写入位置信息用于表示已写入数据分块在所述目标分条中的最后位置;
其中,所述第一数据的一个或多个数据分块由如下方式中的一种生成:
当所述目标分条中已写入数据分块的最后位置是特定分片的最后位置,则按照所述分片的大小切分所述第一数据,以生成所述第一数据的一个或多个数据分块,其中,若所述第一数据的大小小于所述分片的大小,则将所述第一数据作为一个数据分块;
当所述目标分条中已写入数据分块的最后位置不是所述特定分片的最后位置,则先按所述特定分片未写部分的大小从所述第一数据中切分出一个数据分块,所述切分出的一个数据分块对应所述特定分片的未写部分,再按照所述分片的大小切分所述第一数据的余下部分,所述第一数据的余下部分所切分出的每个数据分块对应一个空白分片;其中,若所述第一数据的大小小于所述特定分片未写部分的大小,则将所述第一数据作为一个数据分块。
14.根据权利要求12所述的客户端服务器,其中,所述第一数据的一个或多个数据分块由如下方式生成:
按照所述分片的大小切分所述第一数据以生成所述第一数据的一个或多个数据分块,其中,若所述第一数据的大小小于所述分片的大小,则将所述第一数据作为一个数据分块。
15.根据权利要求12所述的客户端服务器,其中,所述第一数据的一个或多个数据分块由如下方式生成:
在所述第一数据满足第一条件时,基于所述写入位置信息生成所述第一数据的一个或多个数据分块;或者,在所述第一数据满足第二条件时,基于所述分片大小生成所述第一数据的一个或多个数据分块。
16.根据权利要求12所述的客户端服务器,其中,所述写入位置信息包括:
所述已写入数据分块在所述目标分条中的偏移量,以及所述已写入数据分块的节点编号。
17.根据权利要求12至16中任一项所述的客户端服务器,其中,所述获取模块还用于:
根据所述一个或多个数据分块以及所述用于校验所述已写入数据分块的校验分块,计算所述已写入数据分块以及所述一个或多个数据分块共同的校验分块。
18.根据权利要求12至16中任一项所述的客户端服务器,其中,所述获取模块还用于:
根据所述一个或多个数据分块以及所述用于校验所述已写入数据分块的校验分块,计算所述已写入数据分块以及所述一个或多个数据分块共同的校验分块;
所述写入模块具体用于:将计算出的校验分块存储到所述客户端服务器的缓存中;以及当所述目标分条的所有数据分片写满数据分块后,将所述客户端服务器的缓存中的对应所述目标分条的校验分块存储到所述目标分条的校验分片。
19.根据权利要求12至16中任一项所述的客户端服务器,所述存储节点中用于存储校验数据块的存储节点是校验节点,所述写入模块还用于:
将所述一个或多个数据分块发送给一个或者多个校验节点进行备份;
当所述目标分条的所有数据分片写满数据分块后,指令所述一个或者多个校验节点根据已备份的所述目标分条的所有数据分块生成校验分块,并将生成的所述校验分块存储到所述目标分条的校验分片。
20.根据权利要求12至16中任一项所述的客户端服务器,其中,所述获取模块具体用于如下情况中的一种:
对所述第一数据进行切分,以生成所述第一数据的一个或多个数据分块;
发送所述写入位置信息以及所述第一数据给应用服务器,然后从所述应用服务器获取所述第一数据的一个或多个数据分块。
21.根据权利要求12至16中任一项所述的客户端服务器,其中,所述接收模块还用于接收第二数据;
所述获取模块还用于获取未使用的分条作为所述目标分条,所述第二数据的大小小于所述目标分条的大小;获取所述第二数据的至少一个数据分块,其中,所述第二数据的数据分块是基于所述分片大小生成的;以及确定所述第二数据的数据分块对应的分片;
所述写入模块还用于将所述第二数据的数据分块写入对应的分片;以及记录所述第二数据的数据分块在所述目标分条中的写入位置,作为所述写入位置信息。
22.根据权利要求12至16中任一项所述的客户端服务器,其中,所述写入位置信息保存在所述客户端服务器的内存中;或者,所述写入位置信息保存在元数据服务器中。
23.一种客户端服务器,其特征在于,包括:处理器和存储器;
所述存储器用于存储指令;
所述处理器用于执行所述存储器存储的指令,以执行根据权利要求1至11中任一项所述的方法。
24.一种存储系统,其特征在于,包括:
根据权利要求12至23中任一项所述的客户端服务器,以及多个节点;
其中,所述多个节点用于存储所述客户端服务器待写入的数据。
25.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当所述指令在计算机上运行时,使得所述计算机执行根据权利要求1至11中任一项所述的方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2018/081446 WO2019183958A1 (zh) | 2018-03-30 | 2018-03-30 | 数据写入方法、客户端服务器和系统 |
CNPCT/CN2018/081446 | 2018-03-30 | ||
PCT/CN2018/083107 WO2019184012A1 (zh) | 2018-03-30 | 2018-04-13 | 数据写入方法、客户端服务器和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110557964A CN110557964A (zh) | 2019-12-10 |
CN110557964B true CN110557964B (zh) | 2021-12-24 |
Family
ID=68058520
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880002799.4A Active CN110557964B (zh) | 2018-03-30 | 2018-04-13 | 数据写入方法、客户端服务器和系统 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11579777B2 (zh) |
EP (1) | EP3779705A4 (zh) |
CN (1) | CN110557964B (zh) |
WO (2) | WO2019183958A1 (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111124280A (zh) * | 2019-11-29 | 2020-05-08 | 浪潮电子信息产业股份有限公司 | 一种数据追加写入方法、装置及电子设备和存储介质 |
CN111273868A (zh) * | 2020-01-19 | 2020-06-12 | 西安奥卡云数据科技有限公司 | 一种全闪存阵列垃圾回收减少写放大的方法 |
CN111831618A (zh) * | 2020-07-21 | 2020-10-27 | 北京青云科技股份有限公司 | 数据写入方法、数据读取方法、装置、设备及存储介质 |
CN112506814B (zh) * | 2020-11-17 | 2024-03-22 | 合肥康芯威存储技术有限公司 | 一种存储器及其控制方法与存储系统 |
CN113204554B (zh) * | 2021-05-11 | 2023-03-31 | 深圳市杉岩数据技术有限公司 | 一种对象存储系统实现稀疏写的方法、装置及电子设备 |
US20230049602A1 (en) * | 2021-08-10 | 2023-02-16 | Samsung Electronics Co., Ltd. | Systems, methods, and apparatus for hierarchical aggregation for computational storage |
US20230046030A1 (en) * | 2021-08-10 | 2023-02-16 | Samsung Electronics Co., Ltd. | Systems, methods, and apparatus for data resizing for computational storage |
US12074962B2 (en) | 2021-08-10 | 2024-08-27 | Samsung Electronics Co., Ltd. | Systems, methods, and apparatus for dividing and encrypting data |
CN115905160B (zh) * | 2023-01-31 | 2023-06-23 | 天翼云科技有限公司 | 数据存储的校验方法、装置、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102088389A (zh) * | 2009-12-02 | 2011-06-08 | 中兴通讯股份有限公司 | 一种分布式内容存取调度装置和内容读取方法 |
CN103699494A (zh) * | 2013-12-06 | 2014-04-02 | 北京奇虎科技有限公司 | 一种数据存储方法、数据存储设备和分布式存储系统 |
US8799535B2 (en) * | 2008-01-11 | 2014-08-05 | Akamai Technologies, Inc. | Storage of data utilizing scheduling queue locations associated with different data rates |
CN107436733A (zh) * | 2017-06-29 | 2017-12-05 | 华为技术有限公司 | 分片管理方法和分片管理装置 |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5522065A (en) * | 1991-08-30 | 1996-05-28 | Compaq Computer Corporation | Method for performing write operations in a parity fault tolerant disk array |
WO1993023803A1 (fr) * | 1992-05-21 | 1993-11-25 | Fujitsu Limited | Appareil de commande pour pile de disques |
US5583876A (en) * | 1993-10-05 | 1996-12-10 | Hitachi, Ltd. | Disk array device and method of updating error correction codes by collectively writing new error correction code at sequentially accessible locations |
US5537534A (en) * | 1995-02-10 | 1996-07-16 | Hewlett-Packard Company | Disk array having redundant storage and methods for incrementally generating redundancy as data is written to the disk array |
US5860090A (en) * | 1995-10-20 | 1999-01-12 | Informix Software, Inc. | Append-only storage in a disk array using striping and parity caching |
US6343343B1 (en) * | 1998-07-31 | 2002-01-29 | International Business Machines Corporation | Disk arrays using non-standard sector sizes |
US6195727B1 (en) * | 1999-03-31 | 2001-02-27 | International Business Machines Corporation | Coalescing raid commands accessing contiguous data in write-through mode |
US6985995B2 (en) * | 2002-03-29 | 2006-01-10 | Panasas, Inc. | Data file migration from a mirrored RAID to a non-mirrored XOR-based RAID without rewriting the data |
US7426611B1 (en) * | 2003-08-18 | 2008-09-16 | Symantec Operating Corporation | Method and system for improved storage system performance using cloning of cached data |
US7346733B2 (en) * | 2004-09-09 | 2008-03-18 | Hitachi, Ltd. | Storage apparatus, system and method using a plurality of object-based storage devices |
US8151014B2 (en) * | 2005-10-03 | 2012-04-03 | Hewlett-Packard Development Company, L.P. | RAID performance using command descriptor block pointer forwarding technique |
US7725765B2 (en) * | 2006-09-29 | 2010-05-25 | Hitachi, Ltd. | Method and apparatus for encryption with RAID in storage system |
US20090198885A1 (en) * | 2008-02-04 | 2009-08-06 | Manoj Jose K | System and methods for host software stripe management in a striped storage subsystem |
KR101023877B1 (ko) * | 2009-04-17 | 2011-03-22 | (주)인디링스 | 캐시 및 디스크 관리 방법 및 상기 방법을 이용한 컨트롤러 |
US8566686B2 (en) * | 2011-05-13 | 2013-10-22 | Lsi Corporation | System and method for optimizing read-modify-write operations in a RAID 6 volume |
CN102752402A (zh) * | 2012-07-20 | 2012-10-24 | 广东威创视讯科技股份有限公司 | 一种云存储方法及系统 |
CN102841931A (zh) * | 2012-08-03 | 2012-12-26 | 中兴通讯股份有限公司 | 分布式文件系统的存储方法及装置 |
US10073626B2 (en) * | 2013-03-15 | 2018-09-11 | Virident Systems, Llc | Managing the write performance of an asymmetric memory system |
WO2014185953A1 (en) * | 2013-05-16 | 2014-11-20 | Intel IP Corporation | Multiple radio link control (rlc) groups |
US9921910B2 (en) * | 2015-02-19 | 2018-03-20 | Netapp, Inc. | Virtual chunk service based data recovery in a distributed data storage system |
ES2899933T3 (es) * | 2016-03-15 | 2022-03-15 | Datomia Res Labs Ou | Gestión y seguridad de datos del sistema de almacenamiento distribuido |
US10853268B2 (en) * | 2016-06-15 | 2020-12-01 | Hitachi, Ltd. | Parity generating information processing system |
-
2018
- 2018-03-30 WO PCT/CN2018/081446 patent/WO2019183958A1/zh active Application Filing
- 2018-04-13 CN CN201880002799.4A patent/CN110557964B/zh active Active
- 2018-04-13 EP EP18912193.2A patent/EP3779705A4/en active Pending
- 2018-04-13 WO PCT/CN2018/083107 patent/WO2019184012A1/zh unknown
-
2020
- 2020-09-23 US US17/029,285 patent/US11579777B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8799535B2 (en) * | 2008-01-11 | 2014-08-05 | Akamai Technologies, Inc. | Storage of data utilizing scheduling queue locations associated with different data rates |
CN102088389A (zh) * | 2009-12-02 | 2011-06-08 | 中兴通讯股份有限公司 | 一种分布式内容存取调度装置和内容读取方法 |
CN103699494A (zh) * | 2013-12-06 | 2014-04-02 | 北京奇虎科技有限公司 | 一种数据存储方法、数据存储设备和分布式存储系统 |
CN107436733A (zh) * | 2017-06-29 | 2017-12-05 | 华为技术有限公司 | 分片管理方法和分片管理装置 |
Non-Patent Citations (2)
Title |
---|
Tiered-latency DRAM: A low latency and low cost DRAM architecture;Donghyuk Lee;《2013 IEEE 19th International Symposium on High Performance Computer Architecture (HPCA)》;20130603;1-12 * |
分布式文件系统客户端的设计与实现;张轶彬;《中国优秀硕士学位论文全文数据库信息科技辑》;20120715(第07期);I137-212 * |
Also Published As
Publication number | Publication date |
---|---|
WO2019184012A1 (zh) | 2019-10-03 |
WO2019183958A1 (zh) | 2019-10-03 |
CN110557964A (zh) | 2019-12-10 |
US20210004166A1 (en) | 2021-01-07 |
EP3779705A4 (en) | 2021-06-30 |
US11579777B2 (en) | 2023-02-14 |
EP3779705A1 (en) | 2021-02-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110557964B (zh) | 数据写入方法、客户端服务器和系统 | |
US12067256B2 (en) | Storage space optimization in a system with varying data redundancy schemes | |
CN107436733B (zh) | 分片管理方法和分片管理装置 | |
CN107209714B (zh) | 分布式存储系统及分布式存储系统的控制方法 | |
US20200117362A1 (en) | Erasure coding content driven distribution of data blocks | |
US10303363B2 (en) | System and method for data storage using log-structured merge trees | |
CN113176858B (zh) | 数据处理方法、存储系统及存储设备 | |
CN109582213B (zh) | 数据重构方法及装置、数据存储系统 | |
CN112527186B (zh) | 一种存储系统、存储节点和数据存储方法 | |
CN107924291B (zh) | 存储系统 | |
CN103635887B (zh) | 缓存数据的方法和存储系统 | |
CN112114753B (zh) | 一种数据写入方法、装置及设备 | |
US9959049B1 (en) | Aggregated background processing in a data storage system to improve system resource utilization | |
CN109445687B (zh) | 一种数据存储方法以及协议服务器 | |
CN107153512B (zh) | 一种数据迁移方法和装置 | |
CN108431815B (zh) | 在处理器网格中的分布式数据的去重复数据 | |
CN110245129B (zh) | 一种分布式全局数据去重方法和装置 | |
CN110998537A (zh) | 一种过期备份处理方法及备份服务器 | |
CN111949210A (zh) | 分布式存储系统中元数据存储方法、系统及存储介质 | |
CN110908589A (zh) | 数据文件的处理方法、装置、系统和存储介质 | |
CN110427347A (zh) | 重复数据删除的方法、装置、存储节点及存储介质 | |
EP3859506B1 (en) | Node expansion method in storage system and storage system | |
US11775194B2 (en) | Data storage method and apparatus in distributed storage system, and computer program product | |
CN114579045A (zh) | 存储装置、存储装置的操作方法和存储服务器的操作方法 | |
US11507278B2 (en) | Proactive copy in a storage environment |
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 |