CN112230861B - 一种基于一致性哈希算法的数据存储方法及终端 - Google Patents
一种基于一致性哈希算法的数据存储方法及终端 Download PDFInfo
- Publication number
- CN112230861B CN112230861B CN202011155379.5A CN202011155379A CN112230861B CN 112230861 B CN112230861 B CN 112230861B CN 202011155379 A CN202011155379 A CN 202011155379A CN 112230861 B CN112230861 B CN 112230861B
- Authority
- CN
- China
- Prior art keywords
- file
- hash value
- physical disk
- hash
- virtual node
- 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
- 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/1004—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
- G06F16/137—Hash-based
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- 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
- 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/0643—Management of files
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种基于一致性哈希算法的数据存储方法及终端,将物理磁盘映射为大于一个的虚拟节点,并计算每一个虚拟节点的第一哈希值;将所有虚拟节点按第一哈希值的大小顺序排列,组成哈希环;接收文件存储请求,文件存储请求包括待存储文件及文件名;计算文件名对应的第二哈希值,在哈希环上按预设方向寻找到与第二哈希值最接近的第一哈希值,将文件名对应的所述待存储待存储文件存储到与第二哈希值最接近的第一哈希值所对应的虚拟节点所处的物理磁盘上;本发明把单个物理磁盘映射为多个虚拟节点,通过文件名作为键值对待存储文件进行标识,提高了文件查找时的效率。
Description
技术领域
本发明涉及数据存储领域,尤其涉及一种基于一致性哈希算法的数据存储方法及终端。
背景技术
近年来,随着数据规模的爆炸式增长,对磁盘的存储冗余能力和性能提出了更高的要求;传统的磁盘管理方法是使用RAID(Redundant Arrays of Independent Disks,独立冗余磁盘阵列)技术,通过硬件RAID或者软件RAID的方式将磁盘组成磁盘池,实现冗余存储;之后纠删码技术的出现,为数据冗余存储提供了更好的解决方案。相比传统的RAID技术,纠删码能够实现更好的磁盘冗余度,更少的重建时间,以及更好的数据存取性能,大大提高了磁盘的使用效率。
但传统的分布式哈希算法,面临节点分布不均的问题,尤其在动态增加节点后,即使原先的分布均匀也很难保证继续均匀。由此带来另一个较为严重的缺点是,当一个节异常时,该节点的压力全部转移到相邻的一个节点,当加入一个新节点时,只能为一个相邻节点分摊压力。
发明内容
本发明所要解决的技术问题是:提出一种基于一致性哈希算法的数据存储方法及终端,实现本地磁盘空间的高效利用。
为了解决上述技术问题,本发明采用的一种技术方案为:
一种基于一致性哈希算法的数据存储方法,包括步骤:
S1、将物理磁盘映射为大于一个的虚拟节点,并计算每一个所述虚拟节点的第一哈希值;
S2、将所有所述虚拟节点按第一哈希值的大小顺序排列,组成哈希环;
S3、接收文件存储请求,所述文件存储请求包括待存储文件及文件名;
S4、计算所述文件名对应的第二哈希值,在所述哈希环上按预设方向寻找到与所述第二哈希值最接近的第一哈希值,将所述文件名对应的所述待存储文件存储到与所述第二哈希值最接近的所述第一哈希值所对应的虚拟节点所处的物理磁盘上。
为了解决上述技术问题,本发明采用的另一种技术方案为:
一种基于一致性哈希算法的数据存储终端,包括存储器、处理器及存储在存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
S1、将物理磁盘映射为大于一个的虚拟节点,并计算每一个所述虚拟节点的第一哈希值;
S2、将所有所述虚拟节点按第一哈希值的大小顺序排列,组成哈希环;
S3、接收文件存储请求,所述文件存储请求包括待存储文件及文件名;
S4、计算所述文件名对应的第二哈希值,在所述哈希环上按预设方向寻找到与所述第二哈希值最接近的第一哈希值,将所述文件名对应的所述待存储文件存储到与所述第二哈希值最接近的所述第一哈希值所对应的虚拟节点所处的物理磁盘上。
本发明的有益效果在于:将一个物理磁盘映射为多个虚拟节点,通过哈希值标识虚拟节点,在存储文件时,以文件名所对应的哈希值标识文件,根据文件名所对应的哈希值确定相应虚拟节点,进而确定文件对应的第一个物理磁盘;该方法对比简单的副本策略,提高了单个服务器上多块磁盘的使用效率,同时也增强了数据的冗余安全性;另外通过文件名作为唯一键值方式,提高了文件的查找效率。
附图说明
图1为本发明实施例的一种基于一致性哈希算法的数据存储方法的步骤流程图;
图2为本发明实施例的一种基于一致性哈希算法的数据存储终端的结构示意图;
图3为本发明实施例的一种基于一致性哈希算法的数据存储方法的一种实施步骤示意图;
图4为本发明实施例的一种虚拟节点数据存取示意图;
图5为本发明实施例的一种纠删码编码过程示意图;
图6为本发明实施例的一种根据纠删码重建数据过程示意图;
图7为本发明实施例的一种增加物理磁盘后的哈希环示意图;
标号说明:
1、一种基于一致性哈希算法的数据存储终端;2、处理器;3、存储器。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
请参照图1,一种基于一致性哈希算法的数据存储方法,包括步骤:
S1、将物理磁盘映射为大于一个的虚拟节点,并计算每一个所述虚拟节点的第一哈希值;
S2、将所有所述虚拟节点按第一哈希值的大小顺序排列,组成哈希环;
S3、接收文件存储请求,所述文件存储请求包括待存储文件及文件名;
S4、计算所述文件名对应的第二哈希值,在所述哈希环上按预设方向寻找到与所述第二哈希值最接近的第一哈希值,将所述文件名对应的所述待存储文件存储到与所述第二哈希值最接近的所述第一哈希值所对应的虚拟节点所处的物理磁盘上。
从上述描述可知,本发明的有益效果在于:将一个物理磁盘映射为多个虚拟节点,通过哈希值标识虚拟节点,在存储文件时,以文件名所对应的哈希值标识文件,根据文件名所对应的哈希值确定相应虚拟节点,将文件存储到虚拟节点所对应的物理磁盘上,因把单个物理磁盘映射为多个虚拟节点,增加了哈希环上节点的数量,使得哈希环上节点之间的距离更加平均,文件名所计算出的哈希值落在各个虚拟节点上的概率更加平均,一定程度上减缓了单个物理磁盘热度过高的情况,通过文件名作为键值对待存储文件进行标识,提高了文件查找时的效率。
进一步的,所述S1具体为:
构建物理磁盘顺序表,并将所述物理磁盘顺序表中的每个物理磁盘映射为大于一个的虚拟节点。
所述S2具体为:
将所述物理磁盘顺序表中所有所述物理磁盘所对应的所有所述虚拟节点按第一哈希值的大小顺序排列,组成哈希环。
由上述描述可知,构建物理磁盘顺序表存储物理磁盘信息,在数据的读取和写入过程中提高了效率。
进一步的,所述S4具体为:
S41、使用预设哈希算法计算所述文件名对应的第二哈希值,所述第二哈希值和所述第一哈希值的均采用所述预设哈希算法进行计算;
S42、使用纠删码对所述待存储文件进行分块得到文件块集合,所述文件块集合包括顺序排列的多个文件块;
S43、在所述哈希环上按预设方向寻找到与所述第二哈希值最接近的第一哈希值,将所述文件名对应的文件块集合中的首个文件块存储到与所述第二哈希值最接近的所述第一哈希值所对应的虚拟节点所处的第一物理磁盘上;
S44、获取第一物理磁盘在所述物理磁盘顺序表上的位置,将除去所述首个文件块外的其余N个文件块按照顺序分别存储到在所述物理磁盘顺序表上位于所述第一物理磁盘后的N个物理磁盘上。
由上述描述可知,将待存储文件通过纠删码进行分块得到文件块集合,能够使用文件名作为唯一标识,将文件以纠删码方式存储到服务器的多块本地磁盘中,使得文件块存在冗余数据,即使数据出现损坏也能够及时恢复原始数据,能够容忍一定程度内的数据损坏,提高了文件存储系统自身的鲁棒性;并且,找到第一个物理磁盘存储第一个文件块之后,就不通过在哈希环上寻找虚拟节点的方式,而是直接通过事先构建的物理磁盘顺序表存储其余的文件块,在进行文件存取时无需进行多次虚拟节点与物理磁盘之间的映射,加快了进行文件存取的效率,在进行磁盘的增减时,只需对发生变化的磁盘上的数据进行迁移,缩短了数据重建的时间,保证了系统的可用性。
进一步的,述S4中所述将所述文件名对应的文件存储到所述第一哈希值对应的虚拟节点所处的物理磁盘上具体为:
获取所述物理磁盘的磁盘名;
对所述第二哈希值取模,得到第一标识;
对所述第一标识取模,得到第二标识;
根据所述磁盘名、所述第一标识及所述第二标识生成文件存储路径;
根据所述文件存储路径将所述文件名对应的待存储文件存储到所述第一哈希值对应的虚拟节点所处的物理磁盘上。
由上述描述可知,在存储文件时以文件名所对应的第二哈希值取模作为存储路径的一部分,在获取文件时只要找到对应的物理磁盘,就能够根据文件名计算得到文件的存储路径,并且同一文件所分出的不同文件块的存储路径除了物理磁盘名不同外其余部分完全相同,只需获取首个文件块所存储的物理节点,就能够快速获取到其余文件块所存储的路径,加快了文件搜索的速度。
进一步的,还包括:
在所述物理磁盘顺序表中添加第三物理磁盘,将所述第三物理磁盘映射为大于一个的子节点,并计算每一个所述子节点的第三哈希值;
根据所述第三哈希值,将每一个所述子节点置入所述哈希环中;
获取与所述子节点相邻的邻虚拟节点,获取所述邻虚拟节点对应的邻哈希值;
将所述第二哈希值在第三哈希值和邻哈希值区间内的已存储文件存入所述第三物理磁盘。
由上述描述可知,若现有的物理磁盘无法满足存储要求,需要进行扩容,增加物理磁盘之后无需对所有要迁移的数据块进行重新分布,而只需对部分有变化的进行重新分布。在进行扩容的过程中减小了对磁盘内数据的迁移量,缩短了数据重建的时间。
请参照图2,一种基于一致性哈希算法的数据存储终端,包括存储器、处理器及存储在存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
S1、将物理磁盘映射为大于一个的虚拟节点,并计算每一个所述虚拟节点的第一哈希值;
S2、将所有所述虚拟节点按第一哈希值的大小顺序排列,组成哈希环;
S3、接收文件存储请求,所述文件存储请求包括待存储文件及文件名;
S4、计算所述文件名对应的第二哈希值,在所述哈希环上按预设方向寻找到与所述第二哈希值最接近的第一哈希值,将所述文件名对应的所述待存储文件存储到与所述第二哈希值最接近的所述第一哈希值所对应的虚拟节点所处的物理磁盘上。
本发明的有益效果在于:将一个物理磁盘映射为多个虚拟节点,通过哈希值标识虚拟节点,在存储文件时,以文件名所对应的哈希值标识文件,根据文件名所对应的哈希值确定相应虚拟节点,将文件存储到虚拟节点所对应的物理磁盘上,因把单个物理磁盘映射为多个虚拟节点,增加了哈希环上节点的数量,使得哈希环上节点之间的距离更加平均,文件名所计算出的哈希值落在各个虚拟节点上的概率更加平均,一定程度上减缓了单个物理磁盘热度过高的情况,通过文件名作为键值对待存储文件进行标识,提高了文件查找时的效率。
进一步的,所述S1具体为:
构建物理磁盘顺序表,并将所述物理磁盘顺序表中的每个物理磁盘映射为大于一个的虚拟节点。
所述S2具体为:
将所述物理磁盘顺序表中所有所述物理磁盘所对应的所有所述虚拟节点按第一哈希值的大小顺序排列,组成哈希环。
由上述描述可知,构建物理磁盘顺序表存储物理磁盘信息,在数据的读取和写入过程中提高了效率。
进一步的,所述S4具体为:
S41、使用预设哈希算法计算所述文件名对应的第二哈希值,所述第二哈希值和所述第一哈希值的均采用所述预设哈希算法进行计算;
S42、使用纠删码对所述待存储文件进行分块得到文件块集合,所述文件块集合包括顺序排列的多个文件块;
S43、在所述哈希环上按预设方向寻找到与所述第二哈希值最接近的第一哈希值,将所述文件名对应的文件块集合中的首个文件块存储到与所述第二哈希值最接近的所述第一哈希值所对应的虚拟节点所处的第一物理磁盘上;
S44、获取第一物理磁盘在所述物理磁盘顺序表上的位置,将除去所述首个文件块外的其余N个文件块按照顺序分别存储到在所述物理磁盘顺序表上位于所述第一物理磁盘后的N个物理磁盘上。
由上述描述可知,将待存储文件通过纠删码进行分块得到文件块集合,能够使用文件名作为唯一标识,将文件以纠删码方式存储到服务器的多块本地磁盘中,使得文件块存在冗余数据,即使数据出现损坏也能够及时恢复原始数据,能够容忍一定程度内的数据损坏,提高了文件存储系统自身的鲁棒性;并且,找到第一个物理磁盘存储第一个文件块之后,就不通过在哈希环上寻找虚拟节点的方式,而是直接通过事先构建的物理磁盘顺序表存储其余的文件块,在进行文件存取时无需进行多次虚拟节点与物理磁盘之间的映射,加快了进行文件存取的效率,在进行磁盘的增减时,只需对发生变化的磁盘上的数据进行迁移,缩短了数据重建的时间,保证了系统的可用性。
进一步的,述S4中所述将所述文件名对应的文件存储到所述第一哈希值对应的虚拟节点所处的物理磁盘上具体为:
获取所述物理磁盘的磁盘名;
对所述第二哈希值取模,得到第一标识;
对所述第一标识取模,得到第二标识;
根据所述磁盘名、所述第一标识及所述第二标识生成文件存储路径;
根据所述文件存储路径将所述文件名对应的待存储文件存储到所述第一哈希值对应的虚拟节点所处的物理磁盘上。
由上述描述可知,在存储文件时以文件名所对应的第二哈希值取模作为存储路径的一部分,在获取文件时只要找到对应的物理磁盘,就能够根据文件名计算得到文件的存储路径,并且同一文件所分出的不同文件块的存储路径除了物理磁盘名不同外其余部分完全相同,只需获取首个文件块所存储的物理节点,就能够快速获取到其余文件块所存储的路径,加快了文件搜索的速度。
进一步的,还包括:
在所述物理磁盘顺序表中添加第三物理磁盘,将所述第三物理磁盘映射为大于一个的子节点,并计算每一个所述子节点的第三哈希值;
根据所述第三哈希值,将每一个所述子节点置入所述哈希环中;
获取与所述子节点相邻的邻虚拟节点,获取所述邻虚拟节点对应的邻哈希值;
将所述第二哈希值在第三哈希值和邻哈希值区间内的待存储文件存入所述第三物理磁盘。
由上述描述可知,若现有的物理磁盘无法满足存储要求,需要进行扩容,增加物理磁盘之后无需对所有要迁移的数据块进行重新分布,而只需对部分有变化的进行重新分布。在进行扩容的过程中减小了对磁盘内数据的迁移量,缩短了数据重建的时间。
请参照图1及图3,本发明的实施例一为:
一种基于一致性哈希算法的数据存储方法,包括步骤:
S1、构建物理磁盘顺序表,并将所述物理磁盘顺序表中的每个物理磁盘映射为大于一个的虚拟节点;
S2、将所述物理磁盘顺序表中所有所述物理磁盘所对应的所有所述虚拟节点按第一哈希值的大小顺序排列,组成哈希环;
在一种可选的实施方式中,哈希环即各个虚拟节点的拓扑逻辑结构为chord环;
S3、接收文件存储请求,所述文件存储请求包括待存储文件及文件名,以文件名作为存储key(键值);
S4、计算所述文件名对应的第二哈希值,在所述哈希环上按预设方向寻找到与所述第二哈希值最接近的第一哈希值,将所述文件名对应的所述待存储文件存储到与所述第二哈希值最接近的所述第一哈希值所对应的虚拟节点所处的物理磁盘上,此时所述待存储文件转变为已存储文件;
请参照图4,在一种可选的实施方式中,所有所述虚拟节点按第一哈希值顺时针依次递增的顺序排列组成哈希环,计算文件名对应的第二哈希值,在哈希环上顺时针寻找到与第二哈希值最接近的第一哈希值,并将文件名对应的所述待存储文件存储到与所述第二哈希值最接近的所述第一哈希值所对应的虚拟节点所处的物理磁盘上;如计算出第二哈希值为52,则此待存储文件存储到哈希值为80的虚拟节点所对应的物理磁盘上;
其中,将所述文件名对应的文件存储到所述第一哈希值对应的虚拟节点所处的物理磁盘上具体为:获取所述物理磁盘的磁盘名;对所述第二哈希值取模,得到第一标识;对所述第一标识取模,得到第二标识;根据所述磁盘名、所述第一标识及所述第二标识生成文件存储路径;根据所述文件存储路径将所述文件名对应的待存储文件存储到所述第一哈希值对应的虚拟节点所处的物理磁盘上;如,一文件存储路径为dataX/first/second/文件名,dataX即为物理磁盘名,first目录名为该文件名计算得到的第二哈希值对256取模并转化为十六进制数所得到;second目录为first目录名再次对256取模,并转化为十六进制数所得到;
S4具体为:
S41、使用预设哈希算法计算所述文件名对应的第二哈希值,所述第二哈希值和所述第一哈希值的均采用所述预设哈希算法进行计算;
S42、使用纠删码对所述待存储文件进行分块得到文件块集合,所述文件块集合包括顺序排列的多个文件块;
在一种可选的实施方式中,采用RS纠删码对待存储文件进行分块,得到k+m个数据块,其中k为原始数据块个数,m为校验块个数;
S43、在所述哈希环上按预设方向寻找到与所述第二哈希值最接近的第一哈希值,将所述文件名对应的文件块集合中的首个文件块存储到与所述第二哈希值最接近的所述第一哈希值所对应的虚拟节点所处的第一物理磁盘上;
S44、获取第一物理磁盘在所述物理磁盘顺序表上的位置,将除去所述首个文件块外的其余N个文件块按照顺序分别存储到在所述物理磁盘顺序表上位于所述第一物理磁盘后的N个物理磁盘上。
请参照图7,本发明的实施例二为:
一种基于一致性哈希算法的数据存储方法,其与实施例一的不同之处在于:
还包括扩容:
在所述物理磁盘顺序表中添加第三物理磁盘,将所述第三物理磁盘映射为大于一个的子节点,并计算每一个所述子节点的第三哈希值;
根据所述第三哈希值,将每一个所述子节点置入所述哈希环中;
获取与所述子节点相邻的邻虚拟节点,获取所述邻虚拟节点对应的邻哈希值;
计算已存储的所有文件的第二哈希值,将所述第二哈希值在第三哈希值和邻哈希值区间内的待存储文件存入所述第三物理磁盘;
还包括删除物理磁盘:
从物理磁盘顺序表中删除第四物理磁盘,并从哈希环中删除第四物理磁盘映射的子节点,获取子节点所对应的第四哈希值;
获取与子节点相邻的第一邻虚拟节点及第二邻虚拟节点,获取第一邻虚拟节点所对应的第一邻哈希值;
计算已存储的所有文件的第二哈希值,将所述第二哈希值在第一邻哈希值和第四哈希值区间内的待存储文件存入所述第二邻虚拟节点;
请参照图7,如当增加一块新的磁盘时,假设新增加的磁盘标号为X,首先将新磁盘X更新到物理磁盘顺序表,然后为磁盘X分配新的子节点X0,X1…X10,并生成这些子节点对应的哈希值,将其信息更新到chord环中;对于增加磁盘后新写入的数据按之前的方法进行处理,而对于之前已存储的数据,则需要进行数据重建。
请参照图7,新增磁盘X子节点的哈希值为90、1000及5000,因进行文件存储时是在chord环(哈希环)上根据文件名所确定的第二哈希值顺时针确定最接近的虚拟节点(子节点)的第一哈希值,则需要进行数据重建的文件名所对应的哈希值区间为[80-90],[500-1000]…[3000-5000];
对于分布在上述需重建范围内的文件,将其存储初始节点更新为磁盘X,然后基于磁盘X在物理磁盘关系表中找到剩余的k+m-1个磁盘,最后将文件数据按纠删码编码方式存储到这k+m个磁盘中;
请参照图7,若减少磁盘X,首先更新chord环,将该磁盘子节点所对应的哈希值从chord环中删去,而对于减少磁盘X之前已存储的数据,则需要进行数据重建,需要进行数据重建的文件名的哈希值的范围为[80-90],[500-1000]…[3000-5000];
以文件名的哈希值分布在[80-90]区间内的文件重建为例,将文件名所对应的哈希值位于此区间内的文件存储到哈希值为120的虚拟节点所对应的磁盘A上,即将文件的存储初始节点更新为磁盘A,然后基于磁盘A在物理磁盘关系表中找到剩余的k+m-1个磁盘,最后将文件数据按纠删码编码方式存储到这k+m个磁盘中;
在一种可选的实施方式中,通过版本号标识物理磁盘与子节点之间的映射关系表,优先访问最新版本的映射关系表,若未能获得数据,则使用前一版本的映射关系表;映射关系表与物理磁盘顺序表关联,若获取到物理磁盘顺序表变化信号,则进行对应更新并更新版本号;
具体的,为了保证数据在重建过程中磁盘的可用性,为物理磁盘和其子节点的对应关系建立多个版本;在客户端读取文件时,首先访问最新版本的物理磁盘和其子节点表,如果通过该表查询到数据,则返回正确的数据;如果未获得数据,说明该数据尚在重建过程中,则使用老版本的物理磁盘和其子节点表,返回该文件的实际数据。同时在数据重建时,对于第二哈希值在第三哈希值和邻哈希值区间内的已存储文件在进行重新存储时,将比较数据重建后的需要存储的磁盘列表和之前数据的存储列表,只对发生变化的磁盘进行数据重新存储,对于没有变化的则保持原样;通过这种方式,缩短数据重建的时间。
请参照图3至图6,本发明的实施例三为:
将上述的一种基于一致性哈希算法的数据存储方法应用于实际场景中:
(1)如图3所示,构建本地磁盘顺序表A,B…N共N块磁盘;
(2)将每块磁盘映射成若干个磁盘子节点(虚拟节点),如映射为10个虚拟节点,磁盘A的虚拟节点为A1,A2…A10,磁盘B的虚拟节点为B1,B2…B10,磁盘N的虚拟节点为N1,N2…N10;计算上述所有虚拟节点的哈希值,根据其哈希值将各个虚拟节点放置到一致性哈希表如chord环上,在进行数据查询时,将数据都存放在虚拟节点对应的物理节点(磁盘)上,如对于数据查询存放位置为AX的都放到磁盘A上;
(3)当存储文件时,接收客户端的写入数据请求,首先使用文件名作为key值,使用同建立chord环相同的哈希算法计算文件名所对应的哈希值并确定该文件名在chord环上的位置,假设该文件名为F1,其对应的哈希值为980,沿chord环顺时针“行走”,第一个遇到的节点为1100,那么该文件所要存放的第一个虚拟节点点确定为B1;
(4)通过物理磁盘与虚拟节点的对应关系,虚拟节点B1对应磁盘B那么磁盘B为该文件选择的第一个存储节点;
(5)对文件进行RS纠删码编码,得到m个chunk块(文件块)和k个冗余块;请参照图5,其中m=4,k=2,原始的文件数据块为D,D可以看作是4个小的数据块D1、D2、D3和D4构成的向量;矩阵B为范德蒙德(Vandermonde)矩阵,经过矩阵乘法之后得到6个数据块D1、D2、D3、D4、C1及C2,其中C1及C2数据块为冗余块;根据纠删码规则,可从这6个数据块中的任意4个得到原始的文件数据块D。获取物理磁盘顺序表A~Z,则从磁盘B开始,选择B、C、D、E、F及G共6块物理磁盘用来存放文件F1;
(6)该文件F1在磁盘上的存储路径按照/dataX/first/second/文件名的格式来存放:First的计算方法为F1的哈希值是980,980对256取模得到3,余数212,分别计算他们的十六进制数,则first为3,second为d4,则文件F1在磁盘的存储路径是:/dataB/3/d4/F1,/dataC/3/d4/F1…/dataG/3/d4/F1;
(7)将k+m个块按照(6)中确定的路径存储到对应的物理磁盘上。
请参照图2,本发明的实施例四为:
一种基于一致性哈希算法的数据存储终端1,包括处理器2、存储器3及存储在存储器3上并可在所述处理器2上运行的计算机程序,所述处理器2执行所述计算机程序时实现实施例一、实施例二或实施例三中的各个步骤。
综上所述,本发明提供了一种基于一致性哈希算法的数据存储方法及终端,将一个物理磁盘映射为多个虚拟节点,通过哈希值标识虚拟节点,在存储文件时,以文件名所对应的哈希值标识文件,根据文件名所对应的哈希值确定相应虚拟节点,进而确定文件对应的第一个物理磁盘;之后,将文件按照纠删码编码规则,将所有纠删码数据块分配到对应的物理磁盘上。该方法对比简单的副本策略,提高了单个服务器上多块磁盘的使用效率,同时也增强了数据的冗余安全性;另外通过文件名作为唯一键值方式,提高了文件的查找效率;通过使用一致性哈希算法,将多个物理磁盘映射为虚拟节点,构建Chord环,并将文件使用纠删码方式编码存储,实现对磁盘的高效利用;利用纠删码对待存储文件进行分块能够保证所存储文件的安全性,即使所存储的数据块有部分出现问题,在一定范围内也能够恢复出原始数据;并且通过使用文件名作为唯一key值标识文件,数据存储时以此key值确定文件在chord环上的存储位置即虚拟节点位置,进而根据所获得的虚拟节点位置确定要存储到的物理磁盘;借助于纠删码方式,使得数据可以按照特定编码方式存到到k+m块磁盘上,实现数据的高效冗余。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (8)
1.一种基于一致性哈希算法的数据存储方法,其特征在于,包括步骤:
S1、将物理磁盘映射为大于一个的虚拟节点,并计算每一个所述虚拟节点的第一哈希值;
S2、将所有所述虚拟节点按第一哈希值的大小顺序排列,组成哈希环;
S3、接收文件存储请求,所述文件存储请求包括待存储文件及文件名;
S4、计算所述文件名对应的第二哈希值,在所述哈希环上按预设方向寻找到与所述第二哈希值最接近的第一哈希值,将所述文件名对应的所述待存储文件存储到与所述第二哈希值最接近的所述第一哈希值所对应的虚拟节点所处的物理磁盘上;
所述S4中所述将所述文件名对应的文件存储到所述第一哈希值对应的虚拟节点所处的物理磁盘上具体为:
获取所述物理磁盘的磁盘名;
对所述第二哈希值取模,得到第一标识;
对所述第一标识取模,得到第二标识;
根据所述磁盘名、所述第一标识及所述第二标识生成文件存储路径;
根据所述文件存储路径将所述文件名对应的待存储文件存储到所述第一哈希值对应的虚拟节点所处的物理磁盘上。
2.根据权利要求1所述的一种基于一致性哈希算法的数据存储方法,其特征在于,所述S1具体为:
构建物理磁盘顺序表,并将所述物理磁盘顺序表中的每个物理磁盘映射为大于一个的虚拟节点;
所述S2具体为:
将所述物理磁盘顺序表中所有所述物理磁盘所对应的所有所述虚拟节点按第一哈希值的大小顺序排列,组成哈希环。
3.根据权利要求2所述的一种基于一致性哈希算法的数据存储方法,其特征在于,所述S4具体为:
S41、使用预设哈希算法计算所述文件名对应的第二哈希值,所述第二哈希值和所述第一哈希值均采用所述预设哈希算法进行计算;
S42、使用纠删码对所述待存储文件进行分块得到文件块集合,所述文件块集合包括顺序排列的多个文件块;
S43、在所述哈希环上按预设方向寻找到与所述第二哈希值最接近的第一哈希值,将所述文件名对应的文件块集合中的首个文件块存储到与所述第二哈希值最接近的所述第一哈希值所对应的虚拟节点所处的第一物理磁盘上;
S44、获取第一物理磁盘在所述物理磁盘顺序表上的位置,将除去所述首个文件块外的其余N个文件块按照顺序分别存储到在所述物理磁盘顺序表上位于所述第一物理磁盘后的N个物理磁盘上。
4.根据权利要求2所述的一种基于一致性哈希算法的数据存储方法,其特征在于,还包括:
在所述物理磁盘顺序表中添加第三物理磁盘,将所述第三物理磁盘映射为大于一个的子节点,并计算每一个所述子节点的第三哈希值;
根据所述第三哈希值,将每一个所述子节点置入所述哈希环中;
获取与所述子节点相邻的邻虚拟节点,获取所述邻虚拟节点对应的邻哈希值;
将所述第二哈希值在第三哈希值和邻哈希值区间内的已存储文件存入所述第三物理磁盘。
5.一种基于一致性哈希算法的数据存储终端,包括存储器、处理器及存储在存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:
S1、将物理磁盘映射为大于一个的虚拟节点,并计算每一个所述虚拟节点的第一哈希值;
S2、将所有所述虚拟节点按第一哈希值的大小顺序排列,组成哈希环;
S3、接收文件存储请求,所述文件存储请求包括待存储文件及文件名;
S4、计算所述文件名对应的第二哈希值,在所述哈希环上按预设方向寻找到与所述第二哈希值最接近的第一哈希值,将所述文件名对应的所述待存储文件存储到与所述第二哈希值最接近的所述第一哈希值所对应的虚拟节点所处的物理磁盘上;
所述S4中所述将所述文件名对应的文件存储到所述第一哈希值对应的虚拟节点所处的物理磁盘上具体为:
获取所述物理磁盘的磁盘名;
对所述第一哈希值取模,得到第一标识;
对所述第一标识取模,得到第二标识;
根据所述磁盘名、所述第一标识及所述第二标识生成文件存储路径;
根据所述文件存储路径将所述文件名对应的待存储文件存储到所述第一哈希值对应的虚拟节点所处的物理磁盘上。
6.根据权利要求5所述的一种基于一致性哈希算法的数据存储终端,其特征在于,所述S1具体为:
构建物理磁盘顺序表,并将所述物理磁盘顺序表中的每个物理磁盘映射为大于一个的虚拟节点;
所述S2具体为:
将所述物理磁盘顺序表中所有所述物理磁盘所对应的所有所述虚拟节点按第一哈希值的大小顺序排列,组成哈希环。
7.根据权利要求6所述的一种基于一致性哈希算法的数据存储终端,其特征在于,所述S4具体为:
S41、使用预设哈希算法计算所述文件名对应的第二哈希值,所述第二哈希值和所述第一哈希值均采用所述预设哈希算法进行计算;
S42、使用纠删码对所述待存储文件进行分块得到文件块集合,所述文件块集合包括顺序排列的多个文件块;
S43、在所述哈希环上按预设方向寻找到与所述第二哈希值最接近的第一哈希值,将所述文件名对应的文件块集合中的首个文件块存储到与所述第二哈希值最接近的所述第一哈希值所对应的虚拟节点所处的第一物理磁盘上;
S44、获取第一物理磁盘在所述物理磁盘顺序表上的位置,将除去所述首个文件块外的其余N个文件块按照顺序分别存储到在所述物理磁盘顺序表上位于所述第一物理磁盘后的N个物理磁盘上。
8.根据权利要求6所述的一种基于一致性哈希算法的数据存储终端,其特征在于,所述处理器执行所述计算机程序时还包括:
在所述物理磁盘顺序表中添加第三物理磁盘,将所述第三物理磁盘映射为大于一个的子节点,并计算每一个所述子节点的第三哈希值;
根据所述第三哈希值,将每一个所述子节点置入所述哈希环中;
获取与所述子节点相邻的邻虚拟节点,获取所述邻虚拟节点对应的邻哈希值;
将所述第二哈希值在第三哈希值和邻哈希值区间内的已存储文件存入所述第三物理磁盘。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011155379.5A CN112230861B (zh) | 2020-10-26 | 2020-10-26 | 一种基于一致性哈希算法的数据存储方法及终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011155379.5A CN112230861B (zh) | 2020-10-26 | 2020-10-26 | 一种基于一致性哈希算法的数据存储方法及终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112230861A CN112230861A (zh) | 2021-01-15 |
CN112230861B true CN112230861B (zh) | 2022-09-13 |
Family
ID=74109349
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011155379.5A Active CN112230861B (zh) | 2020-10-26 | 2020-10-26 | 一种基于一致性哈希算法的数据存储方法及终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112230861B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113806298A (zh) * | 2021-08-09 | 2021-12-17 | 中国地质大学(武汉) | 分布式文件系统存储优化方法、计算机设备及存储介质 |
CN114064572B (zh) * | 2021-11-12 | 2024-03-19 | 苏州慧工云信息科技有限公司 | 一种基于哈希算法的对象存储方法及系统 |
CN115297131B (zh) * | 2022-08-01 | 2023-05-26 | 东北大学 | 一种基于一致性哈希的敏感数据分布式储存方法 |
CN114969061A (zh) * | 2022-08-01 | 2022-08-30 | 浙江木链物联网科技有限公司 | 一种工业时序数据分布式存储方法、装置 |
CN117130793A (zh) * | 2023-10-27 | 2023-11-28 | 乾健科技有限公司 | 一种大数据分析处理方法以及系统 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105721532A (zh) * | 2014-12-26 | 2016-06-29 | 乐视网信息技术(北京)股份有限公司 | 一种节点管理方法及装置 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102831120B (zh) * | 2011-06-15 | 2017-07-21 | 腾讯科技(深圳)有限公司 | 一种数据处理方法及系统 |
CN102843403A (zh) * | 2011-06-23 | 2012-12-26 | 盛大计算机(上海)有限公司 | 基于分布式文件系统的文件处理方法、系统及客户端 |
JP5719323B2 (ja) * | 2012-02-28 | 2015-05-13 | 日本電信電話株式会社 | 分散処理システム、ディスパッチャおよび分散処理管理装置 |
US10909072B2 (en) * | 2018-08-02 | 2021-02-02 | Memverge, Inc. | Key value store snapshot in a distributed memory object architecture |
CN110096227B (zh) * | 2019-03-28 | 2023-04-18 | 北京奇艺世纪科技有限公司 | 数据存储方法、数据处理方法、装置、电子设备及计算机可读介质 |
CN111159193B (zh) * | 2019-12-27 | 2023-08-29 | 掌迅亿通(北京)信息科技有限公司 | 多层一致性哈希环及其在创建分布式数据库中的应用 |
CN111756828B (zh) * | 2020-06-19 | 2023-07-14 | 广东浪潮大数据研究有限公司 | 一种数据存储方法、装置及设备 |
-
2020
- 2020-10-26 CN CN202011155379.5A patent/CN112230861B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105721532A (zh) * | 2014-12-26 | 2016-06-29 | 乐视网信息技术(北京)股份有限公司 | 一种节点管理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112230861A (zh) | 2021-01-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112230861B (zh) | 一种基于一致性哈希算法的数据存储方法及终端 | |
US20200218610A1 (en) | Efficient computation of parity data in storage system implementing data striping | |
CN110169040B (zh) | 基于多层一致性哈希的分布式数据存储方法与系统 | |
CN110471795B (zh) | 区块链状态数据恢复方法及装置、电子设备 | |
US8843454B2 (en) | Elimination of duplicate objects in storage clusters | |
US8996611B2 (en) | Parallel serialization of request processing | |
US8402063B2 (en) | Restoring data backed up in a content addressed storage (CAS) system | |
US10620830B2 (en) | Reconciling volumelets in volume cohorts | |
CN110262922B (zh) | 基于副本数据日志的纠删码更新方法及系统 | |
US20080201335A1 (en) | Method and Apparatus for Storing Data in a Peer to Peer Network | |
CN105190573A (zh) | 存储数据的减少冗余 | |
US10803006B1 (en) | Persistent memory key-value store in a distributed memory architecture | |
CN111177143B (zh) | 键值数据存储方法、装置、存储介质与电子设备 | |
WO2017020668A1 (zh) | 一种物理磁盘的共享方法及装置 | |
CN113535670B (zh) | 一种虚拟化资源镜像存储系统及其实现方法 | |
CN110647514A (zh) | 一种元数据更新方法、装置及元数据服务器 | |
CN114936188A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
JP4891657B2 (ja) | データ記憶システム、ファイル検索装置およびプログラム | |
CN114721594A (zh) | 一种分布式存储方法、装置、设备及机器可读存储介质 | |
CN112416879B (zh) | 一种基于ntfs文件系统的块级数据去重方法 | |
CN106789632A (zh) | 一种大规模分布式存储系统的节点路由的方法 | |
US11397706B2 (en) | System and method for reducing read amplification of archival storage using proactive consolidation | |
CN112965859A (zh) | 一种基于ipfs集群的数据灾备方法与设备 | |
US11163642B2 (en) | Methods, devices and computer readable medium for managing a redundant array of independent disks | |
US20240054056A1 (en) | Recovery mechanism with selective ordering and concurrent operations |
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 |