CN113282242B - 分布式存储方法、装置、设备及计算机可读存储介质 - Google Patents
分布式存储方法、装置、设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN113282242B CN113282242B CN202110603415.8A CN202110603415A CN113282242B CN 113282242 B CN113282242 B CN 113282242B CN 202110603415 A CN202110603415 A CN 202110603415A CN 113282242 B CN113282242 B CN 113282242B
- Authority
- CN
- China
- Prior art keywords
- index object
- fragment
- data
- generated
- parent
- 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/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- 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
-
- 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/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Human Computer Interaction (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例公开了一种分布式存储方法、装置、设备及计算机可读存储介质,属于数据存储技术领域。在本申请实施例中,边生成索引对象,边异步地将后续计算不依赖的索引对象(包括预生成的和/或当前生成的)发送出去,这样,如果一次处理部分分片数据,则能够在计算的同时并行发送数据,减少了对磁盘的资源占用,减少了数据写入磁盘和从磁盘读出数据的时间,提高了数据存储效率。另外,若本方案直接一次获取全部的N个分片数据,生成N个分片索引对象,之后再基于这N个分片索引对象生成一个父索引对象,那么索引对象的总数量为N+1,也即需要存储的索引对象的数量较少,由此可见,本方案能够减少数据传输次数,提高数据存储效率。
Description
技术领域
本申请实施例涉及数据存储技术领域,特别涉及一种分布式存储方法、装置、设备及计算机可读存储介质。
背景技术
分布式存储系统,是将数据分散传输并存储在多个独立的存储节点上,利用多个存储节点分担存储负荷,不但提高了系统的可靠性、可用性和存取效率,还易于扩展。
在相关技术中,基于默克尔树实现分布式存储,用户节点将文件上传至多个存储节点存储的过程包括文件分片和分片上传。其中,文件分片的过程为:对待存储的文件数据进行分片,得到N个分片数据,将各个分片数据作为默克尔树最底层的叶子节点,计算各个叶子节点的哈希值,并生成每个叶子节点对应的索引对象;将N个叶子节点的哈希值两两配对计算哈希值,得到上一层叶子节点的哈希值,重复这个过程,直至计算出根节点的哈希值,并生成根节点的索引对象;得到的各个索引对象存储在用户节点的磁盘中,所有索引对象形成默克尔树的拓扑结构。分片上传的过程为:从磁盘中读取各个索引对象,并发送到对应的存储节点。
相关技术中,计算得到的每个索引对象都需要写入磁盘中,向存储节点发送时又需要从磁盘中读取每个索引对象,写入和读取的时间很长,导致分布式存储的效率很低,且基于默克尔树的分布式存储方法得到的索引对象的总数量为2*N或2*N-1,需要传输的索引对象的数量较多,传输时间长,存储效率低。因此,亟需一种新的分布式存储方法提高存储效率。
发明内容
本申请实施例提供了一种分布式存储方法、装置、设备及计算机可读存储介质,能够提高数据存储效率。所述技术方案如下:
一方面,提供了一种分布式存储方法,所述方法包括:
从多个分片数据中获取待处理分片数据;
生成所述待处理分片数据的分片索引对象,所述分片索引对象包括所述待处理分片数据的分片摘要和所述待处理分片数据;
基于预生成的索引对象和当前生成的分片索引对象,生成父索引对象,以及将所述预生成的索引对象和/或所述当前生成的分片索引对象发送至对应的存储节点,所述父索引对象包括父摘要,所述父索引对象指示所述当前生成的分片索引对象的存储节点。
可选地,所述预生成的索引对象为预生成的其他的分片索引对象,或预生成的其他的父索引对象。
可选地,所述预生成的索引对象存储于临时变量空间;
所述生成所述待处理分片数据的分片索引对象之后,所述基于预生成的索引对象和当前生成的分片索引对象,生成父索引对象之前,还包括:
如果所述待处理分片数据不包括所述多个分片数据中的第一个分片数据和最后一个分片数据,则从所述临时变量空间中获取所述预生成的索引对象,清空所述临时变量空间;
相应地,所述生成父索引对象之后,还包括:
将所述父索引对象存放到所述临时变量空间,继续执行所述从多个分片数据中获取待处理分片数据的步骤。
可选地,所述预生成的索引对象存储于临时变量空间;
所述生成所述待处理分片数据的分片索引对象之后,还包括:
如果所述待处理分片数据包括所述多个分片数据中的第一个分片数据,则将所述当前生成的分片索引对象存放到所述临时变量空间,继续执行所述从多个分片数据中读取待处理分片数据的步骤。
可选地,所述生成父索引对象之后,还包括:
如果所述待处理分片数据包括所述多个分片数据中的最后一个分片数据,则将所述父索引对象发送至对应的存储节点。
可选地,所述分片索引对象包括数据字段和摘要字段,所述分片索引对象包括的数据字段用于存储对应的分片数据,所述分片索引对象包括的摘要字段用于存储相应分片数据的分片摘要;
所述父索引对象包括摘要字段和链接字段,所述父索引对象包括的摘要字段用于存储对应的父摘要,所述父索引对象包括的链接字段用于存储相应子索引对象的链接信息,所述链接信息包括摘要字段,所述链接信息包括的摘要字段用于存储相应子索引对象包括的摘要,所述子索引对象是指参与生成所述父索引对象的索引对象。
可选地,所述链接信息还包括名称字段和数据量字段中的至少一个,所述链接信息包括的名称字段用于存储相应子索引对象对应的文件名称,所述链接信息包括的数据量字段用于存储相应子索引对象对应的文件大小。
另一方面,提供了一种分布式存储装置,所述装置包括:
获取模块,用于多个分片数据中获取待处理分片数据;
第一处理模块,用于生成所述待处理分片数据的分片索引对象,所述分片索引对象包括所述待处理分片数据的分片摘要和所述待处理分片数据;
第二处理模块,用于基于预生成的索引对象和当前生成的分片索引对象,生成父索引对象,以及将所述预生成的索引对象和/或所述当前生成的分片索引对象发送至对应的存储节点,所述父索引对象包括父摘要,所述父索引对象指示所述当前生成的分片索引对象的存储节点。
可选地,所述预生成的索引对象为预生成的其他的分片索引对象,或预生成的其他的父索引对象。
可选地,所述预生成的索引对象存储于临时变量空间;
所述装置还包括:
第三处理模块,用于如果所述待处理分片数据不包括所述多个分片数据中的第一个分片数据和最后一个分片数据,则从所述临时变量空间中获取所述预生成的索引对象,清空所述临时变量空间;
相应地,所述装置还包括:
第四处理模块,用于将所述父索引对象存放到所述临时变量空间,继续执行所述从多个分片数据中获取待处理分片数据的步骤。
可选地,所述预生成的索引对象存储于临时变量空间;
所述装置还包括:
第五处理模块,用于如果所述待处理分片数据包括所述多个分片数据中的第一个分片数据,则将所述当前生成的分片索引对象存放到所述临时变量空间,继续执行所述从多个分片数据中读取待处理分片数据的步骤。
可选地,所述装置还包括:
发送模块,用于如果所述待处理分片数据包括所述多个分片数据中的最后一个分片数据,则将所述父索引对象发送至对应的存储节点。
可选地,所述分片索引对象包括数据字段和摘要字段,所述分片索引对象包括的数据字段用于存储对应的分片数据,所述分片索引对象包括的摘要字段用于存储相应分片数据的分片摘要;
所述父索引对象包括摘要字段和链接字段,所述父索引对象包括的摘要字段用于存储对应的父摘要,所述父索引对象包括的链接字段用于存储相应子索引对象的链接信息,所述链接信息包括摘要字段,所述链接信息包括的摘要字段用于存储相应子索引对象包括的摘要,所述子索引对象是指参与生成所述父索引对象的索引对象。
可选地,所述链接信息还包括名称字段和数据量字段中的至少一个,所述链接信息包括的名称字段用于存储相应子索引对象对应的文件名称,所述链接信息包括的数据量字段用于存储相应子索引对象对应的文件大小。
另一方面,提供了一种计算机设备,所述计算机设备包括处理器、通信接口、存储器和通信总线,所述处理器、所述通信接口和所述存储器通过所述通信总线完成相互间的通信,所述存储器用于存放计算机程序,所述处理器用于执行所述存储器上所存放的程序,以实现上述所述分布式存储方法的步骤。
另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述所述分布式存储方法的步骤。
另一方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述所述的分布式存储方法的步骤。
本申请实施例提供的技术方案至少可以带来以下有益效果:
在本申请实施例中,边生成索引对象,边异步地将后续计算不依赖的索引对象(包括预生成的和/或当前生成的)发送出去,这样,如果一次处理部分分片数据,则能够在计算的同时并行发送数据,减少了对磁盘的资源占用,减少了数据写入磁盘和从磁盘读出数据的时间,提高了数据存储效率。另外,若本方案直接一次获取全部的N个分片数据,生成N个分片索引对象,之后再基于这N个分片索引对象生成一个父索引对象,那么索引对象的总数量为N+1,需要存储的索引对象的数量较少,由此可见,本方案能够减少数据传输次数,提高数据存储效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种分布式存储方法所涉及的系统架构图;
图2是本申请实施例提供的一种分布式存储方法的流程图;
图3是本申请实施例提供的另一种分布式存储方法的流程图;
图4是本申请实施例提供的又一种分布式存储方法的流程图;
图5是本申请实施例提供的一种生成索引对象的方法流程图;
图6是本申请实施例提供的又一种分布式存储方法的流程图;
图7是本申请实施例提供的一种索引构建模型的结构示意图;
图8是本申请实施例提供的又一种分布式存储方法的流程图;
图9是本申请实施例提供的另一种生成索引对象的方法流程图;
图10是本申请实施例提供的一种分布式存储装置的结构示意图;
图11是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
首先对本申请实施例中涉及的部分术语进行解释。
哈希运算:哈希(Hash)算法,一种把任意长度的输入变换得到固定长度值的算法,计算得到的值称为哈希值。SHA256是一种哈希算法。
摘要:包含原始数据的关键信息。例如,分片摘要包含分片数据的关键信息。通过哈希算法或者MD5算法等对原始数据进行变换,能够得到原始数据的摘要。在本申请实施例中,以摘要为哈希值为例进行说明。
默克尔树:Merkle树,存储哈希值的一种数据结构。
图1是本申请实施例提供的一种分布式存储方法所涉及的系统架构图。参见图1,该系统架构包括用户节点101和多个存储节点102。用户节点101和该多个存储节点102中的每个存储节点102以有线或无线方式连接进行通信。
用户节点101用于根据本申请实施例提供的分布式存储方法得到索引对象,并将得到的索引对象发送到对应的存储节点102,以提高分布式存储的效率。该多个存储节点102中的每个存储节点102用于接收并存储用户节点101发送的索引对象。
在本申请实施例中,用户节点101为手机、笔记本电脑、台式电脑、笔记本电脑等设备。该多个存储节点102中的每个存储节点102为一个独立的存储设备,或者为多台存储设备构成的存储设备集群,其中,存储设备可以为网络存储设备或其他形式的存储设备。示例性地,存储设备为服务器,也即存储节点102为一台服务器,或者,为由多台服务器构成的服务器集群,或者,为一个云存储服务中心。
接下来对本申请实施例提供的分布式存储方法进行详细的解释说明。
图2是本申请实施例提供的一种分布式存储方法的流程图。以该方法应用于用户节点为例,请参考图2,该方法包括如下步骤。
步骤201:从多个分片数据中获取待处理分片数据。
在本申请实施例中,用户节点可以获取多个分片数据,并从该多个分片数据中获取待处理分片数据。可选地,待处理分片数据包括一个或多个未处理的分片数据。可选地,用户节点可以从磁盘或硬盘等中读取待处理分片数据到内存中。
示例性地,用户节点的磁盘或硬盘等中存储有一个文件,该文件包括多个分片数据,用户节点从磁盘或硬盘等中读取待处理分片数据到内存中。其中,用户节点预先将该文件进行分片,得到多个分片数据,并将该多个分片数据存储在磁盘或硬盘中。示例性地,用户节点有分片器,通过分片器读取该文件并进行分片,得到多个分片数据。需要说明的是,该多个分片数据的数据大小相同或不同,本申请实施例对此不作限定。
步骤202:生成待处理分片数据的分片索引对象,分片索引对象包括待处理分片数据的分片摘要和待处理分片数据。
在本申请实施例中,用户节点生成待处理分片数据的分片索引对象。需要说明的是,如果待处理分片数据包括多个未处理的分片数据,则用户节点生成该多个未处理的分片数据中每个分片数据的分片索引对象。
可选地,在本申请实施例中通过摘要算法对待处理分片数据进行处理,得到待处理分片数据的分片摘要,根据该分片摘要生成待处理分片数据的分片索引对象。示例性地,用户节点将待处理分片数据包括的每个分片数据作为摘要算法的输入,通过摘要算法输出分片哈希值。用户节点基于该分片摘要和待处理分片数据,生成该待处理分片数据的分片索引对象,分片索引对象包括待处理分片数据的分片摘要和待处理分片数据。其中,本申请实施例中的摘要算法为任意一种可行的摘要算法,例如SHA256、SHA384、SHA512、MD5等中的任意一种。
可选地,分片索引对象包括数据字段和摘要字段,分片索引对象包括的数据字段用于存储对应的分片数据,分片索引对象包括的摘要字段用于存储相应分片数据的分片摘要。也即是,以字段的形式形成分片索引对象。需要说明的是,分片索引对象为可扩展的,也即分片索引对象可以根据实际应用扩展更多字段,本申请实施例对此不作限定。
步骤203:基于预生成的索引对象和当前生成的分片索引对象,生成父索引对象,以及将预生成的索引对象和/或当前生成的分片索引对象发送至对应的存储节点。
其中,父索引对象包括父摘要,父索引对象指示当前生成的分片索引对象的存储节点。
在本申请实施例中,用户节点生成待处理分片数据的分片索引对象之后,基于预生成的索引对象和当前生成的分片索引对象,生成父索引对象,以及将预生成的索引对象和/或当前生成的分片索引对象发送至对应的存储节点。
可选地,用户节点通过摘要算法对预生成的索引对象包括的摘要和当前生成的分片索引对象包括的分片摘要进行处理,得到父摘要,基于该父摘要生成对应的父索引对象。
在本申请实施例中,发送索引对象的一种实现方式为,用户节点在生成父索引对象之后,将预生成的索引对象和/或当前生成的分片索引对象发送至对应的存储节点。需要说明的是,在这种实现方式中,用户节点获取预生成的索引对象包括的摘要,以及获取当前生成的分片摘要,基于这两个摘要生成父索引对象包括的父摘要,之后,用户节点即可以将预生成的索引对象和/或当前生成的分片索引对象发送至对应的存储节点。也即是,用户节点计算完该父索引对象之后,立即发送后续计算不再依赖的索引对象。在这种实现方式中,为了标识正在处理的这些摘要,以便用户节点知道当前正在处理哪些节点,用户节点以索引对象为一个整体来标识摘要,例如索引对象还包括相应节点的属性信息,属性信息能够用于标识和区分摘要。可见,在这种实现方式中,用户节点在生成父索引对象之后,即能够异步地将后续计算不再依赖的索引对象发送至对应的存储节点,提高了存储效率。可选地,在本申请实施例中,预生成的索引对象存储于临时变量空间。示例性地,本申请实施例中在用户节点的内存中设置临时变量空间,临时变量空间用于存放后续计算所依赖的索引对象。需要说明的是,在发送索引对象的这种实现方式中,临时变量空间中存储预生成的索引对象。
在本申请实施例中,发送索引对象的另一种实现方式为,用户节点在生成父索引对象的同时,将预生成的索引对象和/或当前生成的分片索引对象发送至对应的存储节点,以及临时保存预生成的索引对象包括的摘要和当前生成的分片索引对象的摘要,基于这两个摘要生成父索引对象包括的父摘要。也即是,在这种实现方式中,用户节点无需等待生成父索引对象,就可以并行发送已生成的索引对象。需要说明的是,在这种实现方式中,临时变量空间中也可以仅存储预生成的索引对象包括的摘要和能够标识该摘要所属节点的属性信息。
可选地,预生成的索引对象为预生成的其他的分片索引对象,或预生成的其他的父索引对象。其中,预生成的其他的分片索引对象包括在当前生成的分片索引对象之前生成的分片索引对象,预生成的其他的父索引对象包括在当前生成的分片索引对象之前生成的父索引对象,且预生成的索引对象为后续计算还需依赖的索引对象。示例性地,如果第二次获取的待处理分片数据包括该多个分片数据中的第二个分片数据,则预生成的索引对象为预生成的第一个分片数据的分片索引对象。如果是第五次获取的待处理分片数据,则预生成的索引对象为基于第四次获取的待处理分片数据生成的一个父索引对象。
可选地,由前述可知,在本申请实施例中,预生成的索引对象存储于临时变量空间。例如,在用户节点的内存中设置临时变量空间,临时变量空间用于存放后续计算所依赖的索引对象。若在本方案中每次需要处理数据量较小的话,如每次读取一个分片数据生成一个分片索引对象,该分片索引对象与预生成的索引对象结合生成父索引对象,这样内存的计算压力较小,可以在内存中临时存放预生成的索引对象,这样就无需占用磁盘,能够减少对磁盘空间的占用,减少数据写入磁盘和从磁盘读出数据的时间,提高效率。
其中,父索引对象的生成方式可以为,用户节点将预生成的索引对象包括的摘要和当前生成的分片索引对象包括的分片摘要合并为一个输入数据,将该输入数据作为摘要算法的输入,输出一个父摘要,用户节点根据该父摘要生成对应的父索引对象。
可选地,用户节点在生成待处理分片数据的分片索引对象之后,基于预生成的索引对象和当前生成的分片索引对象,生成父索引对象之前,如果待处理分片数据不包括该多个分片数据中的第一个分片数据和最后一个分片数据,则用户节点从临时变量空间中获取预生成的索引对象,清空临时变量空间。相应地,用户节点生成父索引对象之后,将父索引对象存放到临时变量空间,继续执行从该多个分片数据中获取待处理分片数据的步骤。也即是,若待处理分片数据不包括第一个分片数据,则表示临时变量空间中存放有预生成的索引对象,可以执行步骤203,若待处理分片数据不包括最后一个分片数据,则表示未处理完所有分片,需要将父索引对象存放入临时变量空间,继续进行下一轮循环。
示例性地,假设共有五个分片数据,每次处理一个分片数据,如果待处理分片数据是该多个分片数据中的第二个分片数据,那么,临时变量空间中存放的是一个分片索引对象(也即预生成的索引对象为第一个分片数据的索引对象),则用户节点从临时变量空间中获取该分片索引对象包括的分片摘要,用于下一个父索引对象的计算。如果待处理分片数据是该多个分片数据中的第三个或第四个分片数据,那么,临时变量空间中存放的是一个父索引对象(也即预生成的索引对象为一个父索引对象),则用户节点从临时变量空间中获取该父索引对象包括的父摘要,用于下一个父索引对象的计算。
可选地,预生成的索引对象存储于临时变量空间。用户节点在生成待处理分片数据的分片索引对象之后,如果待处理分片数据包括该多个分片数据中的第一个分片数据,则将当前生成的分片索引对象存放到临时变量空间,继续执行从该多个分片数据中读取待处理分片数据的步骤。也即是,若待处理分片数据包括第一个分片数据,则表示当前为第一轮循环,不存在预生成的索引对象,无需执行步骤203,而是将当前生成的分片索引对象作为预生成的第一个索引对象存放到临时变量空间中,用于后续的父索引对象的计算。
示例性地,假设共有五个分片数据,每次获取两个分片数据进行处理,如果待处理分片数据包括该多个分片数据中的第一个分片数据,那么,临时变量空间中未存放索引对象,则用户节点分别生成第一个和第二个分片数据的分片索引对象,将这两个分片索引对象存放到临时变量空间中。
在本申请实施例中,用户节点在生成父索引对象之后,如果待处理分片数据包括多个分片数据中的最后一个分片数据,则用户节点将父索引对象发送至对应的存储节点。也即是,若待处理分片数据包括最后一个分片数据,则表示已执行到最后一轮循环,生成父索引对象之后,将父索引对象也发送至对应的存储节点即可,无需再存放到临时变量空间。换句话说,在最后一次循环的过程中,将预生成的索引对象、当前生成的分片索引对象和当前生成的父索引对象均发送至对应的存储节点。
示例性地,假设共有五个分片数据,每次获取一个分片数据进行处理,如果待处理分片数据是该多个分片数据中的第五个分片数据,那么,临时变量空间中存放的预生成的索引对象是一个父索引对象,则用户节点从临时变量空间中获取该分片索引对象包括的父摘要,结合该父摘要和第五个分片数据的分片摘要,生成最后一个父索引对象(即根节点的索引对象),将预生成的索引对象、第五个分片数据的分片索引对象和最后生成的父索引对象均发送至对应的存储节点。
可选地,在本申请实施例中,在内存中设置缓存池,缓存池用于索引对象的发送,也即是将需要异步发送的索引对象放入缓存池中进行发送。示例性地,用户节点在生成父索引对象之后,将预生成的索引对象和当前生成的索引对象存放到缓存池中,通过发送线程发送至对应的存储节点,这样即能够边生成索引对象,边异步发送后续计算不再依赖的索引对象。需要说明的是,在本申请实施例中,可以将待发送的索引对象存放在缓存池中排队发送,例如,每一次循环的过程中将预生成的索引对象和当前生成的分片索引对象存放在缓存池中进行排队,通过发送线程依次将缓存池中排队的索引对象发送至对应的存储节点。也就是说,本申请实施例中的生成索引对象与发送索引对象为异步执行的动作,需要发送的索引对象在缓存池中排队即可,缓存池中各个索引对象在什么时刻执行发送并不依赖于当前索引对象的生成进度。
示例性地,用户节点将预生成的索引对象和当前生成的分片索引对象存放到缓存池中,之后,先发送预生成的索引对象,再发送当前生成的分片索引对象,或者,先发送预生成的索引对象,再发送当前生成的分片索引对象,或者,同时发送预生成的索引对象和当前生成的分片索引对象。而在每轮循环的时间段内中,用户节点可以将预生成的索引对象发送至对应的存储节点,或者,将当前生成的索引对象发送至对应的存储节点,或者,将预生成的索引对象和当前生成的索引对象发送至对应的存储节点。
在其他一些实施例中,也可以将需要异步发送的索引对象临时存放在磁盘中,在内存计算后续索引对象的同时,从磁盘中读取待发送的索引对象,并通过发送线程并行发送至对应的存储节点。
需要说明的是,本申请实施例中的临时变量空间用于临时存放索引对象,用户节点在获取临时变量空间中存放的索引对象之后,可以将临时变量空间中的数据清除,以便于再次存放后续生成的索引对象,也即替换掉之前存放的数据。另外,临时变量空间中存放的索引对象,在使用完之后可以立即存放到缓存池中进行发送,也即本方案可以异步地进行计算和发送。
可选地,在本申请实施例中,父索引对象包括摘要字段和链接字段,父索引对象包括的摘要字段用于存储对应的父摘要,父索引对象包括的链接字段用于存储相应子索引对象的链接信息,链接信息包括摘要字段,链接信息包括的摘要字段用于存储相应子索引对象包括的摘要,子索引对象是指参与生成父索引对象的索引对象。
可选地,链接信息还包括名称字段和数据量字段中的至少一个,链接信息包括的名称字段用于存储相应子索引对象对应的文件名称,链接信息包括的数据量字段用于存储相应子索引对象对应的文件大小。
可选地,父索引对象也是可扩展的,也即父索引对象可以根据实际应用扩展更多字段,本申请实施例对此不作限定。其中,父索引对象包括的链接字段也是可扩展的,也即链接信息还包括更多的字段,本申请实施例对此也不作限定。
需要说明的是,本申请实施例中计算的摘要能够用于检索确定所属的索引对象,在通过链接信息中摘要字段存储的摘要即能搜索到相应子节点的索引对象的情况下,链接信息包括摘要字段,或者还包括名称字段和数据量字段中的至少一个,或者还包括更多的字段。在通过链接信息中摘要字段存储的摘要不一定能搜索到相应子节点的索引对象的情况下,链接信息包括摘要字段,还包括名称字段和数据量字段中的至少一个,或者还包括更多的字段,以保证通过链接信息能够搜索到唯一的子节点的索引对象。
示例性地,如果存在多个文件分片为相同数据,那么这多个文件分片的分片摘要(如哈希值)也相同,仅通过分片摘要并不能搜索到唯一的索引对象,因此,链接信息不仅要包括摘要字段,还要包括其他的字段,例如名称字段和数据量字段等。在一些实施例中,为了保证通过链接信息能搜索到唯一的索引对象,在不考虑需要存储的一个索引对象的数据大小的情况下,链接信息包括的属性字段越多,属性信息也就越详细,这样能够确保搜索到唯一的索引对象。
可选地,为了索引对象的数据结构统一,分片索引对象也还包括链接字段,分片索引对象包括的链接字段为空,父索引对象也还包括数据字段,父索引对象包括的数据字段为空。
在本申请实施例中,边生成索引对象,边异步地将后续计算不依赖的索引对象(包括预生成的和/或当前生成的)发送出去,这样,能够在计算的同时并行发送数据,减少了对磁盘的资源占用,减少了数据写入磁盘和从磁盘读出数据的时间,提高了数据存储效率。另外,本方案每次获取一个或多个待处理的分片数据进行处理,假设一种极限情况,直接一次获取全部的N个分片数据,生成N个分片索引对象,之后再基于这N个分片索引对象生成一个父索引对象,那么索引对象的总数量为N+1,也即需要发送的索引对象的数量较少,由此可见,本方案能够减少数据传输次数,提高存储效率。
接下来分别以图3和图8所示实施例为例介绍本申请实施例所提供的分布式存储方法的两个具体实施例。
图3是本申请实施例提供的另一种分布式存储方法的流程图。以该方法应用于用户节点,每次处理一个分片数据为例,请参考图3,该方法包括如下步骤。
步骤301:从多个分片数据中获取一个待处理分片数据。
在本申请实施例中,用户节点可以获取多个分片数据,并从该多个分片数据中读取一个待处理分片数据到内存中。具体实现方式参照前述实施例中步骤201中相关介绍,这里不再赘述。
步骤302:生成该待处理分片数据的分片索引对象,该分片索引对象包括待处理分片数据的分片摘要和该待处理分片数据。
示例性地,用户节点通过摘要算法对待处理分片数据进行计算,得到分片摘要,根据该分片摘要生成该待处理分片数据的分片索引对象,该分片索引对象包括该分片摘要和该待处理分片数据。
示例性地,假设摘要算法为一种哈希算法,用户节点将待处理分片数据作为哈希算法的输入,输出分片哈希值。用户节点将该分片哈希值和待处理分片数据,作为该待处理分片数据的分片索引对象。
可选地,分片索引对象包括数据字段和摘要字段,分片索引对象包括的数据字段用于存储对应的分片数据,分片索引对象包括的摘要字段用于存储相应分片数据的分片摘要。也即是,以字段的形式形成分片索引对象。需要说明的是,分片索引对象为可扩展的,也即分片索引对象可以根据实际应用扩展更多字段,本申请实施例对此不作限定。
步骤303:如果待处理分片数据是该多个分片数据中的第一个分片数据,则将当前生成的分片索引对象存放到临时变量空间,继续执行从该多个分片数据中读取一个待处理分片数据的步骤。
在本申请实施例中,如果待处理分片数据是该多个分片数据中的第一个分片数据,则用户节点将当前生成的分片索引对象存放到临时变量空间,返回继续执行步骤301和步骤302。需要说明的是,本申请实施例在用户节点的内存中设置临时变量空间,临时变量空间用于存放后续计算所依赖的索引对象。
步骤304:如果待处理分片数据不是该多个分片数据中的第一个分片数据,且不是该多个分片数据中的最后一个分片数据,则从临时变量空间中获取预生成的索引对象,清空该临时变量空间,基于预生成的索引对象和当前生成的索引对象,生成父索引对象,以及将预生成的索引对象和/或当前生成的分片索引对象对象发送至对应的存储节点,将父索引对象存放到临时变量空间,继续执行从多个分片数据中获取一个待处理分片数据的步骤。
在本申请实施例中,以用户节点的内存中设置缓存池用于索引对象的发送为例,用户节点从临时变量空间中获取预生成的索引对象,清空该临时变量空间,结合当前生成的分片摘要和预生成的索引对象包括的摘要,通过摘要算法得到父摘要,根据该父摘要生成父索引对象,将预生成的索引对象和当前生成的分片索引对象存放到缓存池中并异步地发送至对应的存储节点,将父索引对象存放到临时变量空间,继续执行从多个分片数据中获取一个待处理分片数据的步骤。其中,父索引对象包括父摘要,父索引对象指示当前生成的分片索引对象的存储节点。需要说明的是,异步发送索引对象的具体实现可以参照前述实施例中相关介绍,这里不再赘述。
可选地,预生成的索引对象为预生成的其他的分片索引对象,或预生成的其他的父索引对象。具体介绍可以参照前述实施例中的相关介绍,这里不再赘述。
需要说明的是,图3所示实施例中的临时变量空间中最多存放一个索引对象,在临时变量空间中存储一个索引对象之前,如果临时变量空间中存放有索引对象,那么用户节点将临时变量空间中的数据清除后,再存放当前的索引对象,也即替换掉之前存放的数据。另外,临时变量空间中存放的索引对象,在使用完之后立即存放到缓存池中进行发送,也即本方案可以并行计算和发送索引对象。
可选地,父索引对象包括摘要字段和链接字段,父索引对象包括的摘要字段用于存储对应的父摘要,父索引对象包括的链接字段用于存储相应子索引对象的链接信息,链接信息包括摘要字段,链接信息包括的摘要字段用于存储相应子索引对象包括的摘要,自索引对象是指参与生成父索引对象的索引对象。其中,参与生成一个父索引对象的索引对象可以作为该父索引对象的子节点,该父索引对象可以作为参与计算该父索引对象的父节点,分片索引对象可以为叶子节点,最后一个父索引对象为根节点。
可选地,链接信息还包括名称字段和数据量字段中的至少一个,链接信息包括的名称字段用于存储相应子索引对应的文件名称,链接信息包括的数据量字段用于存储相应子索引对象对应的文件大小。
可选地,父索引对象也是可扩展的,也即父索引对象可以根据实际应用扩展更多字段,本申请实施例对此不作限定。父索引对象包括的链接字段也是可扩展的,也即链接信息还包括更多的字段,本申请实施例对此也不作限定。
可选地,为了索引对象的数据结构统一,分片索引对象也还包括链接字段,分片索引对象包括的链接字段为空,父索引对象也还包括数据字段,父索引对象包括的数据字段为空。
需要说明的是,对于该多个分片数据中非第一个和非最后一个分片数据,均按照步骤304介绍的方法进行操作,这里不再赘述。
步骤305:如果待处理分片数据是该多个分片数据中的最后一个分片数据,则从临时变量空间获取预生成的索引对象,基于预生成的索引对象和当前生成的索引对象,生成父索引对象,将预生成的索引对象、当前生成的分片索引对应对象和父索引对象发送至对应的存储节点。
在本申请实施例中,以用户节点的内存中设置缓存池用于索引对象的发送为例,用户节点获取预生成的索引对象之后,结合当前生成的分片摘要和预生成的索引对象包括的摘要,通过摘要算法得到父摘要,根据该父摘要生成父索引对象,将预生成的索引对象、当前生成的分片索引对象和父索引对象存放到缓存池中并分别发送至对应的存储节点。需要说明的是,用户节点得到的最后一个父索引对象即为顶层索引对象,也称为根节点的索引对象或根索引对象。
需要说明的是,上述步骤303和步骤305为可选的步骤,上述步骤303至步骤305可灵活调整,例如,对于该多个分片数据中的每个分片数据的索引对象,存放到临时变量空间中,或者存储到缓存池中,用户节点从临时变量空间或缓存池中获取对应的数据参与计算或者进行发送。
接下来结合图4对上述步骤301至步骤505再次进行解释说明。
图4是本申请实施例提供的又一种分布式存储方法的流程图。以分片摘要为分片哈希值,内存中设置有临时变量空间和缓存池为例,参见图4,用户节点初始化分片器,打开待分布式存储的文件,通过分片器将文件分片,得到多个分片数据,并读取文件包括的一个分片数据(待处理分片数据)到内存中,计算该待处理分片数据的分片哈希值,根据该分片哈希值生成分片索引对象。
之后,用户节点判断该待处理分片数据是否是第一个分片数据,如果该待处理分片数据是第一个分片数据,则用户节点将该待处理分片数据存放到内存的临时变量空间中,继续返回执行分片器读取文件包括的一个分片数据到内存中的步骤。如果该待处理分片数据不是第一个分片数据,则用户节点根据该分片哈希值和临时变量空间中索引对象包括的哈希值,计算父哈希值,根据该父哈希值生成父索引对象(包括创建索引对象的链接关系),用户节点将该预生成的索引对象和当前生成的分片索引对象存放到缓存池中并发送至对应的存储节点。
之后,用户节点判断该分片数据是否是最后一个分片数据,如果该分片数据不是最后一个分片数据,则用户节点将该父索引对象存放到临时变量空间中,继续返回执行分配器读取文件包括的一个分片数据到内存中的步骤。如果该分片数据是最后一个分片数据,则用户节点将该父索引对象存放到缓存池中并发送至对应的存储节点。
由上述可知,用户节点通过边读取、边计算、边发送的方式,也即通过异步发送有效地提高了存储效率。另外,无需将索引对象存入磁盘,也即无需从磁盘读取索引对象再发送,也能够提高存储效率。
图5是本申请实施例提供的一种生成索引对象的方法流程图。由图5可以看出基于图4所示方法所构建的索引对象的树形结构。参见图5,假设共有四个分片数据,分别为chunk1(C1)、chunk2(C2)、chunk3(C3)和chunk4(C4)。
首先,读取C1到内存中,计算H(C1),得到C1的哈希值H1,将根据H1生成C1的索引对象P1,将P1存放到临时变量空间。
然后,读取C2到内存中,计算H(C2),得到C2的哈希值H2,生成C2的索引对象P2。计算H(H1,H2),得到父节点node(N1)的哈希值H5,根据H5生成N1的索引对象P3,将P3存放到临时变量空间。将P1和P2放入缓存池中分别发送至对应的存储节点。
之后,读取C3到内存中,计算H(C3),得到C3的哈希值H3,生成C3的索引对象P4。计算H(H5,H3),得到父节点N2的哈希值H6,根据H6生成N2的索引对象P5,将P5存放到临时变量空间。将P3和P4放入缓存池中分别发送至对应的存储节点。
最后,读取C4到内存中,计算H(C4),得到C4的哈希值H4,生成C4的索引对象P6。计算H(H6,H4),得到父节点N3(也即根节点R3)的哈希值H7,根据H7生成N3的索引对象P7,将P6和P7放入缓存池中分别发送至对应的存储节点。
由图5可知,假设该多个分片数据的总数量为N,则在图3至图5的方法实施例中,所构建的索引对象的总数量为2*N-1,将该方法称为一种最优计算方法,最优计算方法中一个索引对象的计算过程中不依赖所有分片数据,无需额外占用磁盘空间,索引对象计算过程中同时进行数据发送,且最优计算方法的数据不一致检测复杂度为O(log(n)),能够在实际的分布式存储系统中得到有效应用,有效提高存储效率。
图6是本申请实施例提供的又一种分布式存储方法的流程图。参见图6,将文件进行数据分块,得到多个分块数据(Block),如图6所示的B1至Bk,可选地,对各个分块数据进行纠删分片,得到多个分片数据(Shard),如图6所示的S1至SN。根据以上介绍的方法对各个分片数据进行索引构建,并将索引对象存放到缓存池中,通过发送线程发送至分布式存储节点群包括的存储节点中。
图7是本申请实施例提供的一种索引构建模型的结构示意图。参见图7,该索引对象模型包括顶层索引对象(根索引对象)、中层索引对象和分片索引对象,其中,顶层索引对象和分片索引对象为必要的。不同的索引对象使用相同的数据结构,一个索引对象包括数据协议字段(如图6所示的Protocolbuff,Protobuf),数据字段(Data,D)、摘要字段(如哈希字段(Hash,H))和链接字段(Links,L)。其中,链接字段包括链接信息,链接信息包括名称字段(Name,Nam)、数据量字段(Size,Siz)和哈希字段。由于分片索引对象没有下一级,因此,分片索引对象的链接字段为空,由于顶层索引对象和中层索引对象没有对应的数据,因此,顶层索引对象和中层索引对象包括的数据字段为空。
需要说明的是,根据图7实施例所示的索引构建模型,能够衍生出多种索引对象计算方法,例如上述最优计算方法,下述图8实施例的哈希计算方法,也能衍生出类似默克尔树的计算方法。也即是,本申请实施例设计了一种如图7所示的通用的索引构建模型,根据该索引构建模型所衍生出的算法不同,分布式存储的性能也就存在不同,各种算法各有优缺点。
综上所述,在本申请实施例中,边生成索引对象,边异步地将后续计算不依赖的索引对象(包括预生成的和/或当前生成的)发送出去,这样,能够在计算的同时并行发送数据,减少了对磁盘的资源占用,减少了写入磁盘和从磁盘读出的时间,提高了存储效率。另外,本方案若每次获取一个分片数据进行处理,则数据不一致检测复杂度为O(log(n)),能够在实际的分布式存储系统中得到有效应用,有效提高存储效率。
图8是本申请实施例提供的又一种分布式存储方法的流程图。以该方法应用于用户节点为例,直接一次获取全部的分片数据为例,参见图8,该方法包括如下步骤。
步骤801:获取多个分片数据。
在本申请实施例中,用户节点获取多个分片数据,如读取该多个分片数据到内存中,也即将该多个待处理分片数据作为待处理分片数据。示例性地,用户节点的磁盘或硬盘等中存储有的一个文件包括的多个分片数据,用户节点从磁盘或硬盘等中读取该多个分片数据到内存中。
步骤802:生成该多个分片数据中每个分片数据的分片索引对象,分片索引对象包括相应分片数据的分片摘要和分片数据。
示例性地,在本申请实施例中,用户节点通过摘要算法对该多个分片数据中的每个分片数据进行计算,得到相应分片数据的分片摘要。用户节点根据该多个分片数据中每个分片数据的分片摘要,生成相应分片数据的分片索引对象,所生成的分片索引对象包括相应分片数据的分片摘要和分片数据。
步骤803:基于当前生成的索引对象,生成父索引对象,将当前生成的分片索引对应对象和父索引对象发送至对应的存储节点。
其中,当前生成的索引对象包括该多个分片数据的分片索引对象。示例性地,在本申请实施例中,用户节点通过摘要算法对该多个分片数据的分片摘要进行计算,得到父摘要。用户节点根据该父摘要生成父索引对象。父索引对象包括父摘要,父索引对象指示当前生成的分片索引对象的存储节点。例如,用户节点将该多个分片数据中各个分片数据的分片摘要均作为摘要算法的输入,通过摘要算法计算该多个分片摘要的摘要,得到一个父摘要,根据该父摘要生成父索引对象。
需要说明的是,该多个分片数据作为多个叶子节点,该多个叶子节点对应同一个父节点,用户节点根据步骤802生成各个叶子节点的分片索引对象,根据步骤803生成父节点的父索引对象。
可选地,分片索引对象包括数据字段和摘要字段,分片索引对象包括的数据字段用于存储对应的分片数据,分片索引对象包括的摘要字段用于存储相应分片数据的分片摘要。父索引对象包括摘要字段和链接字段,父索引对象包括的摘要字段用于存储对应的父摘要,父索引对象包括的链接字段用于存储相应自索引对象的链接信息,也即存储该多个分片数据中各个分片数据的链接信息,链接信息包括摘要字段,链接信息包括的摘要字段用于存储相应子索引对象包括的摘要。需要说明的是,在本申请实施例中,由于参与生成该父索引对象的索引对象为该多个分片数据的分片索引对象,因此,该父索引对象的子索引对象包括该多个分片数据的分片索引对象。
可选地,链接信息还包括名称字段和数据量字段中的至少一个,链接信息包括的名称字段用于存储相应子索引对象对应的文件名称,链接信息包括的数据量字段用于存储相应子索引对象对应的文件大小。
需要说明的是,对分片索引对象和父索引对象的数据结构的详细介绍可以参照前述图2和图5实施例中的相关介绍,这里不再赘述。示例性地,图8实施例中所构建的索引对象模型仅包括图5中的顶层索引对象和分片索引对象。
在本申请实施例中,用户节点将计算得到的父索引对象和该多个分片数据中各个分片数据的分片索引对象分别发送至对应的存储节点。
可选地,图8实施例中计算得到的每个索引对象在发送之前存储至磁盘中,在发送时从磁盘中读取出来,并发送至相应的存储节点。
图9是本申请实施例提供的另一种生成索引对象的方法流程图。以摘要算法为哈希算法为例,参见图9,假设共有N个分片数据,分别为C1、C2、C3、…、CN,读取该N个分片数据到内存中,分别计算该N个分片数据的哈希值,得到H1、H2、H3、…、HN。用户节点根本该N个哈希值中的各个哈希值,生成相应分片数据的分片索引对象(未示出),用户节点计算该N个哈希值的哈希值,得到父节点R的父哈希值H,根据该父哈希值H生成父索引对象R。可选地,以哈希算法生成索引对象为例的话,可以将图8和图9实施例相关的分布式存储方法称为哈希计算方法。
由图9可知,假设共有N个分片数据,图8实施例提供的分布式存储方法中,所构建的索引对象的总数量为N+1,小于基于默克尔树算法所构建的索引对象的总数量,能够减少发送的次数,提高存储效率。
综上所述,在本申请实施例中,在计算完所有数据分片的索引对象之后,直接计算一个父索引对象,假设有N个分片数据,那么索引对象的总数量为N+1,相比于基于默克尔树得到的索引对象的总数量2*N或2*N-1,本方案需要发送的索引对象的数量较少,能够减少数据传输次数,提高了数据存储效率。
图10是本申请实施例提供的一种分布式存储装置1000的结构示意图,该分布式存储装置1000可以由软件、硬件或者两者的结合实现成为计算机设备的部分或者全部。请参考图10,该装置1000包括:获取模块1001、第一处理模块1002、和第二处理模块1003。
获取模块1001,用于从多个分片数据中获取待处理分片数据;
第一处理模块1002,用于生成待处理分片数据的分片索引对象,分片索引对象包括待处理分片数据的分片摘要和待处理分片数据;
第二处理模块1003,用于基于预生成的索引对象和当前生成的分片索引对象,生成父索引对象,以及将预生成的索引对象和/或当前生成的分片索引对象发送至对应的存储节点,父索引对象包括父摘要,父索引对象指示当前生成的分片索引对象的存储节点。
可选地,预生成的索引对象为预生成的其他的分片索引对象,或预生成的其他的父索引对象。
可选地,预生成的索引对象存储于临时变量空间;
该装置1000还包括:
第三处理模块,用于如果待处理分片数据不包括多个分片数据中的第一个分片数据和最后一个分片数据,则从临时变量空间中获取预生成的索引对象,清空临时变量空间;
相应地,该装置1000还包括:
第四处理模块,用于将父索引对象存放到临时变量空间,继续执行从多个分片数据中获取待处理分片数据的步骤。
可选地,预生成的索引对象存储于临时变量空间;
该装置1000还包括:
第五处理模块,用于如果待处理分片数据包括多个分片数据中的第一个分片数据,则将当前生成的分片索引对象存放到临时变量空间,继续执行从多个分片数据中读取待处理分片数据的步骤。
可选地,装置还包括:
发送模块,用于如果待处理分片数据包括多个分片数据中的最后一个分片数据,则将父索引对象发送至对应的存储节点。
可选地,分片索引对象包括数据字段和摘要字段,分片索引对象包括的数据字段用于存储对应的分片数据,分片索引对象包括的摘要字段用于存储相应分片数据的分片摘要;
父索引对象包括摘要字段和链接字段,父索引对象包括的摘要字段用于存储对应的父摘要,父索引对象包括的链接字段用于存储相应子索引对象的链接信息,链接信息包括摘要字段,链接信息包括的摘要字段用于存储相应子索引对象包括的摘要,子索引对象是指参与生成父索引对象的索引对象。
可选地,链接信息还包括名称字段和数据量字段中的至少一个,链接信息包括的名称字段用于存储相应子索引对象对应的文件名称,链接信息包括的数据量字段用于存储相应子索引对象对应的文件大小。
在本申请实施例中,边生成索引对象,边异步地将后续计算不依赖的索引对象(包括预生成的和/或当前生成的)发送出去,这样,如果一次处理部分分片数据,则能够在计算的同时并行发送数据,减少了对磁盘的资源占用,减少了数据写入磁盘和从磁盘读出数据的时间,提高了数据存储效率。另外,若本方案直接一次获取全部的N个分片数据,生成N个分片索引对象,之后再基于这N个分片索引对象生成一个父索引对象,那么索引对象的总数量为N+1,也即需要发送的索引对象的数量较少,由此可见,本方案能够减少数据传输次数,提高存储效率。
需要说明的是:上述实施例提供的分布式存储装置在分布式存储时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的分布式存储装置与分布式存储方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图11示出了本申请一个示例性实施例提供的终端1100的结构框图。该终端1100可以是:智能手机、平板电脑、笔记本电脑或台式电脑。终端1100还可能被称为计算机设备、用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,终端1100包括有:处理器1101和存储器1102。
处理器1101可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器1101可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器1101也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器1101可以集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器1101还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器1102可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器1102还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器1102中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器1101所执行以实现本申请中方法实施例提供的分布式存储方法。
在一些实施例中,终端1100还可选包括有:外围设备接口1103和至少一个外围设备。处理器1101、存储器1102和外围设备接口1103之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口1103相连。具体地,外围设备包括:射频电路1104、显示屏1105、摄像头组件1106、音频电路1107、定位组件1108和电源1109中的至少一种。
外围设备接口1103可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器1101和存储器1102。在一些实施例中,处理器1101、存储器1102和外围设备接口1103被集成在同一芯片或电路板上;在一些其他实施例中,处理器1101、存储器1102和外围设备接口1103中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路1104用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路1104通过电磁信号与通信网络以及其他通信设备进行通信。射频电路1104将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路1104包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路1104可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:城域网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路1104还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏1105用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏1105是触摸显示屏时,显示屏1105还具有采集在显示屏1105的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器1101进行处理。此时,显示屏1105还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏1105可以为一个,设置终端1100的前面板;在另一些实施例中,显示屏1105可以为至少两个,分别设置在终端1100的不同表面或呈折叠设计;在另一些实施例中,显示屏1105可以是柔性显示屏,设置在终端1100的弯曲表面上或折叠面上。甚至,显示屏1105还可以设置成非矩形的不规则图形,也即异形屏。显示屏1105可以采用LCD(Liquid Crystal Display,液晶显示屏)、OLED(Organic Light-Emitting Diode,有机发光二极管)等材质制备。
摄像头组件1106用于采集图像或视频。可选地,摄像头组件1106包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件1106还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路1107可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器1101进行处理,或者输入至射频电路1104以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端1100的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器1101或射频电路1104的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路1107还可以包括耳机插孔。
定位组件1108用于定位终端1100的当前地理位置,以实现导航或LBS(LocationBased Service,基于位置的服务)。定位组件1108可以是基于美国的GPS(GlobalPositioning System,全球定位系统)、中国的北斗系统、俄罗斯的格雷纳斯系统或欧盟的伽利略系统的定位组件。
电源1109用于为终端1100中的各个组件进行供电。电源1109可以是交流电、直流电、一次性电池或可充电电池。当电源1109包括可充电电池时,该可充电电池可以支持有线充电或无线充电。该可充电电池还可以用于支持快充技术。
在一些实施例中,终端1100还包括有一个或多个传感器1110。该一个或多个传感器1110包括但不限于:加速度传感器1111、陀螺仪传感器1112、压力传感器1113、指纹传感器1114、光学传感器1115以及接近传感器1116。
加速度传感器1111可以检测以终端1100建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器1111可以用于检测重力加速度在三个坐标轴上的分量。处理器1101可以根据加速度传感器1111采集的重力加速度信号,控制显示屏1105以横向视图或纵向视图进行用户界面的显示。加速度传感器1111还可以用于游戏或者用户的运动数据的采集。
陀螺仪传感器1112可以检测终端1100的机体方向及转动角度,陀螺仪传感器1112可以与加速度传感器1111协同采集用户对终端1100的3D动作。处理器1101根据陀螺仪传感器1112采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器1113可以设置在终端1100的侧边框和/或显示屏1105的下层。当压力传感器1113设置在终端1100的侧边框时,可以检测用户对终端1100的握持信号,由处理器1101根据压力传感器1113采集的握持信号进行左右手识别或快捷操作。当压力传感器1113设置在显示屏1105的下层时,由处理器1101根据用户对显示屏1105的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
指纹传感器1114用于采集用户的指纹,由处理器1101根据指纹传感器1114采集到的指纹识别用户的身份,或者,由指纹传感器1114根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器1101授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器1114可以被设置终端1100的正面、背面或侧面。当终端1100上设置有物理按键或厂商Logo时,指纹传感器1114可以与物理按键或厂商Logo集成在一起。
光学传感器1115用于采集环境光强度。在一个实施例中,处理器1101可以根据光学传感器1115采集的环境光强度,控制显示屏1105的显示亮度。具体地,当环境光强度较高时,调高显示屏1105的显示亮度;当环境光强度较低时,调低显示屏1105的显示亮度。在另一个实施例中,处理器1101还可以根据光学传感器1115采集的环境光强度,动态调整摄像头组件1106的拍摄参数。
接近传感器1116,也称距离传感器,通常设置在终端1100的前面板。接近传感器1116用于采集用户与终端1100的正面之间的距离。在一个实施例中,当接近传感器1116检测到用户与终端1100的正面之间的距离逐渐变小时,由处理器1101控制显示屏1105从亮屏状态切换为息屏状态;当接近传感器1116检测到用户与终端1100的正面之间的距离逐渐变大时,由处理器1101控制显示屏1105从息屏状态切换为亮屏状态。
本领域技术人员可以理解,图11中示出的结构并不构成对终端1100的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
在一些实施例中,还提供了一种计算机可读存储介质,该存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述实施例中分布式存储方法的步骤。例如,所述计算机可读存储介质可以是ROM、RAM、CD-ROM、磁带、软盘和光数据存储设备等。
值得注意的是,本申请实施例提到的计算机可读存储介质可以为非易失性存储介质,换句话说,可以是非瞬时性存储介质。
应当理解的是,实现上述实施例的全部或部分步骤可以通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。所述计算机指令可以存储在上述计算机可读存储介质中。
也即是,在一些实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述所述的分布式存储方法的步骤。
应当理解的是,本文提及的“至少一个”是指一个或多个,“多个”是指两个或两个以上。在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,为了便于清楚描述本申请实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
以上所述为本申请提供的实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (11)
1.一种分布式存储方法,其特征在于,所述方法包括:
从多个分片数据中获取待处理分片数据;
生成所述待处理分片数据的分片索引对象,所述分片索引对象包括所述待处理分片数据的分片摘要和所述待处理分片数据;
基于预生成的索引对象和当前生成的分片索引对象,边生成父索引对象,边异步地将所述预生成的索引对象和/或所述当前生成的分片索引对象发送至对应的存储节点,所述父索引对象包括父摘要,所述父索引对象指示所述当前生成的分片索引对象的存储节点;
其中,所述预生成的索引对象和/或所述当前生成的分片索引对象是指在生成所述父索引对象之后计算后续的索引对象所不依赖的索引对象;所述预生成的索引对象是指在所述当前生成的分片索引对象之前生成的索引对象。
2.如权利要求1所述的方法,其特征在于,所述预生成的索引对象为预生成的其他的分片索引对象,或预生成的其他的父索引对象。
3.如权利要求1所述的方法,其特征在于,所述预生成的索引对象存储于临时变量空间;
所述生成所述待处理分片数据的分片索引对象之后,所述基于预生成的索引对象和当前生成的分片索引对象,生成父索引对象之前,还包括:
如果所述待处理分片数据不包括所述多个分片数据中的第一个分片数据和最后一个分片数据,则从所述临时变量空间中获取所述预生成的索引对象,清空所述临时变量空间;
相应地,所述生成父索引对象之后,还包括:
将所述父索引对象存放到所述临时变量空间,继续执行所述从多个分片数据中获取待处理分片数据的步骤。
4.如权利要求1所述的方法,其特征在于,所述预生成的索引对象存储于临时变量空间;
所述生成所述待处理分片数据的分片索引对象之后,还包括:
如果所述待处理分片数据包括所述多个分片数据中的第一个分片数据,则将所述当前生成的分片索引对象存放到所述临时变量空间,继续执行所述从多个分片数据中读取待处理分片数据的步骤。
5.如权利要求1所述的方法,其特征在于,所述生成父索引对象之后,还包括:
如果所述待处理分片数据包括所述多个分片数据中的最后一个分片数据,则将所述父索引对象发送至对应的存储节点。
6.根据权利要求1-5任一所述的方法,其特征在于,所述分片索引对象包括数据字段和摘要字段,所述分片索引对象包括的数据字段用于存储对应的分片数据,所述分片索引对象包括的摘要字段用于存储相应分片数据的分片摘要;
所述父索引对象包括摘要字段和链接字段,所述父索引对象包括的摘要字段用于存储对应的父摘要,所述父索引对象包括的链接字段用于存储相应子索引对象的链接信息,所述链接信息包括摘要字段,所述链接信息包括的摘要字段用于存储相应子索引对象包括的摘要,所述子索引对象是指参与生成所述父索引对象的索引对象。
7.根据权利要求6所述的方法,其特征在于,所述链接信息还包括名称字段和数据量字段中的至少一个,所述链接信息包括的名称字段用于存储相应子索引对象对应的文件名称,所述链接信息包括的数据量字段用于存储相应子索引对象对应的文件大小。
8.一种分布式存储装置,其特征在于,所述装置包括:
获取模块,用于从多个分片数据中获取待处理分片数据;
第一处理模块,用于生成所述待处理分片数据的分片索引对象,所述分片索引对象包括所述待处理分片数据的分片摘要和所述待处理分片数据;
第二处理模块,用于基于预生成的索引对象和当前生成的分片索引对象,边生成父索引对象,边异步地将所述预生成的索引对象和/或所述当前生成的分片索引对象发送至对应的存储节点,所述父索引对象包括父摘要,所述父索引对象指示所述当前生成的分片索引对象的存储节点;
其中,所述预生成的索引对象和/或所述当前生成的分片索引对象是指在生成所述父索引对象之后计算后续的索引对象所不依赖的索引对象;所述预生成的索引对象是指在所述当前生成的分片索引对象之前生成的索引对象。
9.根据权利要求8所述的装置,其特征在于,所述预生成的索引对象为预生成的其他的分片索引对象,或预生成的其他的父索引对象;
其中,所述预生成的索引对象存储于临时变量空间;
所述生成所述待处理分片数据的分片索引对象之后,所述基于预生成的索引对象和当前生成的分片索引对象,生成父索引对象之前,还包括:
如果所述待处理分片数据不包括所述多个分片数据中的第一个分片数据和最后一个分片数据,则从所述临时变量空间中获取所述预生成的索引对象,清空所述临时变量空间;
相应地,所述生成父索引对象之后,还包括:
将所述父索引对象存放到所述临时变量空间,继续执行所述从多个分片数据中获取待处理分片数据的步骤;
其中,所述生成所述待处理分片数据的分片索引对象之后,还包括:
如果所述待处理分片数据包括所述多个分片数据中的第一个分片数据,则将所述当前生成的分片索引对象存放到所述临时变量空间,继续执行所述从多个分片数据中读取待处理分片数据的步骤;
其中,所述生成父索引对象之后,还包括:
如果所述待处理分片数据包括所述多个分片数据中的最后一个分片数据,则将所述父索引对象发送至对应的存储节点;
其中,所述分片索引对象包括数据字段和摘要字段,所述分片索引对象包括的数据字段用于存储对应的分片数据,所述分片索引对象包括的摘要字段用于存储相应分片数据的分片摘要;
所述父索引对象包括摘要字段和链接字段,所述父索引对象包括的摘要字段用于存储对应的父摘要,所述父索引对象包括的链接字段用于存储相应子索引对象的链接信息,所述链接信息包括摘要字段,所述链接信息包括的摘要字段用于存储相应子索引对象包括的摘要,所述子索引对象是指参与生成所述父索引对象的索引对象;
其中,所述链接信息还包括名称字段和数据量字段中的至少一个,所述链接信息包括的名称字段用于存储相应子索引对象对应的文件名称,所述链接信息包括的数据量字段用于存储相应子索引对象对应的文件大小。
10.一种计算机设备,其特征在于,所述计算机设备包括处理器和存储器;
所述存储器,用于存储计算机程序;
所述处理器,用于执行所述计算机程序实现权利要求1-7任一所述方法的步骤。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-7任一所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110603415.8A CN113282242B (zh) | 2021-05-31 | 2021-05-31 | 分布式存储方法、装置、设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110603415.8A CN113282242B (zh) | 2021-05-31 | 2021-05-31 | 分布式存储方法、装置、设备及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113282242A CN113282242A (zh) | 2021-08-20 |
CN113282242B true CN113282242B (zh) | 2022-09-20 |
Family
ID=77282710
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110603415.8A Active CN113282242B (zh) | 2021-05-31 | 2021-05-31 | 分布式存储方法、装置、设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113282242B (zh) |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10282440B2 (en) * | 2015-03-31 | 2019-05-07 | International Business Machines Corporation | Prioritizing rebuilding of encoded data slices |
CN103258036A (zh) * | 2013-05-15 | 2013-08-21 | 广州一呼百应网络技术有限公司 | 一种基于p2p的分布式实时搜索引擎 |
CN106095832B (zh) * | 2016-06-01 | 2020-02-18 | 东软集团股份有限公司 | 分布式并行数据处理方法以及装置 |
US10762050B2 (en) * | 2019-01-30 | 2020-09-01 | EMC IP Holding Company LLC | Distribution of global namespace to achieve performance and capacity linear scaling in cluster filesystems |
CN111428275B (zh) * | 2020-03-13 | 2021-03-26 | 华东师范大学 | 一种面向联盟链的服务不停机分片增加方法 |
CN111639080B (zh) * | 2020-06-01 | 2021-07-27 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置、节点设备及存储介质 |
-
2021
- 2021-05-31 CN CN202110603415.8A patent/CN113282242B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN113282242A (zh) | 2021-08-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108881030B (zh) | 灰度发布场景下的路由方法及装置 | |
CN110674022B (zh) | 行为数据获取方法、装置及存储介质 | |
CN108304265B (zh) | 内存管理方法、装置及存储介质 | |
CN110841285B (zh) | 界面元素的显示方法、装置、计算机设备及存储介质 | |
CN111090687B (zh) | 数据处理方法及装置、系统、计算机可读存储介质 | |
CN108717432B (zh) | 资源查询方法及装置 | |
KR20220074968A (ko) | 블록 프로세싱 방법 및 장치, 및 블록체인에 기초한 데이터 질의 방법 및 장치 | |
CN111694834A (zh) | 图数据的入库方法、装置、设备及可读存储介质 | |
CN112905328B (zh) | 任务处理方法、装置及计算机可读存储介质 | |
CN110673944B (zh) | 执行任务的方法和装置 | |
CN110569220A (zh) | 游戏资源文件的展示方法、装置、终端及存储介质 | |
CN110636144A (zh) | 数据下载的方法和装置 | |
CN110769050A (zh) | 数据处理方法、数据处理系统、计算机设备及存储介质 | |
CN110942046A (zh) | 图像检索方法、装置、设备及存储介质 | |
CN111813322A (zh) | 存储池的创建方法、装置、设备及存储介质 | |
CN111193604B (zh) | 虚拟网络功能链的部署方法、装置、设备及存储介质 | |
CN110971840B (zh) | 视频贴图方法及装置、计算机设备及存储介质 | |
CN110086814B (zh) | 一种数据获取的方法、装置及存储介质 | |
CN110597840A (zh) | 基于区块链的伴侣关系建立方法、装置、设备及存储介质 | |
CN113407741B (zh) | 素材管理方法、装置、电子设备及存储介质 | |
CN113282242B (zh) | 分布式存储方法、装置、设备及计算机可读存储介质 | |
CN113762054A (zh) | 图像识别方法、装置、设备及可读存储介质 | |
CN112990421A (zh) | 优化深度学习网络的运行过程的方法、装置及存储介质 | |
CN111104566A (zh) | 特征索引编码方法、装置、电子设备及存储介质 | |
CN111523876A (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 |