CN113726832B - 分布式存储系统的数据存储方法、装置、系统及设备 - Google Patents

分布式存储系统的数据存储方法、装置、系统及设备 Download PDF

Info

Publication number
CN113726832B
CN113726832B CN202010456598.0A CN202010456598A CN113726832B CN 113726832 B CN113726832 B CN 113726832B CN 202010456598 A CN202010456598 A CN 202010456598A CN 113726832 B CN113726832 B CN 113726832B
Authority
CN
China
Prior art keywords
node
file
fragments
data
uploading
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
Application number
CN202010456598.0A
Other languages
English (en)
Other versions
CN113726832A (zh
Inventor
胡祖颖
黄毅
孙承华
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Haikang Storage Technology Co ltd
Original Assignee
Hangzhou Haikang Storage Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hangzhou Haikang Storage Technology Co ltd filed Critical Hangzhou Haikang Storage Technology Co ltd
Priority to CN202010456598.0A priority Critical patent/CN113726832B/zh
Publication of CN113726832A publication Critical patent/CN113726832A/zh
Application granted granted Critical
Publication of CN113726832B publication Critical patent/CN113726832B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/06Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • H04L67/1074Peer-to-peer [P2P] networks for supporting data block transmission mechanisms
    • H04L67/1078Resource delivery mechanisms
    • H04L67/108Resource delivery mechanisms characterised by resources being split in blocks or fragments

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本申请公开了一种分布式存储系统的数据存储方法、装置、系统及设备,属于存储技术领域。所述方法包括:用户节点可以根据节点活跃度和节点距离中的至少一种,从分布式存储系统的多个设备节点中确定目标文件的文件分片的上传节点,然后将该文件分片上传至该上传节点,由该上传节点对文件分片进行存储。这样,用户节点所选择的上传节点可以为分布式存储系统中平均在线时长较长和/或与用户节点之间的哈希距离较短的设备节点,极大地降低了所选择的上传节点不可用的可能性,且数据传输效率较高,因此提高了数据存储效率。

Description

分布式存储系统的数据存储方法、装置、系统及设备
技术领域
本申请涉及存储技术领域,特别涉及一种分布式存储系统的数据存储方法、装置、系统及设备。
背景技术
目前互联网中的数据量逐渐增大,为了减少设备节点的存储负荷,可以通过分布式存储的方式对数据进行存储。通常,在对数据进行分布式存储时,用户节点可以从分布式存储系统的多个设备节点中随机选择设备节点作为上传节点,然后将数据上传至上传节点中。
然而,这种方法中,由于上传节点是从分布式存储系统的多个设备节点中随机选择的,因此该上传节点可能会存在不可用的情况,即用户节点可能无法将数据上传至该上传节点中。这种情况下,用户节点需要重新选择上传节点,导致数据存储效率较低。
发明内容
本申请提供了一种分布式存储系统的数据存储方法、装置、系统及设备,可以解决相关技术中存在的数据存储效率较低的问题。所述技术方案如下:
第一方面,提供了一种分布式存储系统的数据存储方法,所述方法包括:
从分布式存储系统包括的多个设备节点中确定文件分片的上传节点,所述上传节点是基于所述多个设备节点的节点计算因子确定得到;
其中,所述节点计算因子包括节点活跃度和节点距离中的至少一种,所述节点活跃度用于指示设备节点的平均在线时长,所述节点距离用于指示设备节点与用户节点之间的哈希距离,所述文件分片为目标文件的文件分片;
将所述文件分片上传至所述上传节点,由所述上传节点对所述文件分片进行存储。
在本申请一种可能的实现方式中,所述从分布式存储系统包括的多个设备节点中确定文件分片的上传节点,包括:
通过中继节点,从所述多个设备节点中获取按照节点评估值从大到小的顺序排序在前的N个设备节点,将所述N个设备节点作为所述文件分片的上传节点;其中,所述多个设备节点的节点评估值是由所述中继节点基于所述多个设备节点的节点计算因子确定的,所述N为正整数;或者,
对于所述文件分片中的第一分片,当需要上传所述第一分片时,基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值,从所述多个设备节点中选择节点评估值最大的设备节点,作为所述第一分片的上传节点;其中,所述第一分片为所述文件分片中的任一分片。
在本申请一种可能的实现方式中,所述基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值,包括:
对于所述多个设备节点中的第一设备节点,确定所述第一设备节点的节点计算因子中各个计算因子的权重,所述第一设备节点为所述多个设备节点中的任一个;
基于所述第一设备节点的节点计算因子中各个计算因子的权重,对所述第一设备节点的节点计算因子中所有计算因子进行加权求和,得到所述第一设备节点的节点评估值。
在本申请一种可能的实现方式中,所述将所述文件分片上传至所述上传节点,由所述上传节点对所述文件分片进行存储,包括:
基于所述文件分片,生成所述文件分片的分片索引对象,所述分片索引对象包括所述文件分片以及所述文件分片的索引;
将所述文件分片的分片索引对象上传至所述上传节点,由所述上传节点对所述分片索引对象进行存储。
在本申请一种可能的实现方式中,所述基于所述文件分片,生成所述文件分片的分片索引对象,包括:
对所述文件分片进行特征提取,得到所述文件分片的特征值,将所述文件分片的特征值作为所述文件分片的索引;
基于所述文件分片以及所述文件分片的索引,生成所述文件分片的分片索引对象。
在本申请一种可能的实现方式中,所述将所述文件分片的分片索引对象上传至所述上传节点之前,还包括:
基于所述文件分片中所有分片的索引,生成所述目标文件的索引;
基于所述目标文件的索引,以及所述文件分片中所有分片的索引,生成所述目标文件的文件索引对象,所述文件索引对象包括所述目标文件的索引以及所述文件分片中所有分片的索引;
将所述文件分片的分片索引对象上传至所述上传节点,包括:
将所述文件分片的分片索引对象,以及所述目标文件的文件索引对象上传至所述上传节点中,由所述上传节点进行存储。
在本申请一种可能的实现方式中,所述方法还包括:
确定所述目标文件的检索信息,所述目标文件的检索信息包括所述目标文件的文件标识以及所述目标文件的索引;
将所述目标文件的检索信息上传至中继节点中。
第二方面,提供了一种分布式存储系统的数据存储方法,所述方法包括:
确定分布式存储系统包括的多个设备节点的节点计算因子,所述节点计算因子包括节点活跃度和节点距离中的至少一种,所述节点活跃度用于指示设备节点的平均在线时长,所述节点距离用于指示设备节点与用户节点之间的哈希距离;
基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值。
在本申请一种可能的实现方式中,所述基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值之后,还包括:
当接收到用户节点的节点评估请求时,将所述多个设备节点的节点评估值发送给所述用户节点;或者,
当接收到用户节点的节点评估请求时,从所述多个设备节点中获取按照节点评估值从大到小的顺序排序在前的N个设备节点,将所述N个设备节点的节点标识发送给所述用户节点,所述N为正整数。
第三方面,提供了一种分布式存储系统的数据存储方法,所述方法包括:
对于目标文件的文件分片,基于分布式存储系统包括的多个设备节点的节点计算因子,从所述多个设备节点中确定所述文件分片的下载节点;
其中,所述节点计算因子包括节点活跃度和节点距离中的至少一种,所述节点活跃度用于指示设备节点的平均在线时长,所述节点距离用于指示设备节点与用户节点之间的哈希距离;
从所述文件分片的下载节点,下载所述目标文件的文件分片;
对下载的文件分片进行聚合,得到所述目标文件。
在本申请一种可能的实现方式中,所述基于分布式存储系统中多个设备节点的节点计算因子,从所述多个设备节点中确定所述文件分片的下载节点,包括:
对于所述文件分片中的第一分片,当需要下载所述第一分片时,基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值,所述第一分片为所述文件分片中的任一分片;
从所述多个设备节点中选择节点评估值最大的设备节点,作为所述第一分片的下载节点。
在本申请一种可能的实现方式中,所述基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值,包括:
对于所述多个设备节点中的第一设备节点,确定所述第一设备节点的节点计算因子中各个计算因子的权重,所述第一设备节点为所述多个设备节点中的任一个;
基于所述第一设备节点的节点计算因子中各个计算因子的权重,对所述第一设备节点的节点计算因子中的多个计算因子进行加权求和,得到所述第一设备节点的节点评估值。
在本申请一种可能的实现方式中,所述从所述文件分片的下载节点,下载所述目标文件的文件分片,包括:
获取第一分片的索引,所述第一分片为所述目标文件的文件分片中的任一分片;
若根据所述第一分片的索引,检测到所述第一分片的下载节点中存储有第一分片索引对象,则从所述第一分片索引对象中获取所述第一分片,所述第一分片索引对象包括所述第一分片以及所述第一分片的索引。
在本申请一种可能的实现方式中,所述获取第一分片的索引之前,还包括:
基于所述多个设备节点的节点计算因子,从所述多个设备节点中确定所述目标文件的文件索引对象的下载节点,所述文件索引对象包括所述目标文件的索引以及所述目标文件的文件分片中所有分片的索引;
从所述文件索引对象的下载节点,下载所述文件索引对象;
所述获取第一分片的索引,包括:
从所述文件索引对象中获取所述第一分片的索引。
在本申请一种可能的实现方式中,所述从所述文件索引对象的下载节点,下载所述文件索引对象之前,还包括:
根据所述目标文件的文件标识,从中继节点中获取所述目标文件的索引,所述中继节点存储有所述目标文件的检索信息,所述检索信息包括所述目标文件的文件标识以及所述目标文件的索引;
所述从所述文件索引对象的下载节点,下载所述文件索引对象,包括:
根据所述目标文件的索引,从所述文件索引对象的下载节点,下载所述文件索引对象。
第四方面,提供了一种分布式存储系统的数据存储装置,所述装置包括:
确定模块,用于从分布式存储系统包括的多个设备节点中确定文件分片的上传节点,所述上传节点是基于所述多个设备节点的节点计算因子确定得到;
其中,所述节点计算因子包括节点活跃度和节点距离中的至少一种,所述节点活跃度用于指示设备节点的平均在线时长,所述节点距离用于指示设备节点与用户节点之间的哈希距离,所述文件分片为目标文件的文件分片;
上传模块,用于将所述文件分片上传至所述上传节点,由所述上传节点对所述文件分片进行存储。
在本申请一种可能的实现方式中,所述确定模块用于:
通过中继节点,从所述多个设备节点中获取按照节点评估值从大到小的顺序排序在前的N个设备节点,将所述N个设备节点作为所述文件分片的上传节点;其中,所述多个设备节点的节点评估值是由所述中继节点基于所述多个设备节点的节点计算因子确定的,所述N为正整数;或者,
对于所述文件分片中的第一分片,当需要上传所述第一分片时,基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值,从所述多个设备节点中选择节点评估值最大的设备节点,作为所述第一分片的上传节点;其中,所述第一分片为所述文件分片中的任一分片。
在本申请一种可能的实现方式中,所述确定模块用于:
对于所述多个设备节点中的第一设备节点,确定所述第一设备节点的节点计算因子中各个计算因子的权重,所述第一设备节点为所述多个设备节点中的任一个;
基于所述第一设备节点的节点计算因子中各个计算因子的权重,对所述第一设备节点的节点计算因子中所有计算因子进行加权求和,得到所述第一设备节点的节点评估值。
在本申请一种可能的实现方式中,所述上传模块用于:
基于所述文件分片,生成所述文件分片的分片索引对象,所述分片索引对象包括所述文件分片以及所述文件分片的索引;
将所述文件分片的分片索引对象上传至所述上传节点,由所述上传节点对所述分片索引对象进行存储。
在本申请一种可能的实现方式中,所述上传模块用于:
对所述文件分片进行特征提取,得到所述文件分片的特征值,将所述文件分片的特征值作为所述文件分片的索引;
基于所述文件分片以及所述文件分片的索引,生成所述文件分片的分片索引对象。
在本申请一种可能的实现方式中,所述上传模块还用于:
基于所述文件分片中所有分片的索引,生成所述目标文件的索引;
基于所述目标文件的索引,以及所述文件分片中所有分片的索引,生成所述目标文件的文件索引对象,所述文件索引对象包括所述目标文件的索引以及所述文件分片中所有分片的索引;
将所述文件分片的分片索引对象上传至所述上传节点,包括:
将所述文件分片的分片索引对象,以及所述目标文件的文件索引对象上传至所述上传节点中,由所述上传节点进行存储。
在本申请一种可能的实现方式中,
所述确定模块,用于确定所述目标文件的检索信息,所述目标文件的检索信息包括所述目标文件的文件标识以及所述目标文件的索引;
所述上传模块,用于将所述目标文件的检索信息上传至中继节点中。
第五方面,提供了一种分布式存储系统的数据存储装置,所述装置包括:
第一确定模块,用于确定分布式存储系统包括的多个设备节点的节点计算因子,所述节点计算因子包括节点活跃度和节点距离中的至少一种,所述节点活跃度用于指示设备节点的平均在线时长,所述节点距离用于指示设备节点与用户节点之间的哈希距离;
第二确定模块,用于基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值。
在本申请一种可能的实现方式中,所述第二确定模块还用于:
当接收到用户节点的节点评估请求时,将所述多个设备节点的节点评估值发送给所述用户节点;或者,
当接收到用户节点的节点评估请求时,从所述多个设备节点中获取按照节点评估值从大到小的顺序排序在前的N个设备节点,将所述N个设备节点的节点标识发送给所述用户节点,所述N为正整数。
第六方面,提供了一种分布式存储系统的数据存储装置,所述装置包括:
确定模块,用于对于目标文件的文件分片,基于分布式存储系统包括的多个设备节点的节点计算因子,从所述多个设备节点中确定所述文件分片的下载节点;
其中,所述节点计算因子包括节点活跃度和节点距离中的至少一种,所述节点活跃度用于指示设备节点的平均在线时长,所述节点距离用于指示设备节点与用户节点之间的哈希距离;
下载模块,用于从所述文件分片的下载节点,下载所述目标文件的文件分片;
聚合模块,用于对下载的文件分片进行聚合,得到所述目标文件。
在本申请一种可能的实现方式中,所述确定模块用于:
对于所述文件分片中的第一分片,当需要下载所述第一分片时,基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值,所述第一分片为所述文件分片中的任一分片;
从所述多个设备节点中选择节点评估值最大的设备节点,作为所述第一分片的下载节点。
在本申请一种可能的实现方式中,所述确定模块用于:
对于所述多个设备节点中的第一设备节点,确定所述第一设备节点的节点计算因子中各个计算因子的权重,所述第一设备节点为所述多个设备节点中的任一个;
基于所述第一设备节点的节点计算因子中各个计算因子的权重,对所述第一设备节点的节点计算因子中的多个计算因子进行加权求和,得到所述第一设备节点的节点评估值。
在本申请一种可能的实现方式中,所述下载模块用于:
获取第一分片的索引,所述第一分片为所述目标文件的文件分片中的任一分片;
若根据所述第一分片的索引,检测到所述第一分片的下载节点中存储有第一分片索引对象,则从所述第一分片索引对象中获取所述第一分片,所述第一分片索引对象包括所述第一分片以及所述第一分片的索引。
在本申请一种可能的实现方式中,所述下载模块用于:
基于所述多个设备节点的节点计算因子,从所述多个设备节点中确定所述目标文件的文件索引对象的下载节点,所述文件索引对象包括所述目标文件的索引以及所述目标文件的文件分片中所有分片的索引;
从所述文件索引对象的下载节点,下载所述文件索引对象;
所述获取第一分片的索引,包括:
从所述文件索引对象中获取所述第一分片的索引。
在本申请一种可能的实现方式中,所述下载模块还用于:
根据所述目标文件的文件标识,从中继节点中获取所述目标文件的索引,所述中继节点存储有所述目标文件的检索信息,所述检索信息包括所述目标文件的文件标识以及所述目标文件的索引;
所述从所述文件索引对象的下载节点,下载所述文件索引对象,包括:
根据所述目标文件的索引,从所述文件索引对象的下载节点,下载所述文件索引对象。
第七方面,提供了一种分布式存储系统,所述系统包括用户节点和用于存储数据的多个设备节点;
所述用户节点,用于从所述多个设备节点中确定目标文件的文件分片的传输节点,所述传输节点是基于所述多个设备节点的节点计算因子确定得到,所述节点计算因子包括节点活跃度和节点距离中的至少一种,所述节点活跃度用于指示设备节点的平均在线时长,所述节点距离用于指示设备节点与所述用户节点之间的距离;
所述用户节点,用于通过所述传输节点,对所述文件分片进行传输。
在本申请一种可能的实现方式中,所述用户节点,用于基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值,基于所述多个设备节点的节点评估值,从所述多个设备节点中确定所述文件分片的传输节点。
在本申请一种可能的实现方式中,所述系统还包括中继节点;
所述中继节点,用于基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值;
所述用户节点,用于通过所述中继节点,从所述多个设备节点中获取按照节点评估值从大到小的顺序排序在前的N个设备节点,作为所述文件分片的传输节点,所述N为正整数。
在本申请一种可能的实现方式中,所述用户节点,用于若所述传输节点为上传节点,则将所述文件分片上传至所述上传节点,由所述上传节点对所述文件分片进行存储;若所述传输节点为下载节点,则从所述文件分片的下载节点,下载所述目标文件的文件分片,对下载的文件分片进行聚合,得到所述目标文件。
第八方面,提供了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为实现上述第一方面所述的分布式存储系统的数据存储方法,或者,所述处理器被配置为实现上述第二方面所述的分布式存储系统的数据存储方法,或者,所述处理器被配置为实现上述第三方面所述的分布式存储系统的数据存储方法。
第九方面,提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,所述指令被处理器执行时实现上述第一方面所述的分布式存储系统的数据存储方法,或者,所述指令被处理器执行时实现上述第二方面所述的分布式存储系统的数据存储方法,或者,所述指令被处理器执行时实现上述第三方面所述的分布式存储系统的数据存储方法。
第十方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面所述的分布式存储系统的数据存储方法,或者,使得计算机执行上述第二方面所述的分布式存储系统的数据存储方法,或者,使得计算机执行上述第三方面所述的分布式存储系统的数据存储方法。
本申请提供的技术方案至少可以带来以下有益效果:
本申请实施例中,用户节点可以根据节点活跃度和节点距离中的至少一种,从分布式存储系统的多个设备节点中为目标文件的文件分片选择上传节点,使得所选择的上传节点的平均在线时长较长和/或与用户节点之间的哈希距离能够满足一定的条件,如此,可以极大地降低所选择的上传节点不可用的可能性,保证数据传输效率,进而提高了数据存储效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种分布式存储系统的示意图;
图2是本申请实施例提供的一种分布式存储系统的数据存储方法的流程图;
图3是本申请实施例提供的另一种分布式存储系统的数据存储方法的流程图;
图4是本申请实施例提供的一种冗余分片处理的示意图;
图5是本申请实施例提供的一种索引的示意图;
图6是本申请实施例提供的一种用户节点向上传节点上传分片索引对象和文件索引对象的方法流程图;
图7是本申请实施例提供的一种用户节点向中继节点上传文件检索信息的方法流程图;
图8是本申请实施例提供的一种上传节点向中继节点发送上传节点地址的方法流程图;
图9是本申请实施例提供的又一种分布式存储系统的数据存储方法的流程图;
图10是本申请实施例提供的一种用户节点下载目标文件的方法流程图;
图11是本申请实施例提供的一种分布式存储系统的数据存储装置的结构示意图;
图12是本申请实施例提供的另一种分布式存储系统的数据存储装置的结构示意图;
图13是本申请实施例提供的又一种分布式存储系统的数据存储装置的结构示意图;
图14是本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在对本申请实施例提供的分布式存储系统的数据存储方法进行详细的解释说明之前,先对本申请实施例涉及的实施环境进行介绍。
图1是本申请实施例涉及的一种分布式存储系统的示意图,该分布式存储系统包括用户节点110和用于存储数据的多个设备节点120,用户节点110和设备节点120之间可以通过有线网络或无线网络进行连接。
用户节点110,用于从多个设备节点120中确定目标文件的文件分片的传输节点,然后通过该传输节点,对文件分片进行传输。
其中,传输节点是基于这多个设备节点120的节点计算因子确定得到,节点计算因子可以包括节点活跃度和节点距离中的至少一种。节点活跃度用于指示设备节点的平均在线时长,节点距离用于指示设备节点与用户节点之间的距离。另外,节点计算因子还可以包括节点带宽和节点响应速度等其他计算因子。
作为一个示例,用户节点110,用于基于多个设备节点120的节点计算因子,确定多个设备节点120的节点评估值,然后基于多个设备节点120的节点评估值,从多个设备节点120中确定文件分片的传输节点。
作为另一示例,分布式存储系统中还可以包括中继节点130。
其中,中继节点130用于基于多个设备节点120的节点计算因子,确定多个设备节点120的节点评估值。用户节点110,用于通过中继节点130,从多个设备节点120中获取按照节点评估值从大到小的顺序排序在前的N个设备节点120,作为文件分片的传输节点,N为正整数。
需要说明的是,传输节点可以为上传节点,也可以为下载节点。若传输节点为上传节点,则用户节点110可以将文件分片上传至上传节点,由上传节点对文件分片进行存储。若传输节点为下载节点,则用户节点110可以从文件分片的下载节点,下载目标文件的文件分片,对下载的文件分片进行聚合,得到目标文件。
示例性的,用户节点110可以为电子设备,该电子设备可以为PC(PersonalComputer,个人计算机)、手机、智能手机、PDA(Personal Digital Assistant,个人数字助手)、可穿戴设备、PPC(Pocket PC,掌上电脑)、平板电脑、智能车机、智能电视、智能音箱等,本申请实施例对此不做限定。设备节点120和中继节点130可以为终端、服务器、NAS(Network Attached Storage,网络存储设备)等。
在介绍完本申请实施例涉及的实施环境后,接下来将结合附图对本申请实施例提供的分布式存储系统的数据存储方法进行详细介绍。
图2是本申请实施例提供的一种分布式存储系统的数据存储方法的流程图,该方法可以应用于图1所示的实施环境中。请参考图2,该方法包括如下步骤:
步骤201:用户节点从分布式存储系统包括的多个设备节点中确定文件分片的上传节点,上传节点是基于多个设备节点的节点计算因子确定得到。
其中,节点计算因子为能够指示设备节点作为上传节点的可用性的计算因子。比如,节点计算因子包括节点活跃度和节点距离中的至少一种,节点活跃度用于指示设备节点的平均在线时长,节点距离用于指示设备节点与用户节点之间的哈希距离,文件分片为目标文件的文件分片。
需要说明的是,将节点活跃度作为选择上传节点的一个计算因子,可以影响所选择的上传节点的平均在线时长能够满足一定条件的设备节点,保证上传节点的可用性。比如,在基于多个设备节点的节点计算因子确定上传节点时,可以从多个设备节点中选择节点活跃度大于节点活跃度阈值的设备节点作为上传节点,使得所选择的上传节点的平均在线时长较长,可用性较高。
另外,将节点距离作为选择上传节点的一个计算因子,可以影响所选择的上传节点与用户节点之间的哈希距离能够满足一定条件,保证上传节点的数据传输速率。比如,在基于多个设备节点的节点计算因子确定上传节点时,可以从多个设备节点中选择节点距离较小于节点距离阈值的设备节点作为上传节点,使得所选择的上传节点与用户节点之间的哈希距离较短,数据传输速率较快,可用性较高。
再者,若将节点活跃度和节点距离同时作为选择上传节点的计算因子,则可以影响所选择的上传节点的平均在线时长和与用户节点之间的哈希距离的综合指标能够满足一定条件,进而保证所选择的上传节点的可用性,提高数据存储效率。比如,在基于多个设备节点的节点计算因子确定上传节点时,可以从多个设备节点中选择节点活跃度大于节点活跃度阈值且节点距离较小于节点距离阈值的设备节点作为上传节点,或者选择基于节点活跃度和节点距离阈值确定的节点评估值大于评估值阈值的设备节点作为上传节点。
作为一个示例,节点距离可以基于用户节点标识和设备节点标识确定,该用户节点标识和设备节点标识均可以用二进制字符串进行表示。比如,可以对用户节点标识对应的二进制字符串和设备节点标识对应的二进制字符串进行异或处理,再对异或处理得到的二进制字符串进行整型处理,得到目标整型数值,将该目标整型数值确定为节点距离。
另外,节点计算因子还可以包括节点带宽或节点响应速度等其他计算因子。节点带宽用于指示单位时间内设备节点传输的最大数据量。节点响应速度用于指示设备节点与用户节点之间的数据传输时延。
需要说明的是,将节点带宽作为选择上传节点的一个计算因子,可以影响所选择的上传节点的带宽能够满足一定条件。比如,可以选择节点带宽大于节点带宽阈值的设备节点作为上传节点,使得所选择的上传节点的带宽较大,数据传输速率较快。
同理,将节点响应速度作为选择上传节点的一个计算因子,可以影响所选择的上传节点为响应速度满足一定条件。比如,可以选择节点响应速度大于响应速度阈值的设备节点作为上传节点,使得所选择的上传节点的数据传输时延较短,数据传输速率较快,可用性较高。
作为一个示例,节点计算因子可以包括节点活跃度、节点距离、节点带宽和节点响应速度,如此,可以在基于多个设备节点的节点计算因子选择上传节点时,影响所选择的上传节点的节点活跃度、节点距离、节点带宽和节点响应速度的综合指标能够满足一定条件,使得所选择的上传节点能够在节点活跃度、节点距离、节点带宽和节点响应速度之间取得一定的平衡,进而保证所选择的上传节点的可用性。
其中,目标文件可以为用户上传的文件、用户节点中存储的文件、云端的文件等等,本实施例对此不做限定。
本申请实施例中,可以对目标文件进行分片处理,得到目标文件的文件分片,然后将目标文件的文件分片分散存储至分布式存储系统的不同设备节点中,如此,可以避免存储目标文件的设备节点出现异常导致目标文件存储异常,进而导致目标文件不可用的情况,提高了数据存储的可靠性。示例性的,如图1所示,分布式存储系统可以包括设备节点、用户节点和中继节点。
作为一个示例,可以对目标文件进行冗余分片处理,得到目标文件的文件分片,该文件分片包括目标文件的数据分片和目标文件的冗余分片。
其中,冗余分片可以为数据分片的备份,这种情况下,冗余分片可以与数据分片相同。当然,冗余分片也可以为在数据分片的基础上进行编码得到的,这种情况下,冗余分片可以与数据分片不同,本实施例对此不做限定。
作为一种示例,在获取到目标文件的情况下,用户节点可以基于冗余分片算法对目标文件进行冗余分片处理,以得到数据分片和冗余分片。
示例性的,冗余分片算法可以为纠删算法,用户节点可以在本地磁盘中存储的所有文件中选择目标文件,进而用户节点可以基于纠删码对该目标文件进行冗余分片处理,以得到数据分片和冗余分片。
其中,纠删算法指的是基于纠删码对目标文件进行分片处理,以得到k个数据分片及m个冗余分片的算法。需要说明的是,对于通过纠删算法分片得到的k+m个文件分片,利用其中任意k个文件分片,即可聚合得到目标文件。也就是,在该种方法中,即便存在m个文件分片失效或丢失,用户节点仍然可以得到目标文件,如此,提高了数据存储的可靠性。
示例性的,用户节点可以直接对目标文件进行冗余分片处理,以得到文件分片。或者,用户节点还可以先对目标文件进行分块处理,得到文件分块,再对文件分块进行冗余分片处理,得到文件分片,本实施例对此不做限定。
作为一种示例,在得到文件分片后,还可以对该文件分片进行备份处理,以进一步提高数据存储的可靠性。
需要说明的是,用户节点从分布式存储系统包括的多个设备节点中确定文件分片的上传节点的实现方式可以包括以下两种:
第一种实现方式:由用户节点根据节点活跃度和节点距离中的至少一种,从分布式存储系统包括的多个设备节点中确定文件分片的上传节点。
示例性的,用户节点可以从多个设备节点中选择节点活跃度最高的设备节点作为上传节点,或者,用户节点可以从多个设备节点中选择节点距离最小的设备节点作为上传节点,或者,用户节点可以从多个设备节点中选择节点活跃度最高且节点距离最小的设备节点作为上传节点。
作为一个示例,对于文件分片中的第一分片,当用户节点需要上传第一分片时,可以基于多个设备节点的节点计算因子,确定多个设备节点的节点评估值,从多个设备节点中选择节点评估值最大的设备节点,作为第一分片的上传节点。其中,第一分片为文件分片中的任一分片。
其中,节点评估值可以用于指示设备节点作为上传节点的可能性,设备节点的节点评估值越大,说明设备节点越适合作为上传节点,设备节点的节点评估值越小,说明设备节点越不适合作为上传节点。
示例性的,节点评估值可以基于节点活跃度和节点距离中的至少一种计算得到。另外,节点计算因子还可以包括节点带宽和节点响应速度,比如,节点评估值可以基于节点活跃度、节点距离、节点带宽和节点响应速度计算得到。
也就是,在用户节点需要上传第一分片时,用户节点可以根据节点计算因子,确定多个设备节点中每个设备节点的节点评估值,由于设备节点的节点评估值越高,说明该设备节点越适合用于存储文件分片,因此用户节点可以在多个设备节点中选择节点评估值最大的设备节点作为第一分片的上传节点。
比如,若节点评估值为基于节点活跃度计算得到的,在用户节点需要上传第一分片的情况下,用户节点可以确定多个设备节点中每个设备节点的节点活跃度,从而选择节点活跃度最高的设备节点作为第一分片的上传节点。
作为一种示例,用户节点基于多个设备节点的节点计算因子,确定多个设备节点的节点评估值的实现方式可以为:对于多个设备节点中的第一设备节点,确定第一设备节点的节点计算因子中各个计算因子的权重;基于第一设备节点的节点计算因子中各个计算因子的权重,对第一设备节点的节点计算因子中所有计算因子进行加权求和,得到第一设备节点的节点评估值。其中,第一设备节点为多个设备节点中的任一个。
其中,各个计算因子的权重可以根据实际情况进行分配,本实施例对此不做限定。也就是说,在确定各个计算因子的权重的情况下,对于多个设备节点中的第一设备节点,用户节点可以根据该第一设备节点的节点计算因子以及各个计算因子的权重,确定第一设备节点的节点评估值,即确定该第一设备节点是否适合作为上传节点。
譬如,若节点计算因子包括节点活跃度、节点距离、节点带宽和节点响应速度,可以为节点活跃度分配权重0.1,为节点距离分配权重0.2,为节点下载带宽分配权重0.3,为节点响应速度分配权重0.4。如此,可以确定节点评估值=节点活跃度*权重0.1+节点距离*权重0.2+节点带宽*权重0.3+节点响应速度*权重0.4。
第二种实现方式:通过中继节点,从多个设备节点中确定文件分片的上传节点。
作为一个示例,用户节点可以通过中继节点,从多个设备节点中获取按照节点评估值从大到小的顺序排序在前的N个设备节点,将N个设备节点作为文件分片的上传节点。其中,多个设备节点的节点评估值是由中继节点基于多个设备节点的节点计算因子确定的,N为正整数。
也就是,在第二种实现方式中,设备节点的节点评估值不是由用户节点确定,而是由中继节点确定的。若用户节点需要上传文件分片,用户节点可以直接通过中继节点确定节点评估值最高的N个设备节点作为文件分片的上传节点,而不需要由用户节点对设备节点进行评估,如此,可以节省用户节点的计算资源,提高用户节点的运行效率。
其中,中继节点确定设备节点的节点评估值的实现方式可以为:确定分布式存储系统包括的多个设备节点的节点计算因子,基于多个设备节点的节点计算因子,确定多个设备节点的节点评估值。
需要说明的是,中继节点可以实时获取多个设备节点的节点计算因子,基于多个设备节点的节点计算因子对多个设备节点进行评估,也可以周期性地获取多个设备节点的节点计算因子,基于多个设备节点的节点计算因子对多个设备节点进行评估,评估时机可以根据实际需要进行设置,本申请实施例对此不作限定。
作为一种示例,中继节点基于多个设备节点的节点计算因子,确定多个设备节点的节点评估值之后,可以在接收到用户节点的节点评估请求时,将多个设备节点的节点评估值发送给用户节点,以便用户节点基于多个设备节点的节点评估值,从多个设备节点中选择按照节点评估值从大到小的顺序排序在前的N个设备节点作为上传节点。
或者,中继节点也可以在接收到用户节点的节点评估请求时,从多个设备节点中获取按照节点评估值从大到小的顺序排序在前的N个设备节点,将N个设备节点的节点标识发送给用户节点,以便用户节点基于这N个设备节点的节点标识,直接将这N个设备作为上传节点。
其中,节点标识可以包括编码格式、版本号、数据格式以及哈希信息。编码格式指的是对该节点标识进行编码的格式,版本号指的是该数据存储系统的版本号,数据格式指的是数据流中传输的数据的格式。哈希信息包括哈希函数、哈希值的长度以及哈希值。
步骤202:用户节点将文件分片上传至上传节点,由上传节点对文件分片进行存储。
也即是,用户节点可以将所有文件分片分散的上传至不同的上传节点中,如此,可以由多个上传节点共同存储目标文件。
作为一种示例,用户节点将文件分片上传至上传节点,由上传节点对文件分片进行存储的实现方式可以为:基于文件分片,生成文件分片的分片索引对象,分片索引对象包括文件分片以及文件分片的索引。将文件分片的分片索引对象上传至上传节点,由上传节点对分片索引对象进行存储。
其中,索引指的是可以用于对数据查询的一种存储结构,譬如,用户节点可以基于文件分片,生成文件分片的索引。如此,可以通过文件分片的索引对文件分片进行查询。通常,索引可以用特征值来表示,譬如,文件分片的索引可以为文件分片的特征值。示例性的,特征值可以为哈希值、特征向量等,本实施例对此不做限定。
也就是,用户节点可以对文件分片进行处理,得到文件分片的索引,进而用户节点可以基于文件分片和文件分片的索引,得到分片索引对象。
作为一个示例,在确定上传节点的情况下,用户节点可以向该上传节点发送连接请求,进而与该上传节点建立连接。在与上传节点建立连接的情况下,用户节点可以对分片索引对象进行序列化处理,得到分片索引对象数据,如此,可以将该分片索引对象数据发送给上传节点。
其中,序列化处理指的是将对象转换为可以传输的形式的处理过程。也就是,通过序列化处理,可以将对象转换为对象数据,如此,可以通过数据流对该对象数据进行传输。
作为一种示例,用户节点将文件分片的分片索引对象上传至上传节点之前,还可以进行如下操作:基于文件分片中所有分片的索引,生成目标文件的索引。基于目标文件的索引,以及文件分片中所有分片的索引,生成目标文件的文件索引对象,文件索引对象包括目标文件的索引以及文件分片中所有分片的索引。将文件分片的分片索引对象,以及目标文件的文件索引对象上传至上传节点中,由上传节点进行存储。
作为一种示例,用户节点还可以进行如下操作:确定目标文件的检索信息,目标文件的检索信息包括目标文件的文件标识以及目标文件的索引。将目标文件的检索信息上传至中继节点中。
其中,目标文件的文件标识和目标文件的索引是一一对应的关系,当确定目标文件的文件标识时,可以根据该目标文件的文件标识对该目标文件的索引进行查询。
示例性的,用户节点可以基于目标文件的文件标识和目标文件的索引,生成目标文件的检索信息。在确定目标文件的检索信息的情况下,用户节点可以向中继节点发送连接请求,进而与该中继节点建立连接。在与中继节点建立连接的情况下,用户节点可以对目标文件的检索信息进行序列化处理,得到目标文件的检索信息数据,将目标文件的检索信息数据发送给中继节点。
作为一种示例,上传节点可以通过如下几个步骤接收用户节点发送的文件分片和目标文件的文件索引对象,对文件分片和目标文件的文件索引对象进行分布式存储:
1)上传节点接收用户节点发送的分片索引对象,分片索引对象包括文件分片以及文件分片的索引。
其中,文件分片的索引可以用于对文件分片进行查询。
也就是,上传节点可以接收用户节点发送的分片索引对象数据,进而可以对该分片索引对象数据进行反序列化处理,得到分片索引对象。
作为一种示例,在接收用户节点发送的分片索引对象之前,上传节点可以与中继节点建立连接。也就是,上传节点可以向中继节点发送连接请求,若中继节点确定该连接请求的消息类型属于第一目标消息类型,则该上传节点可以与中继节点建立连接。在与中继节点建立连接的情况下,上传节点与中继节点之间可以进行数据传输。
需要说明的是,在上传节点与中继节点建立连接之后,中继节点可以周期性地探测与其建立连接的上传节点的活动状态,以确定上传节点是否在线。
示例性的,在上传节点与中继节点建立连接之后,中继节点可以周期性地向与其建立连接的上传节点发送确认连接信息,若在设定时间段内,中继节点没有接收到上传节点发送的响应信息,则可以确定该上传节点已经下线。
作为一种示例,在上传节点与中继节点建立连接之后,上传节点可以向中继节点发送上传节点地址,该上传节点地址可以包括上传节点标识和上传节点IP(InternetProtocol,网络协议)。
作为一种示例,在接收用户节点发送的分片索引对象之前,上传节点可以与用户节点建立连接。也就是,上传节点可以接收用户节点发送的连接请求,若该连接请求的消息类型为第二目标消息类型,则与该用户节点建立连接。在与用户节点建立连接的情况下,上传节点与用户节点之间可以进行数据传输。
2)对分片索引对象进行存储。
也就是,上传节点可以将分片索引对象存储至上传节点的数据库中。示例性的,上传节点的数据库可以为LevelDB键值对数据库。
作为一种示例,对分片索引对象进行存储的实现方式可以为:若上传节点存储的分片索引列表中不存在文件分片的索引,则将分片索引对象存储至上传节点的数据库中。
也就是,在接收到分片索引对象的情况下,上传节点可以在存储的分片索引列表中对该文件分片的索引进行查询,以确定上传节点存储的分片索引列表中是否存在文件分片的索引。
当上传节点存储的分片索引列表中存在文件分片的索引时,可以说明上传节点的数据库中存储有文件分片,在该种情况下,上传节点可以不对该分片索引对象进行存储。
当上传节点存储的分片索引列表中不存在文件分片的索引时,可以说明上传节点的数据库中没有存储文件分片,在该种情况下,上传节点可以将该分片索引对象存储至上传节点的数据库中。
在一种可能的实现方式中,上传节点还可以进行如下操作:接收用户节点发送的目标文件的文件索引对象,目标文件的文件索引对象包括目标文件的索引以及文件分片中所有分片的索引。对目标文件的文件索引对象进行存储。
也就是,上传节点可以接收用户节点发送的目标文件的文件索引对象数据,进而可以对该目标文件的文件索引对象数据进行反序列化处理,得到目标文件的文件索引对象。如此,上传节点可以将目标文件的文件索引对象存储至上传节点的数据库中。
作为一种示例,对目标文件的文件索引对象进行存储的实现方式可以为:若上传节点存储的文件索引列表中不存在目标文件的索引,则将目标文件的文件索引对象存储至上传节点的数据库中。
也就是,在接收到目标文件的文件索引对象的情况下,上传节点可以在存储的文件索引列表中对目标文件的索引进行查询,以确定上传节点存储的文件索引列表中是否存在目标文件的索引。
当上传节点存储的文件索引列表中存在目标文件的索引时,可以说明上传节点的数据库中存储有文件分片中所有分片的索引,在该种情况下,上传节点可以不对该目标文件的文件索引对象进行存储。
当上传节点存储的文件索引列表中不存在目标文件的索引时,可以说明上传节点的数据库中没有存储文件分片中所有分片的索引,在该种情况下,上传节点可以将该目标文件的文件索引对象存储至上传节点的数据库中。
需要说明的是,本申请实施例仅是以基于分布式存储系统中各个设备节点的节点计算因子确定上传节点为例进行说明,而在其他实施例中,也可以从多个设备节点中随机确定上传节点,或者采用其他方式确定上传节点,本申请实施例对此不作限定。
在本申请实施例中,用户节点可以根据节点活跃度和节点距离中的至少一种,从分布式存储系统的多个设备节点中为目标文件的文件分片选择上传节点,使得所选择的上传节点的平均在线时长较长和/或与用户节点之间的哈希距离能够满足一定的条件,如此,可以极大地降低所选择的上传节点不可用的可能性,保证数据传输效率,进而提高了数据存储效率。
图3是本申请实施例提供的另一种分布式存储系统的数据存储方法的流程图,该方法可以应用于图1所示的实施环境中。请参考图3,该方法包括如下步骤:
步骤301:用户节点进行初始化。
在用户节点未启动的情况下,可以先启动用户节点,再进行初始化。另外,若用户节点已进行了初始化,则无需再进行初始化。
步骤302:用户节点查找目标文件。
在进行数据上传之前,用户节点可以先查找待上传的目标文件。比如,可以从已存储的文件列表中查找目标文件。
步骤303:用户节点确定是否查找到目标文件。
若查找到目标文件,则执行步骤304,对目标文件进行后续处理,若未查找到目标文件,则结束处理。
本申请实施例中,查找到目标文件之后,可以先对目标文件进行文件分块,再对文件分块进行文件分片。当然,在其他实施例中,也可以直接对目标文件进行文件分片,本申请实施例对此不做限定。
步骤304:用户节点对目标文件进行分块处理,得到文件分块。
作为一个示例,可以基于目标文件的数据大小和分块数据阈值,对目标文件进行分块处理,得到文件分块。
其中,分块数据阈值是指预先设置的一个文件分块的最大数据大小,可以根据实际情况进行设置,本实施例对此不做限定。
也就是,如图4所示,用户节点可以确定目标文件的数据大小,进而可以基于所确定的目标文件的数据大小,以及设置的分块数据阈值,对目标文件进行分块处理,得到文件分块。需要说明的是,经分块处理得到的文件分块的数量可以为一个,也可以为多个,本实施例对此不做限定。还需要说明的是,每个文件分块的数据大小小于或等于分块数据阈值。
作为一种示例,若目标文件的数据大小大于分块数据阈值,则可以对该目标文件进行分块处理,得到多个文件分块。若目标文件的数据大小小于或等于分块数据阈值,则可以将该目标文件确定为文件分块,在该种情况下,用户节点可以直接对目标文件进行冗余分片处理,而不需要对目标文件进行分块处理。
譬如,可以设置分块数据阈值为400M,若目标文件的数据大小为700M,由于700M>400M,所以可以对该目标文件进行分块处理,经分块处理可以得到一个数据大小为400M的文件分块,以及一个数据大小为300M的文件分块。若目标文件的数据大小为300M,由于300M<400M,所以可以将该目标文件确定为文件分块。
步骤305:用户节点对文件分块进行冗余分片处理,得到文件分片。
本申请实施例中,可以采用冗余分片算法对文件分块进行冗余分片处理,该冗余分片算法可以为纠删算法等。
作为一个示例,对文件分块进行冗余分片处理的包括如下步骤:
1)基于文件分块的数据大小,确定第一数量和第二数量,第一数量为文件分块待划分的数据分片的数量,第二数量为文件分块待划分的冗余分片的数量。
也就是,用户节点可以基于文件分块的数据大小,确定将该文件分块划分为多少个数据分片,以及确定将该文件分块划分为多少个冗余分片。
作为一种示例,基于文件分块的数据大小,确定第一数量和第二数量的实现方式可以为:若文件分块的数据大小小于或等于分片数据阈值,则确定第一数量和第二数量均为N,N为正整数。若文件分块的数据大小大于分片数据阈值,则基于文件分块的数据大小与分片数据阈值之间的比值,确定第一数量,基于第一数量和预设冗余度,确定第二数量。
其中,分片数据阈值是指预设设置的一个数据分片的最大数据大小,分片数据阈值和N的取值均可以根据实际情况进行设置,本实施例对此不做限定。比如,N可以取值为1或2等。
其中,预设冗余度为冗余分片的数量与数据分片的数量之间的比值,如此,预设冗余度可以用于指示所有文件分片中冗余分片所占的比例。需要说明的是,预设冗余度越高,冗余分片处理中的计算量越大,预设冗余度越低,冗余分片处理中的计算量越小。
也就是,用户节点可以对文件分块的数据大小与分片数据阈值进行比较,进而根据比较结果确定将该文件分块划分为多少个数据分片,以及确定将该文件分块划分为多少个冗余分片。
其中,当文件分块的数据大小小于或等于分片数据阈值时,可以根据设置的N的取值,确定数据分片的数量为N,冗余分片的数量为N。
譬如,可以设置分片数据阈值为1800KB,N的取值为1,若文件分块的数据大小为1700KB,由于1700KB<1800KB,则可以确定数据分片的数量为1,确定冗余分片的数量为1。
其中,当确定文件分块的数据大小大于分片数据阈值时,可以根据文件分块的数据大小和分片数据阈值,确定数据分片的数量,进而可以将数据分片的数量和预设冗余度的乘积作为冗余分片的数量。
示例性的,设文件分块的数据大小为B,分片数据阈值为S,数据分片的数量为D,冗余分片的数量为P,预设冗余度为R,若文件分块的数据大小大于分片数据阈值,则可以根据D=[B/S],确定数据分片的数量,可以根据P=[D*R],确定冗余分片的数量。
譬如,可以设置分片数据阈值为1800KB,预设冗余度为10%,若文件分块的数据大小为400M,由于400M>1800KB,因此可以根据[400M/1800KB]=228,确定数据分片的数量为228,可以根据[228*10%]=23,确定冗余分片的数量为23。
2)基于冗余分片算法,按照第一数量和第二数量对文件分块进行分片处理,得到第一数量的数据分片和第二数量的冗余分片。
也就是,在确定第一数量和第二数量的情况下,用户节点可以基于冗余分片算法,将文件分块划分为第一数量个数据分片,将文件分块划分为第二数量个冗余分片。
示例性的,若确定第一数量为228,第二数量为23,则用户节点可以基于纠删算法,将文件分块划分为228个数据分片以及23个冗余分片。
步骤306:用户节点基于文件分片,生成分片索引对象。
其中,分片索引对象包括文件分片以及文件分片的索引。可以基于文件分片生成文件分片的索引,再基于文件分片和文件分片的索引生成分片索引对象。
请参考图4,对目标文件进行分块处理,得到多个文件分块。对于每个文件分块来说,对文件分块进行冗余分片处理,得到多个文件分片。再基于每个文件分片,生成该文件分片的索引,以进一步得到该文件分片的分片索引对象。
作为一种示例,可以对文件分片进行特征提取,得到文件分片的特征值,将文件分片的特征值作为文件分片的索引,然后基于文件分片以及文件分片的索引,生成文件分片的分片索引对象。
示例性的,用户节点可以通过哈希算法、特征提取模型等对文件分片进行特征提取,以得到文件分片的特征值,本实施例对此不做限定。
也就是,用户节点可以对文件分片进行特征提取,以得到文件分片的特征值,如此,可以将该文件分片的特征值确定为该文件分片的索引。进而,用户节点可以基于文件分片的索引和文件分片,生成文件分片的分片索引对象。
示例性的,如图5所示,用户节点可以基于哈希算法对文件分片进行特征提取,得到文件分片的哈希值,如此可以将该文件分片的哈希值确定为该文件分片的索引。进而,用户节点可以基于文件分片的索引和文件分片,生成文件分片的分片索引对象。
需要说明的是,不同的文件分片的特征值往往是不同的,即文件分片与文件分片的特征值是一一对应的关系,当确定文件分片的特征值时,可以根据该文件分片的特征值对该文件分片进行查询。
步骤307:基于文件分片的索引,生成文件索引对象。
其中,文件索引对象包括目标文件的索引以及文件分片中所有分片的索引。
作为一种示例,可以基于文件分片中所有分片的索引,生成目标文件的索引,然后基于目标文件的索引,以及文件分片中所有分片的索引,生成目标文件的文件索引对象。
示例性的,在确定文件分片中所有分片的特征值的情况下,可以基于该所有分片的特征值进行特征提取,以得到目标文件的特征值,如此,可以将该目标文件的特征值确定为目标文件的索引。
也就是,用户节点可以基于所有分片的索引,生成目标文件的索引,从而根据目标文件的索引和所有分片的索引,生成目标文件的文件索引对象。进而,用户节点可以对目标文件的文件索引对象进行序列化处理,得到目标文件的文件索引对象数据,如此,可以将该目标文件的文件索引对象数据发送给上传节点。
步骤306:用户节点对文件分片进行备份。
本申请实施例中,在得到文件分片后,可以对文件分片进行备份,如此,在文件分片出现异常时,可以使用备份的文件分片进行处理,进一步提高了数据存储的可靠性。当然,在其他实施例中,也可以不对文件分片进行备份,本申请实施例对此不做限定。
步骤309:用户节点将文件分片的分片索引对象,以及目标文件的文件索引对象上传至上传节点中。
需要说明的是,该上传节点可以基于分布式存储系统中多个设备节点的节点计算因子从多个设备节点中确定得到,具体确定方式可以参考上述图2实施例的相关描述,本申请实施例对此不做限定。
另外,在用户节点将文件分片的分片索引对象以及目标文件的文件索引对象上传至上传节点过程中,用户节点需要与上传节点建立连接,在建立连接后再通过数据流将分片索引对象和文件索引对象发送给上传节点。接下来,对用户节点将分片索引对象和文件索引对象上传至上传节点的过程进行举例说明。
图6是本申请实施例提供的一种用户节点向上传节点上传分片索引对象和文件索引对象的方法流程图,如图6所示,用户节点的动作包括如下步骤:
步骤1-1:用户节点进行节点初始化。
用户节点在节点初始化的过程中,可以生成节点信息。其中,节点信息可以包括节点ID。进一步地,还可以包括密钥对或存储路径等。
节点ID(Identity Document,身份标识号)的唯一性可以通过密钥对的唯一性来保证,该密钥对可以为RSA(RSA algorithm,RSA加密算法)密钥对等。存储路径为待存储数据的存储路径,如待生成的文件分片、分片索引对象和文件索引对象的存储路径等。
作为一个示例,节点ID包括ID编码格式(base)、版本号(version)、数据内容格式(codec)和哈希格式(hash)。其中,ID编码格式用于指示一种编码格式,以将节点ID编码成不同的格式,比如base64(一种编码格式)。版本号用于指示节点ID的版本。数据内容格式可以用1到2个字节定义数据内容的格式,在数据流中使用,比如用字母z表示base58(一种编码格式)等等。哈希格式可以包括3个部分:1、编码hash函数代号(比如sha256),2、hash值的长度,3、hash内容描述:由该节点的密钥对的公钥进行hash计算得到,比如采用sha256(一种哈希算法)进行计算得到。
步骤1-2:用户节点准备发送数据。
也即是,用户节点准备待发送的文件分片的分片索引对象和目标文件的文件索引对象。比如,用户节点先对目标文件进行分片,得到文件分片,再生成文件分片的分片索引对象,以及基于所有文件分片的分片索引对象生成目标文件的文件索引对象。
其中,文件分片的分片索引对象包括文件分片和文件分片的索引,目标文件的文件索引对象包括目标文件的索引以及目标文件的所有文件分片的索引。
步骤1-3:用户节点确定上传节点。
本申请实施例中,用户节点可以基于上述图2实施例提供的方式从分布式存储系统的多个设备节点中确定上传节点,也可以从多个设备节点中随机确定上传节点,或者采用其他方式确定上传节点,本申请实施例对此不作限定。
步骤1-4:用户节点向上传节点发送连接请求,请求与上传节点建立连接。
作为一个示例,用户节点可以向上传节点发送指定消息类型的连接请求。该指定消息类型可以自定义设置,比如,该指定消息类型可以为INODE(索引节点)消息类型或IDENTRY(目录项对象)消息类型。
步骤1-5:用户节点在与上传节点建立连接后,创建数据流。
用户节点创建数据流,是为了创建与上传节点之间的数据通道,以便向上传节点发送分片索引对象和文件索引对象。
步骤1-6:用户节点对文件分片的分片索引对象进行序列化处理,得到分片索引对象数据。
其中,分片索引对象数据为分片索引对象的序列化数据。序列化处理指的是将待传输对象转换为可以传输的序列化数据形式,即通过序列化处理,可以将索引对象转换为序列化数据,如此,可以将索引对象以数据流的形式传输。
步骤1-7:用户节点向上传节点发送分片索引对象数据的数据流。
步骤1-8:用户节点对目标文件的文件索引对象进行序列化处理,得到文件索引对象数据。
其中,文件索引对象数据为文件索引对象的序列化数据。同理,用户节点在上传文件索引对象之前,也可以先对文件索引对象进行序列化处理,以将文件索引对象转换为可以传输的序列化数据形式。
步骤1-9:用户节点向上传节点发送文件索引对象数据的数据流。
步骤1-10:用户节点在上传完数据后关闭数据流。
也即是,用户节点在上传完数据后,可以关闭与上传节点之间的数据通道。
如图6所示,上传节点的动作包括如下步骤:
步骤2-1:上传节点进行节点初始化。
上传节点进行节点初始化的操作与用户节点进行节点初始化的操作同理,可以在节点初始化的过程中,生成节点信息。其中,节点信息可以包括节点ID。进一步地,还可以包括密钥对或待存储的存储路径等。比如,该存储路径为待接收的分片索引对象和文件索引对象的存储路径。
步骤2-2:上传节点等待连接。
上传节点进行节点初始化之后,可以等待用户节点的连接请求。
步骤2-3:上传节点接收用户节点发送的连接请求,与用户节点建立连接。
作为一个示例,上传节点接收到用户节点发送的连接请求后,可以先解析该连接请求的消息类型,并判断该消息类型是否为指定消息类型。若消息类型为指定消息类型,则与用户节点建立连接;若消息类型不是指定消息类型,则说明该连接请求不合法,并返回步骤2-2,继续等待连接。
其中,该指定消息类型可以预先自定义设置,比如,该指定消息类型可以为INODE消息类型或IDENTRY消息类型。
步骤2-4:上传节点在与用户节点建立连接后,创建数据流。
也即是,创建与用户节点之间的数据通道,以便接收用户节点发送的数据。
步骤2-5:上传节点接收用户节点发送的数据流。
步骤2-6:上传节点从数据流中拉取数据。
上传节点可以从数据流中拉取分片索引对象数据和文件索引对象数据。
步骤2-7:上传节点对分片索引对象数据进行反序列化处理,得到文件分片的分片索引对象。
其中,反序列化处理为序列化处理的反向操作,用于将序列化数据转换为序列化处理之前的数据。也就是,通过反序列化处理,可以将索引对象数据转换为序列化处理之前的索引对象。
步骤2-8:上传节点检测是否已存储有该分片索引对象。
若已存储有该分片索引对象,则返回步骤2-5,继续接收数据;若未存储该分片索引对象,则执行步骤2-9。
步骤2-9:若上传节点未存储该分片索引对象,则存储该分片索引对象。
步骤2-10:上传节点对接收的文件索引对象数据进行反序列化处理,得到目标文件的文件索引对象。
同理,上传节点也可以对文件索引对象数据进行反序列化处理,以得到具体的文件索引对象。
步骤2-11:上传节点存储该文件索引对象。
步骤2-12:上传节点在接收完数据后关闭数据流。
也即是,上传节点在接收完数据后,可以关闭与用户节点之间的数据通道。
另外,用户节点上传目标文件的过程中,还可以确定目标文件的检索信息,并将目标文件的检索信息上传至中继节点中,由中继节点进行存储,以便后续其他用户节点在下载目标文件时,能够通过中继节点查询目标文件的索引。接下来将对用户节点向中继节点上传目标文件的检索信息的过程进行举例说明。
图7是本申请实施例提供的一种用户节点向中继节点上传文件检索信息的方法流程图,如图7所示,用户节点的动作包括如下步骤:
步骤3-1:用户节点行节点初始化。
用户节点在节点初始化的过程中,可以生成节点信息。其中,节点信息可以包括节点ID。进一步地,还可以包括密钥对或待存储数据的存储路径等。
步骤3-2:用户节点向中继节点发送连接请求。
作为一个示例,用户节点可以向中继节点发送指定消息类型的连接请求。该指定消息类型可以预先自定义设置,比如,该指定消息类型可以为INODE消息类型或IDENTRY消息类型。
步骤3-3:用户节点检测与中继节点是否连接成功。
若未连接成功,则执行步骤3-4;若连接成功,则执行步骤3-5。
步骤3-4:若未连接成功,则用户节点判断是否连接超时。
若连接超时,则表示连接错误或无法连接,并结束处理;若未连接超时,则返回步骤3-2,继续向中继节点发送连接请求。
步骤3-5:若连接成功,则用户节点创建数据流。
也即是,创建与中继节点之间的数据通道,以便向中继节点发送目标文件的检索信息。
步骤3-6:用户节点在与中继节点连接成功后,对目标文件的检索信息进行序列化处理,得到检索信息数据。
其中,目标文件的检索信息包括目标文件的文件标识以及目标文件的索引。检索信息数据为检索信息的序列化数据。通过对检索信息进行序列化处理,可以将检索信息转换为能够以数据流传输的序列化数据形式。
步骤3-7:用户节点向中继节点发送检索信息数据的数据流。
步骤3-8:用户节点在发送完数据后关闭数据流。
也即是,用户节点在上传完数据后,可以关闭与中继节点之间的数据通道。
如图7所示,中继节点的动作包括如下步骤:
步骤4-1:中继节点进行节点初始化。
中继节点进行节点初始化的操作与用户节点进行节点初始化的操作同理,可以在节点初始化的过程中,生成节点信息。
其中,节点信息可以包括节点ID。进一步地,还可以包括密钥对或存储路径等。该存储路径为待存储数据的存储路径,如待接收的目标文件的检索信息的存储路径。
步骤4-2:中继节点等待连接。
中继节点进行节点初始化之后,可以等待用户节点的连接请求。
步骤4-3:中继节点检测是否接收到用户节点的连接请求。
步骤4-4:中继节点解析连接请求的消息类型
步骤4-5:中继节点判断解析的消息类型是否为指定消息类型。
若消息类型不是指定消息类型,则说明该连接请求不合法,并返回步骤4-2,继续等待连接;若消息类型是指定消息类型,则执行步骤4-6。
其中,指定消息类型为预先自定义的消息类型,如INODE消息类型或IDENTRY消息类型等。
步骤4-6:若消息类型为指定消息类型,则中继节点创建数据流。
也即是,创建与用户节点之间的数据通道,以便接收用户节点发送的数据。
步骤4-7:中继节点从数据流中拉取检索信息数据。
其中,检索信息数据为检索信息的序列化数据,由用户节点对目标文件的检索信息进行序列化处理得到。
步骤4-8:中继节点对检索信息数据进行反序列化处理,得到目标文件的检索信息。
其中,反序列化处理为序列化处理的反向操作,用于将序列化数据转换为序列化处理之前的数据。也就是,通过反序列化处理,可以将检索信息数据转换为序列化处理之前的检索信息。
步骤4-9:中继节点存储目标文件的索引信息。
中继节点可以将目标文件的索引信息存储在本地存储空间中或者存储在远程数据库中。
步骤4-10:中继节点在接收完数据后关闭数据流。
也即是,中继节点在接收完数据后,可以关闭与用户节点之间的数据通道。
需要说明的是,对于文件分片的上传节点来说,上传节点还可以与中继节点建立连接,并向中继节点发送上传节点地址,以便中继节点对上传节点进行识别和监测。接下来对上传节点向中继节点发送上传节点地址的过程进行举例说明。
图8是本申请实施例提供的一种上传节点向中继节点发送上传节点地址的方法流程图,如图8所示,上传节点的动作包括如下步骤:
步骤5-1:上传节点进行节点初始化。
上传节点在节点初始化的过程中,可以生成节点信息。其中,节点信息可以包括节点ID。进一步地,还可以包括密钥对或待存储数据的存储路径等。
步骤5-2:上传节点向中继节点发送连接请求。
作为一个示例,上传节点可以向中继节点发送指定消息类型的连接请求。该指定消息类型可以预先自定义设置,比如,该指定消息类型可以为INODE消息类型或IDENTRY消息类型。
步骤5-3:上传节点监听与中继节点之间的连接。
上传节点可以监听与中继节点之间的连接情况,进而判断与中继节点是否连接成功。
步骤5-4:上传节点判断与中继节点是否连接成功。
若未连接成功,则返回步骤5-3,继续监听中继连接;若连接成功,则执行步骤5-5。
步骤5-5:若连接成功,则上传节点创建数据流。
上传节点创建数据流,是为了创建与中继节点之间的数据通道,以便向中继节点发送上传节点地址。
步骤5-6:上传节点在与中继节点连接成功后,对上传节点的上传节点地址进行序列化处理,得到上传节点地址数据。
其中,该上传节点地址可以包括上传节点的IP(Internet Protocol,网际互连协议)地址和上传节点ID等。上传节点地址数据为上传节点地址的序列化数据。通过对上传节点地址进行序列化处理,可以将上传节点地址转换为能够以数据流传输的序列化数据形式。
步骤5-7:上传节点向中继节点发送上传节点地址数据的数据流。
步骤5-8:上传节点在发送完数据后关闭数据流。
也即是,上传节点在上传完数据后,可以关闭与中继节点之间的数据通道。
如图7所示,中继节点的动作包括如下步骤:
步骤6-1:中继节点进行节点初始化。
中继节点进行节点初始化的操作与上传节点进行节点初始化的操作同理,可以在节点初始化的过程中,生成节点信息。
其中,节点信息可以包括节点ID。进一步地,还可以包括密钥对或存储路径等。该存储路径为待存储数据的存储路径,如待接收的目标文件的检索信息的存储路径。
步骤6-2:中继节点等待连接。
中继节点进行节点初始化之后,可以等待上传节点的连接请求。
步骤6-3:中继节点判断是否接收到连接请求。
若未接收到连接请求,则返回步骤6-2,继续等待连接;若接收到连接请求,则执行步骤6-4。
步骤6-4:若接收到连接请求,则中继节点解析连接请求的消息类型。
步骤6-5:中继节点判断解析的消息类型是否为指定消息类型。
若消息类型不是指定消息类型,则说明连接请求不合法,返回步骤6-2,继续等待连接;若消息类型是指定类型,则执行步骤6-6。
其中,指定消息类型为预先自定义的消息类型,如INODE消息类型或IDENTRY消息类型等。
步骤6-6:若消息类型为指定消息类型,则中继节点创建数据流。
也即是,创建与上传节点之间的数据通道,以便接收上传节点发送的数据。
步骤6-7:中继节点从数据流中拉取上传节点地址数据。
其中,上传节点地址数据为上传节点地址的序列化数据,可以由上传节点对上传节点地址进行序列化处理得到。
步骤6-8:中继节点对上传节点地址数据进行反序列化处理,得到上传节点地址。
其中,反序列化处理为序列化处理的反向操作,用于将序列化数据转换为序列化处理之前的数据。也就是,通过反序列化处理,可以将上传节点地址数据转换为序列化处理之前的上传节点地址。
步骤6-9:中继节点存储上传节点地址。
中继节点可以将上传节点存储在本地存储空间中或存储在远程数据库中。
步骤6-10:中继节点在接收完数据后关闭数据流。
也即是,中继节点在接收完数据后,可以关闭与上传节点之间的数据通道。
需要说明的是,上述实施例描述的是用户节点确定上传节点,并将文件分片上传至上传节点的过程。接下来将对用户节点确定下载节点,并通过下载节点下载目标文件的过程进行详细说明。
图9是本申请实施例提供的又一种分布式存储系统的数据存储方法的流程图,该方法可以应用于图1所示的实施环境中。请参考图9,该方法包括如下步骤。
步骤901:对于目标文件的文件分片,基于分布式存储系统包括的多个设备节点的节点计算因子,从多个设备节点中确定文件分片的下载节点。
其中,节点计算因子包括节点活跃度和节点距离中的至少一种,节点活跃度用于指示设备节点的平均在线时长,节点距离用于指示设备节点与用户节点之间的哈希距离。另外,节点计算因子还可以包括节点带宽和节点响应速度等其他计算因子。
示例性的,用户节点可以从多个设备节点中选择节点活跃度最高的设备节点作为下载节点,或者,用户节点可以从多个设备节点中选择节点距离最小的设备节点作为下载节点,或者,用户节点可以从多个设备节点中选择节点活跃度最高且节点距离最小的设备节点作为下载节点。
作为一种示例,基于分布式存储系统中多个设备节点的节点计算因子,从多个设备节点中确定文件分片的下载节点的实现方式可以为:对于文件分片中的第一分片,当需要下载第一分片时,基于多个设备节点的节点计算因子,确定多个设备节点的节点评估值,第一分片为文件分片中的任一分片。多个设备节点中选择节点评估值最大的设备节点,作为第一分片的下载节点。
其中,节点评估值可以用于指示设备节点作为下载节点的可能性,设备节点的节点评估值越大,说明设备节点越适合作为下载节点,设备节点的节点评估值越小,说明设备节点越不适合作为下载节点。
示例性的,节点评估值可以基于节点活跃度和节点距离中的至少一种计算得到。另外,节点计算因子还可以包括节点带宽和节点响应速度,比如,节点评估值可以基于节点活跃度、节点距离、节点带宽和节点响应速度计算得到。
作为一个示例,若节点评估值为基于节点活跃度计算得到的,在用户节点需要下载第一分片的情况下,用户节点可以确定多个设备节点中每个设备节点的节点活跃度,从而选择节点活跃度最高的设备节点作为第一分片的下载节点。
作为一种示例,基于多个设备节点的节点计算因子,确定多个设备节点的节点评估值的实现方式可以为:对于多个设备节点中的第一设备节点,确定第一设备节点的节点计算因子中各个计算因子的权重;基于第一设备节点的节点计算因子中各个计算因子的权重,对第一设备节点的节点计算因子中所有计算因子进行加权求和,得到第一设备节点的节点评估值。其中,第一设备节点为多个设备节点中的任一个。
其中,各个计算因子的权重可以根据实际情况进行分配,本实施例对此不做限定。也就是说,在确定各个计算因子的权重的情况下,对于多个设备节点中的第一设备节点,用户节点可以根据该第一设备节点的节点计算因子以及各个计算因子的权重,确定第一设备节点的节点评估值,即确定该第一设备节点是否适合作为上传节点。
譬如,若节点计算因子包括节点活跃度、节点距离、节点带宽和节点响应速度,可以为节点活跃度分配权重0.1,为节点距离分配权重0.2,为节点下载带宽分配权重0.3,为节点响应速度分配权重0.4。如此,可以确定节点评估值=节点活跃度*权重0.1+节点距离*权重0.2+节点带宽*权重0.3+节点响应速度*权重0.4。
步骤902:从文件分片的下载节点,下载目标文件的文件分片。
也就是,在用户节点确定文件分片的下载节点的情况下,用户节点可以通过该下载节点下载目标文件的文件分片。
作为一种示例,从文件分片的下载节点,下载目标文件的文件分片的实现方式可以为:获取第一分片的索引,第一分片为目标文件的文件分片中的任一分片。若根据第一分片的索引,检测到第一分片的下载节点中存储有第一分片索引对象,则从第一分片索引对象中获取第一分片,第一分片索引对象包括第一分片以及第一分片的索引。
也就是,如图10所示,用户节点可以获取第一分片的索引,从而利用第一分片的索引对第一分片进行查询,若根据第一分片的索引确定该第一分片的下载节点中存储有第一分片,则用户节点可以通过该第一分片的下载节点获取第一分片。
示例性的,在确定下载节点的情况下,用户节点可以向下载节点发送连接请求,与下载节点建立连接。在与下载节点建立连接的情况下,该下载节点与用户节点之间可以进行数据传输。
由此,用户节点可以向下载节点发送下载请求,该下载请求中携带第一分片的索引。
若下载节点中存储有第一分片,则用户节点可以获取第一分片索引对象数据,进而用户节点可以对该第一分片索引对象数据进行反序列化处理,得到第一分片索引对象,如此,用户节点可以获取第一分片。
示例性的,若下载节点中没有存储有第一分片,则该下载节点可以将该下载请求转发至其他在线设备节点中。若其他在线设备节点中存储有第一分片,则可以建立与用户节点之间的连接。在与用户节点建立连接的情况下,该其他在线设备节点与用户节点之间可以进行数据传输。
其他在线设备节点可以对第一分片索引对象进行序列化处理,得到第一分片索引对象数据,进而可以将该第一分片索引对象数据发送至用户节点。如此,用户节点通过对该第一分片索引对象数据进行反序列化处理,可以得到第一分片。
作为一种示例,获取第一分片的索引之前,用户节点还可以进行如下操作:基于多个设备节点的节点计算因子,从多个设备节点中确定目标文件的文件索引对象的下载节点,文件索引对象包括目标文件的索引以及目标文件的文件分片中所有分片的索引。从文件索引对象的下载节点,下载文件索引对象。从文件索引对象中获取第一分片的索引。
也就是,在用户节点需要下载目标文件的文件索引对象的情况下,用户节点可以根据节点活跃度和/或节点距离,从分布式存储系统包括的多个设备节点中确定适合用于下载文件索引对象的下载节点。如此,用户节点可以通过文件索引对象的下载节点下载文件索引对象,从而在文件索引对象中获取第一分片的索引。
示例性的,在确定文件索引对象的下载节点的情况下,用户节点可以向文件索引对象的下载节点发送连接请求,进而与文件索引对象的下载节点建立连接。在与文件索引对象的下载节点建立连接的情况下,该文件索引对象的下载节点与用户节点之间可以进行数据传输。
在与文件索引对象的下载节点建立连接的情况下,用户节点可以接收目标文件的文件索引对象数据,进而可以对该目标文件的文件索引对象数据进行反序列化处理,得到目标文件的文件索引对象。由于文件索引对象包括目标文件的文件分片中所有分片的索引,因此用户节点可以确定第一分片的索引。
作为一种示例,从文件索引对象的下载节点,下载文件索引对象之前,用户节点还可以进行如下操作:根据目标文件的文件标识,从中继节点中获取目标文件的索引,中继节点存储有目标文件的检索信息,检索信息包括目标文件的文件标识以及目标文件的索引。根据目标文件的索引,从文件索引对象的下载节点,下载文件索引对象。
其中,文件标识可以为文件名、文件ID(Identity Document,身份标识)等等,本实施例对此不做限定。
其中,用户节点可以根据目标文件的文件标识对目标文件的索引进行查询。
示例性的,用户节点可以向中继节点发送连接请求,进而与该中继节点建立连接。在与中继节点建立连接的情况下,用户节点可以向中继节点发送查询请求,该查询请求中携带目标文件的文件名。中继节点可以基于关键词匹配的方法对目标文件的文件名进行查询,若中继节点根据该目标文件的文件名,确定中继节点的数据库中存储有该目标文件的索引,则可以对该目标文件的检索信息进行序列化处理,得到目标文件的检索信息数据,进而,中继节点可以将该目标文件的检索信息数据发送给用户节点。
如此,用户节点可以获取目标文件的检索信息数据,进而可以对该目标文件的检索信息数据进行反序列化处理,得到目标文件的检索信息,在该种情况下,用户节点可以获取目标文件的索引。
进而,在确定目标文件的索引的情况下,用户节点可以向文件索引对象的下载节点发送下载请求,该下载请求中携带目标文件的索引。若文件索引对象的下载节点中存储有第一分片的索引,则用户节点可以获取目标文件的文件索引对象数据,进而可以对该目标文件的文件索引对象数据进行反序列化处理,得到目标文件的文件索引对象。
示例性的,若文件索引对象的下载节点中没有存储有第一分片的索引,则该文件索引对象的下载节点可以将该下载请求转发至其他在线设备节点中。若其他在线设备节点中存储有第一分片的索引,则可以建立与用户节点之间的连接,进而可以对目标文件的文件索引对象进行序列化处理,得到目标文件的文件索引对象数据,进而可以将该目标文件的文件索引对象数据发送至用户节点。如此,用户节点通过对该目标文件的文件索引对象数据进行反序列化处理,可以得到文件索引对象。
步骤903:对下载的文件分片进行聚合,得到目标文件。
也就是,在用户节点获取到文件分片的情况下,可以基于冗余分片算法对该获取到的文件分片进行聚合处理,以得到目标文件。
示例性的,若冗余分片算法为纠删算法,用户节点可以基于纠删码对获取的文件分片进行解码操作,进而可以对解码后的文件分片进行聚合处理,得到目标分片。
由于文件分片是对目标文件进行冗余分片处理得到的,因此,用户节点可以基于获取到的部分文件分片聚合得到目标文件。
需要说明的是,若目标文件经冗余分片处理得到k个文件分片和m个冗余分片,当存储文件分片的设备节点中存在异常的设备节点时,用户节点能够获取到的文件分片的数量可能小于k+m个,或者获取到的文件分片中有效分片的数量可能小于k+m个。而在本实施例中,文件分片是基于冗余分片处理得到的,因此即使获取到的文件分片的数量小于k+m个,用户节点也可以根据获取到的任意k个文件分片聚合得到目标文件,从而提高了数据存储的可靠性。
譬如,若目标文件的文件分片的数量为30,冗余分片的数量为10,由于存在异常的设备节点,导致有效的分片只有22个,在该种情况下,用户节点可以在该22个分片中任意获取20个分片聚合得到目标文件。
在本申请实施例中,用户节点可以根据节点活跃度和节点距离中的至少一种,从分布式存储系统包括的多个设备节点中确定目标文件的文件分片的下载节点,使得所选择的下载节点的平均在线时长较长和/或与用户节点之间的哈希距离能够满足一定的条件,如此,可以极大地降低所选择的下载节点不可用的可能性,保证数据传输效率,提高了数据下载效率和系统可靠性。
接下来,对用户节点通过下载节点下载目标文件的过程进行举例说明。图10是本申请实施例提供的一种用户节点下载目标文件的方法流程图,如图10所示,用户节点的动作包括如下步骤:
步骤7-1:用户节点进行节点初始化。
用户节点在节点初始化的过程中,可以生成节点信息。其中,节点信息可以包括节点ID。进一步地,还可以包括密钥对或待存储数据的存储路径等。
其中,该存储路径可以为待下载的目标文件的检索信息、文件索引对象、分片索引对象以及文件分片的存储路径。
步骤7-2:用户节点向中继节点发送查询请求,该查询请求携带目标文件的文件标识。
中继节点存储有目标文件的检索信息,该检索信息包括目标文件的标识以及对应的目标文件的索引。中继节点接收到该查询请求后,可以基于目标文件的标识,从存储的检索信息中获取目标文件的索引,并将目标文件的索引发送给用户节点。
步骤7-3:用户节点接收中继节点返回的目标文件的索引。
步骤7-4:用户节点确定下载节点。
在接收到目标文件的索引之后,用户节点可以先确定目标文件的文件索引对象的下载节点,即第一下载节点。其中,目标文件的文件索引对象携带目标文件的索引,以及目标文件包括的所有文件分片的索引。
需要说明的是,用户节点可以基于图9实施例提供的方式,确定下载节点。
步骤7-5:用户节点与确定的第一下载节点建立连接,向第一下载节点发送第一下载请求,第一下载请求携带目标文件的索引,用于请求目标文件的文件索引对象。
步骤7-6:用户节点接收第一下载节点的确认响应,该确认响应用于指示第一下载节点存储有目标文件的文件索引对象。
步骤7-7:用户节点在接收到确认响应后,创建数据流。
也即是,创建与第一下载节点之间的数据通道,以便从第一下载节点下载目标文件的文件索引对象。
步骤7-8:用户节点接收第一下载节点发送的数据流,从数据流中拉取文件索引对象数据。
其中,文件索引对象数据为文件索引对象的序列化数据,可以由第一下载节点对文件索引对象进行序列化处理得到。
步骤7-9:用户节点对文件索引对象数据进行反序列化处理,得到文件索引对象。
其中,反序列化处理为序列化处理的反向操作,用于将序列化数据转换为序列化处理之前的数据。也就是,通过反序列化处理,可以将文件索引对象数据转换为序列化处理之前的文件索引对象。
步骤7-10:用户节点从文件索引对象中解析目标文件的所有文件分片的索引。
用户节点解析出目标文件的所有文件分片的索引之后,即可基于各个文件分片的索引,下载各个文件分片。比如,可以基于所有文件分片的索引,依次下载各个文件分片。而在下载每个文件分片之前,需要先确定该文件分片的下载节点。
步骤7-11:用户节点确定下载节点。
也即是,确定待下载的文件分片的下载节点,即第二下载节点。
需要说明的是,用户节点可以基于图9实施例提供的方式,确定下载节点。
步骤7-12:用户节点与确定的第二下载节点建立连接,向第二下载节点发送第二下载请求,第二下载请求携带待下载的文件分片的索引,用于请求下载该文件分片。
其中,该文件分片可以为目标文件的所有分片中的任一分片。
步骤7-13:用户节点接收第二下载节点的确认响应,该确认响应用于指示第二下载节点存储有该文件分片的分片索引对象。
步骤7-14:用户节点在接收到确认响应后,创建数据流。
也即是,创建与第二下载节点之间的数据通道,以便从第二下载节点下载该文件分片的分片索引对象。
步骤7-15:用户节点接收第二下载节点发送的数据流,从数据流中拉取分片索引对象数据。
其中,分片索引对象数据为该文件分片的分片索引对象的序列化数据,可以由第二下载节点对分片索引对象进行序列化处理得到。
步骤7-16:用户节点对该分片索引对象数据进行反序列化处理,得到该分片索引对象,进而得到文件分片。
其中,反序列化处理为序列化处理的反向操作,用于将序列化数据转换为序列化处理之前的数据。也就是,通过反序列化处理,可以将分片索引对象数据转换为序列化处理之前的分片索引对象。
步骤7-17:用户节点检测目标文件的所有分片是否均下载完成。
若目标文件的所有分片未下载完成,则返回步骤7-11,继续下载其他分片;若目标文件的所有分片均下载完成,则执行步骤7-18。
步骤7-18:若检测到所有分片均下载完成,则用户节点关闭数据流。
也即是,在目标文件的所有分片均下载完成后,可以关闭与第二下载节点之间的数据通道。
如图10所示,第一下载节点的动作包括如下步骤:
步骤8-1:第一下载节点进行节点初始化。
第一下载节点进行节点初始化的操作与用户节点进行节点初始化的操作同理,可以在节点初始化的过程中,生成节点信息。其中,节点信息可以包括节点ID。进一步地,还可以包括密钥对或待存储数据的存储路径等。
步骤8-2:第一下载节点等待连接。
第一下载节点进行节点初始化之后,可以等待用户节点的连接请求。在接收到用户节点发送的连接请求后,建立与用户节点之间的连接。
步骤8-3:第一下载节点在与用户节点建立连接后,接收用户节点发送的第一下载请求,第一下载请求携带携带目标文件的索引。
其中,第一下载请求用于请求下载目标文件的文件索引对象,该文件索引对象携带目标文件的索引,以及目标文件包括的所有文件分片的索引。
步骤8-4:第一下载节点基于第一下载请求携带的目标文件的索引,查找目标文件的文件索引对象。
若未查找到目标文件的文件索引对象,则将第一下载请求转发给其他设备节点,或者结束处理;若查找到目标文件的文件索引对象,则执行步骤8-5。
步骤8-5:若查找到目标文件的文件索引对象,则第一下载节点向用户节点发送确认响应,该确认响应用于指示第一下载节点存储有目标文件的文件索引对象。
步骤8-6:第一下载节点在发送确认响应后,创建数据流。
也即是,创建与用户节点之间的数据通道。
步骤8-7:第一下载节点对目标文件的文件索引对象进行序列化处理,得到文件索引对象数据。
其中,文件索引对象数据为文件索引对象的序列化数据。在向用户节点发送文件索引对象之前,通过对文件索引对象进行序列化处理,可以将文件索引对象转换为能够以数据流传输的序列化数据形式。
步骤8-8:第一下载节点向用户节点发送文件索引对象数据的数据流。
步骤8-9:第一下载节点在发送完数据后,关闭数据流。
也即是,在发送完数据之后,可以关闭与用户节点之间的数据通道。
如图10所示,第二下载节点的动作包括如下步骤:
步骤9-1:第二下载节点进行节点初始化。
第二下载节点进行节点初始化的操作与用户节点进行节点初始化的操作同理,可以在节点初始化的过程中,生成节点信息。其中,节点信息可以包括节点ID。进一步地,还可以包括密钥对或待存储数据的存储路径等。
步骤9-2:第二下载节点等待连接。
第二下载节点进行节点初始化之后,可以等待用户节点的连接请求。在接收到用户节点发送的连接请求后,建立与用户节点之间的连接。
步骤9-3:第二下载节点在与用户节点建立连接后,接收第二下载请求,第二下载请求携带文件分片的索引,用于请求下载该文件分片。
步骤9-4:第二下载节点基于第二下载请求携带的文件分片的索引,查找该文件分片的分片索引对象。
其中,该文件分片的分片索引对象包括该文件分片以及该文件分片的索引。若未查找到该文件分片的分片索引对象,则表示第二下载节点未存储该文件分片,这种情况下可以将第二下载请求转发给其他设备节点,或者结束处理;若查找到该文件分片的分片索引对象,则执行步骤9-5。
步骤9-5:若查找到该文件分片的分片索引对象,则第二下载节点向用户节点发送确认响应,该确认响应用于指示第二下载节点存储有该文件分片。
步骤9-6:第二下载节点在发送确认响应后,创建数据流。
也即是,创建与用户节点之间的数据通道。
步骤9-7:第二下载节点对该文件分片的分片索引对象进行序列化处理,得到分片索引对象数据。
其中,分片索引对象数据为分片索引对象的序列化数据。在向用户节点发送分片索引对象之前,通过对分片索引对象进行序列化处理,可以将分片索引对象转换为能够以数据流传输的序列化数据形式。
步骤9-8:第二下载节点向用户节点发送分片索引对象数据的数据流。
步骤9-9:第二下载节点在发送完数据后,关闭数据流。
也即是,在发送完数据后,关闭与用户节点之间的数据通道。
需要说明的是,图10实施例仅是下载过程的一个示例性举例,其并不对图9实施例进行限制,在其他实施例中,还可以对图10实施例中的部分步骤进行合理变换,本申请实施例对此不作限定。
图11是根据一示例性实施例示出的一种分布式存储系统的数据存储装置的结构示意图,该分布式存储系统的数据存储装置可以由软件、硬件或者两者的结合实现。该分布式存储系统的数据存储装置可以包括:
确定模块1110,用于从分布式存储系统包括的多个设备节点中确定文件分片的上传节点,所述上传节点是基于所述多个设备节点的节点计算因子确定得到;
其中,所述节点计算因子包括节点活跃度和节点距离中的至少一种,所述节点活跃度用于指示设备节点的平均在线时长,所述节点距离用于指示设备节点与用户节点之间的哈希距离,所述文件分片为目标文件的文件分片;
上传模块1120,用于将所述文件分片上传至所述上传节点,由所述上传节点对所述文件分片进行存储。
在本申请一种可能的实现方式中,所述确定模块1110用于:
通过中继节点,从所述多个设备节点中获取按照节点评估值从大到小的顺序排序在前的N个设备节点,将所述N个设备节点作为所述文件分片的上传节点;其中,所述多个设备节点的节点评估值是由所述中继节点基于所述多个设备节点的节点计算因子确定的,所述N为正整数;或者,
对于所述文件分片中的第一分片,当需要上传所述第一分片时,基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值,从所述多个设备节点中选择节点评估值最大的设备节点,作为所述第一分片的上传节点;其中,所述第一分片为所述文件分片中的任一分片。
在本申请一种可能的实现方式中,所述确定模块1110用于:
对于所述多个设备节点中的第一设备节点,确定所述第一设备节点的节点计算因子中各个计算因子的权重,所述第一设备节点为所述多个设备节点中的任一个;
基于所述第一设备节点的节点计算因子中各个计算因子的权重,对所述第一设备节点的节点计算因子中所有计算因子进行加权求和,得到所述第一设备节点的节点评估值。
在本申请一种可能的实现方式中,所述上传模块1120用于:
基于所述文件分片,生成所述文件分片的分片索引对象,所述分片索引对象包括所述文件分片以及所述文件分片的索引;
将所述文件分片的分片索引对象上传至所述上传节点,由所述上传节点对所述分片索引对象进行存储。
在本申请一种可能的实现方式中,所述上传模块1120用于:
对所述文件分片进行特征提取,得到所述文件分片的特征值,将所述文件分片的特征值作为所述文件分片的索引;
基于所述文件分片以及所述文件分片的索引,生成所述文件分片的分片索引对象。
在本申请一种可能的实现方式中,所述上传模块1120还用于:
基于所述文件分片中所有分片的索引,生成所述目标文件的索引;
基于所述目标文件的索引,以及所述文件分片中所有分片的索引,生成所述目标文件的文件索引对象,所述文件索引对象包括所述目标文件的索引以及所述文件分片中所有分片的索引;
将所述文件分片的分片索引对象上传至所述上传节点,包括:
将所述文件分片的分片索引对象,以及所述目标文件的文件索引对象上传至所述上传节点中,由所述上传节点进行存储。
在本申请一种可能的实现方式中,
所述确定模块1110,用于确定所述目标文件的检索信息,所述目标文件的检索信息包括所述目标文件的文件标识以及所述目标文件的索引;
所述上传模块1120,用于将所述目标文件的检索信息上传至中继节点中。
在本申请实施例中,在本申请实施例中,用户节点可以根据节点活跃度和节点距离中的至少一种,从分布式存储系统的多个设备节点中为目标文件的文件分片选择上传节点,然后将文件分片上传至该上传节点进行存储。这样,所选择的上传节点可以为平均在线时长较长,和/或与用户节点之间的哈希距离较短的设备节点,极大地降低了所选择的上传节点不可用的可能性,且数据传输效率也较高,因此提高了数据存储效率,以及提高了分布式存储系统的可靠性。
图12是根据一示例性实施例示出的一种分布式存储系统的数据存储装置的结构示意图,该分布式存储系统的数据存储装置可以由软件、硬件或者两者的结合实现。该分布式存储系统的数据存储装置可以包括:
第一确定模块1210,用于确定分布式存储系统包括的多个设备节点的节点计算因子,所述节点计算因子包括节点活跃度和节点距离中的至少一种,所述节点活跃度用于指示设备节点的平均在线时长,所述节点距离用于指示设备节点与用户节点之间的哈希距离;
第二确定模块1220,用于基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值。
在本申请一种可能的实现方式中,所述第二确定模块1220还用于:
当接收到用户节点的节点评估请求时,将所述多个设备节点的节点评估值发送给所述用户节点;或者,
当接收到用户节点的节点评估请求时,从所述多个设备节点中获取按照节点评估值从大到小的顺序排序在前的N个设备节点,将所述N个设备节点的节点标识发送给所述用户节点,所述N为正整数。
在本申请实施例中,中继节点可以根据节点活跃度和节点距离中的至少一种,确定分布式存储系统包括的多个设备节点中每个设备节点的节点评估值。通常,若设备节点的节点评估值越大,则设备节点越适合于传输文件分片,若设备节点的节点评估值越小,则设备节点越不适合于传输文件分片。在该种情况下,中继节点可以根据节点评估值的大小,为用户节点选择更适合于传输和存储文件分片的上传节点,以提高文件分片存储的效率,或者,用户节点可以根据节点评估值的大小,自行选择更适合于存储文件分片的上传节点,以提高文件分片的存储效率。
图13是根据一示例性实施例示出的一种分布式存储系统的数据存储装置的结构示意图,该分布式存储系统的数据存储装置可以由软件、硬件或者两者的结合实现。该分布式存储系统的数据存储装置可以包括:
确定模块1310,用于对于目标文件的文件分片,基于分布式存储系统包括的多个设备节点的节点计算因子,从所述多个设备节点中确定所述文件分片的下载节点;
其中,所述节点计算因子包括节点活跃度和节点距离中的至少一种,所述节点活跃度用于指示设备节点的平均在线时长,所述节点距离用于指示设备节点与用户节点之间的哈希距离;
下载模块1320,用于从所述文件分片的下载节点,下载所述目标文件的文件分片;
聚合模块1330,用于对下载的文件分片进行聚合,得到所述目标文件。
在本申请一种可能的实现方式中,所述确定模块1310用于:
对于所述文件分片中的第一分片,当需要下载所述第一分片时,基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值,所述第一分片为所述文件分片中的任一分片;
从所述多个设备节点中选择节点评估值最大的设备节点,作为所述第一分片的下载节点。
在本申请一种可能的实现方式中,所述确定模块1310用于:
对于所述多个设备节点中的第一设备节点,确定所述第一设备节点的节点计算因子中各个计算因子的权重,所述第一设备节点为所述多个设备节点中的任一个;
基于所述第一设备节点的节点计算因子中各个计算因子的权重,对所述第一设备节点的节点计算因子中的多个计算因子进行加权求和,得到所述第一设备节点的节点评估值。
在本申请一种可能的实现方式中,所述下载模块1320用于:
获取第一分片的索引,所述第一分片为所述目标文件的文件分片中的任一分片;
若根据所述第一分片的索引,检测到所述第一分片的下载节点中存储有第一分片索引对象,则从所述第一分片索引对象中获取所述第一分片,所述第一分片索引对象包括所述第一分片以及所述第一分片的索引。
在本申请一种可能的实现方式中,所述下载模块1320用于:
基于所述多个设备节点的节点计算因子,从所述多个设备节点中确定所述目标文件的文件索引对象的下载节点,所述文件索引对象包括所述目标文件的索引以及所述目标文件的文件分片中所有分片的索引;
从所述文件索引对象的下载节点,下载所述文件索引对象;
从所述文件索引对象中获取所述第一分片的索引。
在本申请一种可能的实现方式中,所述下载模块1320还用于:
根据所述目标文件的文件标识,从中继节点中获取所述目标文件的索引,所述中继节点存储有所述目标文件的检索信息,所述检索信息包括所述目标文件的文件标识以及所述目标文件的索引;
根据所述目标文件的索引,从所述文件索引对象的下载节点,下载所述文件索引对象。
在本申请实施例中,在本申请实施例中,用户节点可以根据节点活跃度和节点距离中的至少一种,从分布式存储系统包括的多个设备节点中确定目标文件的文件分片的下载节点,然后通过该下载节点下载目标文件的文件分片,并对下载的文件分片进行聚合,得到目标文件。这样,所选择的下载节点可以为平均在线时长较长,和/或与用户节点之间的哈希距离较短的设备节点,极大地降低了所选择的下载节点不可用的可能性,且数据传输效率也较高,因此提高了文件下载效率,以及提高了分布式存储系统的可靠性。
需要说明的是:上述实施例提供的分布式存储系统的数据存储装置在数据存储时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的分布式存储系统的数据存储装置与分布式存储系统的数据存储方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图14是本申请实施例提供的一种电子设备1400的结构框图。该电子设备1400可以是便携式移动终端,比如:智能手机、平板电脑、MP3播放器(Moving Picture ExpertsGroup Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving PictureExperts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。电子设备1400还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,电子设备1400包括有:处理器1401和存储器1402。
处理器1401可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器1401可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器1401也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器1401可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器1401还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器1402可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器1402还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器1402中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器1401所执行以实现本申请中方法实施例提供的分布式存储系统的数据存储方法。
本领域技术人员可以理解,图14中示出的结构并不构成对电子设备1400的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
在一些实施例中,还提供了一种计算机可读存储介质,该存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述实施例中分布式存储系统的数据存储方法的步骤。例如,所述计算机可读存储介质可以是ROM、RAM、CD-ROM、磁带、软盘和光数据存储设备等。
值得注意的是,本申请提到的计算机可读存储介质可以为非易失性存储介质,换句话说,可以是非瞬时性存储介质。
应当理解的是,实现上述实施例的全部或部分步骤可以通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。所述计算机指令可以存储在上述计算机可读存储介质中。
也即是,在一些实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述所述的分布式存储系统的数据存储方法的步骤。
以上所述为本申请提供的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (23)

1.一种分布式存储系统的数据存储方法,其特征在于,所述方法包括:
若目标文件的数据大小大于分块数据阈值,对所述目标文件进行分块处理,得到文件分块;
若所述文件分块的数据大小小于或等于分片数据阈值,确定第一数量和第二数量均为M;其中,所述第一数量为所述文件分块待划分的数据分片的数量,所述第二数量为所述文件分块待划分的冗余分片的数量,M为正整数;
若所述文件分块的数据大小大于所述分片数据阈值,则基于所述文件分块的数据大小与所述分片数据阈值之间的比值,确定所述第一数量;基于所述第一数量和预设冗余度,确定所述第二数量;其中,所述预设冗余度为冗余分片的数量与数据分片的数量之间的比值;
基于冗余分片算法,按照所述第一数量和所述第二数量对所述文件分块进行分片处理,得到第一数量的数据分片和第二数量的冗余分片;
对文件分片进行备份,所述文件分片包括数据分片和冗余分片;
从分布式存储系统包括的多个设备节点中确定文件分片的上传节点,所述上传节点是基于所述多个设备节点的节点计算因子确定得到;
其中,所述节点计算因子包括节点距离,所述节点距离用于指示设备节点与用户节点之间的哈希距离;所述节点距离的确定过程包括:对用户节点标识对应的二进制字符串和设备节点标识对应的二进制字符串进行异或处理,再对异或处理得到的二进制字符串进行整型处理,得到目标整型数值,将所述目标整型数值确定为所述节点距离;
将所述文件分片上传至所述上传节点,由所述上传节点对所述文件分片进行存储。
2.根据权利要求1所述的方法,其特征在于,所述从分布式存储系统包括的多个设备节点中确定文件分片的上传节点,包括:
通过中继节点,从所述多个设备节点中获取按照节点评估值从大到小的顺序排序在前的N个设备节点,将所述N个设备节点作为所述文件分片的上传节点;其中,所述多个设备节点的节点评估值是由所述中继节点基于所述多个设备节点的节点计算因子确定的,所述N为正整数;或者,
对于所述文件分片中的第一分片,当需要上传所述第一分片时,基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值,从所述多个设备节点中选择节点评估值最大的设备节点,作为所述第一分片的上传节点;其中,所述第一分片为所述文件分片中的任一分片。
3.如权利要求2所述的方法,其特征在于,所述基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值,包括:
对于所述多个设备节点中的第一设备节点,确定所述第一设备节点的节点计算因子中各个计算因子的权重,所述第一设备节点为所述多个设备节点中的任一个;
基于所述第一设备节点的节点计算因子中各个计算因子的权重,对所述第一设备节点的节点计算因子中所有计算因子进行加权求和,得到所述第一设备节点的节点评估值。
4.如权利要求1-3任一所述的方法,其特征在于,所述将所述文件分片上传至所述上传节点,由所述上传节点对所述文件分片进行存储,包括:
基于所述文件分片,生成所述文件分片的分片索引对象,所述分片索引对象包括所述文件分片以及所述文件分片的索引;
将所述文件分片的分片索引对象上传至所述上传节点,由所述上传节点对所述分片索引对象进行存储。
5.如权利要求4所述的方法,其特征在于,所述基于所述文件分片,生成所述文件分片的分片索引对象,包括:
对所述文件分片进行特征提取,得到所述文件分片的特征值,将所述文件分片的特征值作为所述文件分片的索引;
基于所述文件分片以及所述文件分片的索引,生成所述文件分片的分片索引对象。
6.如权利要求4所述的方法,其特征在于,所述将所述文件分片的分片索引对象上传至所述上传节点之前,还包括:
基于所述文件分片中所有分片的索引,生成所述目标文件的索引;
基于所述目标文件的索引,以及所述文件分片中所有分片的索引,生成所述目标文件的文件索引对象,所述文件索引对象包括所述目标文件的索引以及所述文件分片中所有分片的索引;
将所述文件分片的分片索引对象上传至所述上传节点,包括:
将所述文件分片的分片索引对象,以及所述目标文件的文件索引对象上传至所述上传节点中,由所述上传节点进行存储。
7.如权利要求6所述的方法,其特征在于,所述方法还包括:
确定所述目标文件的检索信息,所述目标文件的检索信息包括所述目标文件的文件标识以及所述目标文件的索引;
将所述目标文件的检索信息上传至中继节点中。
8.一种分布式存储系统的数据存储方法,其特征在于,所述方法包括:
确定分布式存储系统包括的多个设备节点的节点计算因子,所述节点计算因子包括节点距离,所述节点距离用于指示设备节点与用户节点之间的哈希距离;所述节点距离的确定过程包括:对用户节点标识对应的二进制字符串和设备节点标识对应的二进制字符串进行异或处理,再对异或处理得到的二进制字符串进行整型处理,得到目标整型数值,将所述目标整型数值确定为所述节点距离;
基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值;
将所述多个设备的节点评估值发送给用户节点;所述用户节点用于基于所述多个设备节点的节点评估值确定文件分片的上传节点,将所述文件分片上传至所述上传节点,由所述上传节点对所述文件分片进行存储;其中,所述文件分片包括数据分片和冗余分片;
所述用户节点还用于若目标文件的数据大小大于分块数据阈值,对所述目标文件进行分块处理,得到文件分块;若所述文件分块的数据大小小于或等于分片数据阈值,确定第一数量和第二数量均为M;其中,所述第一数量为所述文件分块待划分的数据分片的数量,所述第二数量为所述文件分块待划分的冗余分片的数量,M为正整数;若所述文件分块的数据大小大于所述分片数据阈值,则基于所述文件分块的数据大小与所述分片数据阈值之间的比值,确定所述第一数量;基于所述第一数量和预设冗余度,确定所述第二数量;其中,所述预设冗余度为冗余分片的数量与数据分片的数量之间的比值;基于冗余分片算法,按照所述第一数量和所述第二数量对所述文件分块进行分片处理,得到第一数量的数据分片和第二数量的冗余分片;对所述文件分片进行备份。
9.如权利要求8所述的方法,其特征在于,所述将所述多个设备的节点评估值发送给用户节点,包括:
当接收到所述用户节点的节点评估请求时,将所述多个设备节点的节点评估值发送给所述用户节点;或者,
当接收到所述用户节点的节点评估请求时,从所述多个设备节点中获取按照节点评估值从大到小的顺序排序在前的N个设备节点,将所述N个设备节点的节点标识发送给所述用户节点,所述N为正整数。
10.一种分布式存储系统的数据存储方法,其特征在于,所述方法包括:
若目标文件的数据大小大于分块数据阈值,对所述目标文件进行分块处理,得到文件分块;
若所述文件分块的数据大小小于或等于分片数据阈值,确定第一数量和第二数量均为M;其中,所述第一数量为所述文件分块待划分的数据分片的数量,所述第二数量为所述文件分块待划分的冗余分片的数量,M为正整数;
若所述文件分块的数据大小大于所述分片数据阈值,则基于所述文件分块的数据大小与所述分片数据阈值之间的比值,确定所述第一数量;基于所述第一数量和预设冗余度,确定所述第二数量;其中,所述预设冗余度为冗余分片的数量与数据分片的数量之间的比值;
基于冗余分片算法,按照所述第一数量和所述第二数量对所述文件分块进行分片处理,得到第一数量的数据分片和第二数量的冗余分片;
对文件分片进行备份,所述文件分片包括数据分片和冗余分片;
对于所述目标文件的文件分片,基于分布式存储系统包括的多个设备节点的节点计算因子,从所述多个设备节点中确定所述文件分片的下载节点;
其中,所述节点计算因子包括节点距离,所述节点距离用于指示设备节点与用户节点之间的哈希距离;所述节点距离的确定过程包括:对用户节点标识对应的二进制字符串和设备节点标识对应的二进制字符串进行异或处理,再对异或处理得到的二进制字符串进行整型处理,得到目标整型数值,将所述目标整型数值确定为所述节点距离;
从所述文件分片的下载节点,下载所述目标文件的文件分片;
对下载的文件分片进行聚合,得到所述目标文件。
11.如权利要求10所述的方法,其特征在于,所述基于分布式存储系统中多个设备节点的节点计算因子,从所述多个设备节点中确定所述文件分片的下载节点,包括:
对于所述文件分片中的第一分片,当需要下载所述第一分片时,基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值,所述第一分片为所述文件分片中的任一分片;
从所述多个设备节点中选择节点评估值最大的设备节点,作为所述第一分片的下载节点。
12.如权利要求11所述的方法,其特征在于,所述基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值,包括:
对于所述多个设备节点中的第一设备节点,确定所述第一设备节点的节点计算因子中各个计算因子的权重,所述第一设备节点为所述多个设备节点中的任一个;
基于所述第一设备节点的节点计算因子中各个计算因子的权重,对所述第一设备节点的节点计算因子中的多个计算因子进行加权求和,得到所述第一设备节点的节点评估值。
13.如权利要求10-12任一所述的方法,其特征在于,所述从所述文件分片的下载节点,下载所述目标文件的文件分片,包括:
获取第一分片的索引,所述第一分片为所述目标文件的文件分片中的任一分片;
若根据所述第一分片的索引,检测到所述第一分片的下载节点中存储有第一分片索引对象,则从所述第一分片索引对象中获取所述第一分片,所述第一分片索引对象包括所述第一分片以及所述第一分片的索引。
14.如权利要求13所述的方法,其特征在于,所述获取第一分片的索引之前,还包括:
基于所述多个设备节点的节点计算因子,从所述多个设备节点中确定所述目标文件的文件索引对象的下载节点,所述文件索引对象包括所述目标文件的索引以及所述目标文件的文件分片中所有分片的索引;
从所述文件索引对象的下载节点,下载所述文件索引对象;
所述获取第一分片的索引,包括:
从所述文件索引对象中获取所述第一分片的索引。
15.如权利要求14所述的方法,其特征在于,所述从所述文件索引对象的下载节点,下载所述文件索引对象之前,还包括:
根据所述目标文件的文件标识,从中继节点中获取所述目标文件的索引,所述中继节点存储有所述目标文件的检索信息,所述检索信息包括所述目标文件的文件标识以及所述目标文件的索引;
所述从所述文件索引对象的下载节点,下载所述文件索引对象,包括:
根据所述目标文件的索引,从所述文件索引对象的下载节点,下载所述文件索引对象。
16.一种分布式存储系统的数据存储装置,其特征在于,所述装置包括:
确定模块,用于若目标文件的数据大小大于分块数据阈值,对所述目标文件进行分块处理,得到文件分块;若所述文件分块的数据大小小于或等于分片数据阈值,确定第一数量和第二数量均为M;其中,所述第一数量为所述文件分块待划分的数据分片的数量,所述第二数量为所述文件分块待划分的冗余分片的数量,M为正整数;若所述文件分块的数据大小大于所述分片数据阈值,则基于所述文件分块的数据大小与所述分片数据阈值之间的比值,确定所述第一数量;基于所述第一数量和预设冗余度,确定所述第二数量;其中,所述预设冗余度为冗余分片的数量与数据分片的数量之间的比值;基于冗余分片算法,按照所述第一数量和所述第二数量对所述文件分块进行分片处理,得到第一数量的数据分片和第二数量的冗余分片;对文件分片进行备份,所述文件分片包括数据分片和冗余分片;从分布式存储系统包括的多个设备节点中确定文件分片的上传节点,所述上传节点是基于所述多个设备节点的节点计算因子确定得到;
其中,所述节点计算因子包括节点距离,所述节点距离用于指示设备节点与用户节点之间的哈希距离;所述节点距离的确定过程包括:对用户节点标识对应的二进制字符串和设备节点标识对应的二进制字符串进行异或处理,再对异或处理得到的二进制字符串进行整型处理,得到目标整型数值,将所述目标整型数值确定为所述节点距离;
上传模块,用于将所述文件分片上传至所述上传节点,由所述上传节点对所述文件分片进行存储。
17.一种分布式存储系统的数据存储装置,其特征在于,所述装置包括:
第一确定模块,用于确定分布式存储系统包括的多个设备节点的节点计算因子,所述节点计算因子包括节点距离,所述节点距离用于指示设备节点与用户节点之间的哈希距离;所述节点距离的确定过程包括:对用户节点标识对应的二进制字符串和设备节点标识对应的二进制字符串进行异或处理,再对异或处理得到的二进制字符串进行整型处理,得到目标整型数值,将所述目标整型数值确定为所述节点距离;
第二确定模块,用于基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值;将所述多个设备的节点评估值发送给用户节点;所述用户节点用于基于所述多个设备节点的节点评估值确定文件分片的上传节点,将所述文件分片上传至所述上传节点,由所述上传节点对所述文件分片进行存储;其中,所述文件分片包括数据分片和冗余分片;
所述用户节点还用于若目标文件的数据大小大于分块数据阈值,对所述目标文件进行分块处理,得到文件分块;若所述文件分块的数据大小小于或等于分片数据阈值,确定第一数量和第二数量均为M;其中,所述第一数量为所述文件分块待划分的数据分片的数量,所述第二数量为所述文件分块待划分的冗余分片的数量,M为正整数;若所述文件分块的数据大小大于所述分片数据阈值,则基于所述文件分块的数据大小与所述分片数据阈值之间的比值,确定所述第一数量;基于所述第一数量和预设冗余度,确定所述第二数量;其中,所述预设冗余度为冗余分片的数量与数据分片的数量之间的比值;基于冗余分片算法,按照所述第一数量和所述第二数量对所述文件分块进行分片处理,得到第一数量的数据分片和第二数量的冗余分片;对所述文件分片进行备份。
18.一种分布式存储系统的数据存储装置,其特征在于,所述装置包括:
确定模块,用于若目标文件的数据大小大于分块数据阈值,对所述目标文件进行分块处理,得到文件分块;若所述文件分块的数据大小小于或等于分片数据阈值,确定第一数量和第二数量均为M;其中,所述第一数量为所述文件分块待划分的数据分片的数量,所述第二数量为所述文件分块待划分的冗余分片的数量,M为正整数;若所述文件分块的数据大小大于所述分片数据阈值,则基于所述文件分块的数据大小与所述分片数据阈值之间的比值,确定所述第一数量;基于所述第一数量和预设冗余度,确定所述第二数量;其中,所述预设冗余度为冗余分片的数量与数据分片的数量之间的比值;基于冗余分片算法,按照所述第一数量和所述第二数量对所述文件分块进行分片处理,得到第一数量的数据分片和第二数量的冗余分片对文件分片进行备份,所述文件分片包括数据分片和冗余分片;对于所述目标文件的文件分片,基于分布式存储系统包括的多个设备节点的节点计算因子,从所述多个设备节点中确定所述文件分片的下载节点;
其中,所述节点计算因子包括节点距离,所述节点距离用于指示设备节点与用户节点之间的哈希距离;所述节点距离的确定过程包括:对用户节点标识对应的二进制字符串和设备节点标识对应的二进制字符串进行异或处理,再对异或处理得到的二进制字符串进行整型处理,得到目标整型数值,将所述目标整型数值确定为所述节点距离;
下载模块,用于从所述文件分片的下载节点,下载所述目标文件的文件分片;
聚合模块,用于对下载的文件分片进行聚合,得到所述目标文件。
19.一种分布式存储系统,其特征在于,所述系统包括用户节点和用于存储数据的多个设备节点;
所述用户节点,用于若目标文件的数据大小大于分块数据阈值,对所述目标文件进行分块处理,得到文件分块;若所述文件分块的数据大小小于或等于分片数据阈值,确定第一数量和第二数量均为M;其中,所述第一数量为所述文件分块待划分的数据分片的数量,所述第二数量为所述文件分块待划分的冗余分片的数量,M为正整数;若所述文件分块的数据大小大于所述分片数据阈值,则基于所述文件分块的数据大小与所述分片数据阈值之间的比值,确定所述第一数量;基于所述第一数量和预设冗余度,确定所述第二数量;其中,所述预设冗余度为冗余分片的数量与数据分片的数量之间的比值;基于冗余分片算法,按照所述第一数量和所述第二数量对所述文件分块进行分片处理,得到第一数量的数据分片和第二数量的冗余分片;对文件分片进行备份,所述文件分片包括数据分片和冗余分片;
所述用户节点,还用于从所述多个设备节点中确定所述目标文件的文件分片的传输节点,所述传输节点是基于所述多个设备节点的节点计算因子确定得到;所述节点计算因子包括节点距离,所述节点距离用于指示设备节点与所述用户节点之间的距离;所述节点距离的确定过程包括:对用户节点标识对应的二进制字符串和设备节点标识对应的二进制字符串进行异或处理,再对异或处理得到的二进制字符串进行整型处理,得到目标整型数值,将所述目标整型数值确定为所述节点距离;
所述用户节点,用于通过所述传输节点,对所述文件分片进行传输。
20.如权利要求19所述的系统,其特征在于,
所述用户节点,用于基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值,基于所述多个设备节点的节点评估值,从所述多个设备节点中确定所述文件分片的传输节点。
21.如权利要求19所述的系统,其特征在于,所述系统还包括中继节点;
所述中继节点,用于基于所述多个设备节点的节点计算因子,确定所述多个设备节点的节点评估值;
所述用户节点,用于通过所述中继节点,从所述多个设备节点中获取按照节点评估值从大到小的顺序排序在前的N个设备节点,作为所述文件分片的传输节点,所述N为正整数。
22.如权利要求19所述的系统,其特征在于,
所述用户节点,用于若所述传输节点为上传节点,则将所述文件分片上传至所述上传节点,由所述上传节点对所述文件分片进行存储;若所述传输节点为下载节点,则从所述文件分片的下载节点,下载所述目标文件的文件分片,对下载的文件分片进行聚合,得到所述目标文件。
23.一种电子设备,其特征在于,包括:
处理器;
存储器,所述存储器存储有所述处理器可执行的指令;
其中,所述处理器被配置为执行所述指令并实现权利要求1-15所述的任一项方法的步骤。
CN202010456598.0A 2020-05-26 2020-05-26 分布式存储系统的数据存储方法、装置、系统及设备 Active CN113726832B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010456598.0A CN113726832B (zh) 2020-05-26 2020-05-26 分布式存储系统的数据存储方法、装置、系统及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010456598.0A CN113726832B (zh) 2020-05-26 2020-05-26 分布式存储系统的数据存储方法、装置、系统及设备

Publications (2)

Publication Number Publication Date
CN113726832A CN113726832A (zh) 2021-11-30
CN113726832B true CN113726832B (zh) 2024-03-05

Family

ID=78672026

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010456598.0A Active CN113726832B (zh) 2020-05-26 2020-05-26 分布式存储系统的数据存储方法、装置、系统及设备

Country Status (1)

Country Link
CN (1) CN113726832B (zh)

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101227460A (zh) * 2007-01-19 2008-07-23 秦晨 分布式文件上传、下载方法及其装置和系统
CN101291195A (zh) * 2008-05-23 2008-10-22 中兴通讯股份有限公司 实现断点续传的文件下载的方法、系统及终端
WO2012000258A1 (zh) * 2010-06-29 2012-01-05 阿尔卡特朗讯 无线通信系统中基于分布式存储的文件传输方法
CN102546755A (zh) * 2011-12-12 2012-07-04 华中科技大学 云存储系统的数据存储方法
CN104836851A (zh) * 2015-04-21 2015-08-12 成都影泰科技有限公司 一种数据备份方法
CN105159603A (zh) * 2015-08-18 2015-12-16 福建省海峡信息技术有限公司 一种分布式数据存储系统的修复方法
CN105187551A (zh) * 2015-09-29 2015-12-23 成都四象联创科技有限公司 基于云平台的分布式计算方法
CN106527981A (zh) * 2016-10-31 2017-03-22 华中科技大学 一种基于配置的自适应分布式存储系统的数据分片方法
WO2017050141A1 (zh) * 2015-09-24 2017-03-30 网宿科技股份有限公司 基于分布式存储的文件分发系统及方法
CN109857710A (zh) * 2019-01-04 2019-06-07 平安科技(深圳)有限公司 文件存储方法及终端设备

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE60131900T2 (de) * 2000-10-26 2008-12-04 Flood, James C. jun., Portland Verfahren und system zur verwaltung von verteilten inhalten und verwandten metadaten
US9218359B2 (en) * 2010-07-02 2015-12-22 Code Systems Corporation Method and system for profiling virtual application resource utilization patterns by executing virtualized application
US20120011200A1 (en) * 2010-07-06 2012-01-12 Roxbeam Media Network Corporation Method and apparatus for data storage in a peer-to-peer network
US20180052735A1 (en) * 2013-05-03 2018-02-22 International Business Machines Corporation Efficient, secure, storage of meaningful content as part of a dsn memory

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101227460A (zh) * 2007-01-19 2008-07-23 秦晨 分布式文件上传、下载方法及其装置和系统
CN101291195A (zh) * 2008-05-23 2008-10-22 中兴通讯股份有限公司 实现断点续传的文件下载的方法、系统及终端
WO2012000258A1 (zh) * 2010-06-29 2012-01-05 阿尔卡特朗讯 无线通信系统中基于分布式存储的文件传输方法
CN102546755A (zh) * 2011-12-12 2012-07-04 华中科技大学 云存储系统的数据存储方法
CN104836851A (zh) * 2015-04-21 2015-08-12 成都影泰科技有限公司 一种数据备份方法
CN105159603A (zh) * 2015-08-18 2015-12-16 福建省海峡信息技术有限公司 一种分布式数据存储系统的修复方法
WO2017050141A1 (zh) * 2015-09-24 2017-03-30 网宿科技股份有限公司 基于分布式存储的文件分发系统及方法
CN105187551A (zh) * 2015-09-29 2015-12-23 成都四象联创科技有限公司 基于云平台的分布式计算方法
CN106527981A (zh) * 2016-10-31 2017-03-22 华中科技大学 一种基于配置的自适应分布式存储系统的数据分片方法
CN109857710A (zh) * 2019-01-04 2019-06-07 平安科技(深圳)有限公司 文件存储方法及终端设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于位置感知的P2P邻居节点选择机制;樊瑞等;桂林电子科技大学学报;正文第1-3节 *

Also Published As

Publication number Publication date
CN113726832A (zh) 2021-11-30

Similar Documents

Publication Publication Date Title
US10466925B1 (en) Compression signaling for replication process in a content addressable storage system
US20210227007A1 (en) Data storage method, encoding device, and decoding device
CN110347651B (zh) 基于云存储的数据同步方法、装置、设备及存储介质
CN108134775B (zh) 一种数据处理方法和设备
US20210160319A1 (en) Data Sending Method and Apparatus, and Data Receiving Method and Apparatus
EP3376393A1 (en) Data storage method and apparatus
CN103581230A (zh) 文件传输系统和方法、接收端、发送端
US20200274943A1 (en) Data Processing Method and Apparatus, Server, and Controller
CN104486407A (zh) 编号的生成方法及装置
WO2021012162A1 (zh) 存储系统数据压缩的方法、装置、设备及可读存储介质
CN113687964B (zh) 数据处理方法、装置、电子设备、存储介质及程序产品
CN111291770B (zh) 一种参数配置方法及装置
CN111611129A (zh) PaaS云平台的性能监控方法及装置
CN110324681B (zh) 多媒体数据的切片方法、装置、存储介质及传输系统
CN109710502B (zh) 日志传输方法、装置及存储介质
CN110971533B (zh) 用于数据通信的方法、服务器装置、客户端装置和介质
CN104092754A (zh) 文件存储系统和文件存储方法
CN113726832B (zh) 分布式存储系统的数据存储方法、装置、系统及设备
CN112650755A (zh) 数据存储方法、查询数据的方法、数据库、以及可读介质
CN113138969A (zh) 数据传输方法、装置、电子设备和计算机可读存储介质
CN108897497B (zh) 一种无中心的数据管理方法及装置
CN116614495A (zh) 数据上传方法、装置、设备、存储介质及程序产品
CN114172998B (zh) 一种文件传输方法、装置、电子设备及存储介质
CN109766363B (zh) 流式数据处理方法、系统、电子设备及存储介质
CN115297104A (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