CN103810244B - 一种基于数据分布的分布式数据存储系统的扩容方法 - Google Patents
一种基于数据分布的分布式数据存储系统的扩容方法 Download PDFInfo
- Publication number
- CN103810244B CN103810244B CN201310661131.XA CN201310661131A CN103810244B CN 103810244 B CN103810244 B CN 103810244B CN 201310661131 A CN201310661131 A CN 201310661131A CN 103810244 B CN103810244 B CN 103810244B
- Authority
- CN
- China
- Prior art keywords
- node
- data
- identifier
- memory node
- memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种分布式数据存储系统的扩容方法,特别涉及一种基于数据分布的分布式数据存储系统的扩容方法,属于数据库领域。该方法通过拟合数据的产生概率,根据此概率计算具有最大溢出概率的存储节点,在此节点的数据存储区间上添加新的存储节点以分担负载,在不管数据是否为均匀分布以及存储节点的负载能力是否相同的情况下,都可以提高系统的利用率,维持负载均衡,以及减少节点之间数据移动次数。
Description
技术领域
本发明涉及一种分布式数据存储系统的扩容方法,特别涉及一种基于数据分布的分布式数据存储系统的扩容方法,属于数据库领域。
背景技术
随着计算机科学和互联网技术的发展,信息检索系统的数据量变得越来越大,为了保证其扩展性,可靠性,高性能和高适用性,通常使用分布式存储系统来保存海量的数据。
扩容是分布式存储系统的重要问题之一,目前通常使用分区、分片或分布式哈希表等技术。在处理非均匀分布的数据时,这些方法不能保证较高的系统利用率、较好的负载均衡性能以及较小的节点之间数据移动次数。因此,研究更好的分布式数据存储系统的扩容方法,是目前分布式数据库领域研究的一个重要问题。
分布式数据存储系统可分为分布式数据库和对等网络(P2P)数据存储系统。分布式数据库一般使用分区技术进行扩容,分区技术通常建立一个从分区键到存储节点的映射,根据分区键对数据进行定位,确定其所在的存储节点,并通过修改映射关系来进行扩容。其中分区键通常采用数据某个特征值或其哈希值。
分布式数据库的扩容也可以采用分片技术,一般包括垂直划分,以及基于关键字、哈希值、时间、区间、服务、映射目录的水平划分方法的分片。其中垂直分区是将数据库中的表的不同列划分到不同的服务器上,一般将和某些指定特征相关的数据划分在相同的服务器上。而基于关键字、哈希值、时间、区间、服务、映射目录等方法的水平划分分片技术是建立一个这些特征到存储节点的映射,根据这些特征的特征值对数据库中的表进行划分以及对数据进行定位。
P2P数据存储系统的存储以及扩容方法通常使用分布式哈希表技术,其中比较典型的如Ion Stoica根据DavidKarger在《Consistent hashing and random trees:Distributed caching protocols for relieving hot spots on the World Wide Web》中的一致性哈希方法所提出的Chord协议和PetarMaymounkov在《Kademlia:Apeer-to-peerinformation system based on the xor metric》中提出Kademlia协议和使用此协议的分布式存储系统,简称Kad网络。
一致性哈希方法定义一个标志符区间,这个区间首尾相连形成一个环,对每个节点生成一个位于此区间的标志符,根据此标志符将此节点映射到区间环上,对每个文件生成一个位于同样区间的标志符,将此标志符映射到区间环上,找到第一个标志符大于此文件标志符的节点,作为此文件的存储位置。
当添加新节点时,对此节点生成标志符,映射到区间环上。向大于其标志符和小于其标志符的若干个节点发送自身的信息,即可更新Chord网络的节点索引,完成了新节点的添加过程。
Kad网络中每个节点使用特定信息的哈希值或随机生成一个160位的ID作为标志符。所有节点被组织成一个二叉树结构,每个节点位于此二叉树的叶子节点上,每个节点的位置都由其标志符的最短前缀确定。当添加新的节点时,新的节点首先为自己生成一个标志符,根据此标志符确定其在二叉树索引中的位置,并向其他节点发送自己的标志符和其他信息,同时获取Kad网络其他节点的信息,这样就将此节点插入到索引二叉树中,同时也更新了整个Kad网络的节点索引和完成了新节点的插入过程。
Kad网络存储的数据为文件,对每个文件的内容通过哈希函数生成160位的哈希值作为此文件的标志,在Kad网络中每个存储节点的标志符中找出若干个与文件标志符最接近的节点,将文件存储在这些存储节点上。
在使用分区和分片等方法对数据进行划分时,都没有考虑数据的分布情况,或者没有根据数据分布的实时变化对存储节点和数据的对应关系进行调整,因此不能总是取得满意的负载均衡效果。特别是在系统扩容时,需要在节点之间移动大量的数据,这会严重影响系统的数据查询功能。
而分布式哈希表方法只是将节点的哈希值和数据关键字的哈希值简单地对应起来,并没有考虑到数据的分布情况和存储节点的负载能力,一般在存储节点数量较大以及数据分布较为均匀时,系统表现较好,如果数据不是均匀分布,节点性能不一致,则会导致数据分布不合理,影响系统的负载均衡性。
因此,如何根据数据的分布情况对分布式数据库进行扩容,提高系统的利用率,维持系统中每个存储节点的负载均衡,同时减少节点之间的数据移动次数,是目前分布式数据库领域的一个很有研究价值的课题。
发明内容
本发明的目的是针对目前分布式存储系统扩容方法中存在的负载均衡不佳,利用率不高,节点之间数据移动次数较为频繁等问题,而提出一种基于数据分布的分布式数据存储系统的扩容方法。
本发明的主要内容为:首先对存储系统进行初始化,然后顺序存储数据集里面的数据,在存储数据的过程中对存储历史进行保存,在存储数据的过程中需要添加存储节点时,使用本文提出的方法添加存储节点;之后交替进行存储数据、保存存储历史的操作以及添加存储节点的操作,直到所有数据都存储完毕。
本发明是通过以下技术方案实现的。
一种基于数据分布的分布式数据存储系统的扩容方法,包括3个操作:A、系统初始化;B、存储数据并保存数据存储历史;C、添加存储节点。具体过程为:
A、系统初始化;
具体为:
步骤A1:选择一个哈希函数,此哈希函数可以根据数据的某个特征计算其哈希值将数据映射到区间(a,b]上,其中a,b为整数,a<b。这样可以将每个数据用标志符k来表示,k位于标志符区间(a,b]上,整个数据集合可表示为一个标志符集合K,K={k1,...km},数据ki的数量为si。
分布式存储系统包含若干个保存数据的存储节点,将每个数据存储节点用一个标志符n来表示,整个存储节点集合可表示为一个标志符集合N,N={n1,...nd},存储节点的标志符n也位于标志符区间(a,b]上。如果存储节点标识符按升序排列为n1,...nd,规定标志符k位于区间(nj-1,nj]中的数据会被存储在nj上,称nj的存储区间为(nj-1,nj]。nj的负载lj定义为目前nj上存储的数据的数量,cj为nj的最大可以承受的负载,或称为nj的容量。
L定义为系统负载,即系统中数据的总数,可知:
定义在系统负载为L时ki的产生概率函数为:
pi=p(ki,L) (2)
可知,
si=L×p(ki,L) (3)
对于存储节点nj上,在系统总负载为L时,
步骤A2:构建存储节点的索引。存储节点的查询索引使用二叉树结构,其中叶子节点保存存储节点的信息(如容量、目前负载、IP,端口等位置信息,等等),非叶子节点存储其左子树的叶子节点可以存储的数据标志符的最大值。
经过步骤A1至步骤A2的操作,完成存储系统初始化的操作。
B、存储数据并保存数据存储历史;
具体为:
步骤B1:查询数据所在存储节点位置,详细过程为:根据数据的标志符从根节点开始查询,如果目前查询的节点不是叶子节点的话,判断所要查询的标志符是否大于非叶子节点中的值,如果是则继续查询其右子树,否则继续查询其左子树。直到所访问的是叶子节点时停止查询,返回此节点。
步骤B2:添加数据。将数据存储在步骤B1所返回的节点上。
步骤B3:记录添加历史。每次添加数据时记录系统负载Lz和每个数据的数量siz,具体定义如下:如果系统添加数据的次数为q,那么在每一次添加数据时,系统负载为Lz,z∈[1,q],此时每一个数据ki,i∈[1,m]时会对应一个数据量siz,i∈[1,m],z∈[1,q],即siz是指在第z次添加数据时ki的数量。
经过步骤B1至步骤B3的操作,完成存储数据并记录各种参数的操作。
C、添加存储节点。
具体为:
步骤C1:拟合数据产生概率。根据步骤B3所得到的数据存储历史,根据(6)可计算出每次添加数据时的p(ki,L),即piz。
piz=piz/Lz,z∈[1,q] (6)
再使用曲线回归的方法来拟合数据产生概率p(ki,L),定义:
求出其中的向量β和阶数t,可得到每个数据的产生概率p(ki,L)。
步骤C2:计算插入位置。设需要添加容量为cx的节点x,需要求出其插入位置y,计算方法为首先对节点nj,j∈[1,d],根据(5),求出其对应的负载L,表示为Lj,插入位置y为对应负载Lj最小的节点,即:
步骤C3:计算新加入存储节点的标志符,此标志符为x,根据(5)可知,
根据(9)计算出L,再根据(10),
计算出x,即新加入节点的标志符。
步骤C4:插入节点。在索引中插入存储节点,详细过程为:首先根据插入节点的标志符在索引中查询节点,此节点即为插入位置。在此节点上生成2个子节点,以插入节点的标志符作为中间点,将原节点的区间信息分别写入其左子节点和右节点,插入节点的标志符写入原节点。将原节点所保存的数据中标志符小于等于插入节点标志符的部分由原节点移动到其左子节点上,其余的移动到其右子节点上,并更新原节点和插入节点的负载。
经过步骤C1至步骤C4的操作,完成存储节点插入阶段的操作。
有益效果
本发明所述的基于数据分布的分布式存储系统的扩容方法,通过对数据产生概率进行估计,并根据此概率计算出具有最大溢出概率的存储节点,在此节点的数据存储区间上添加新的存储节点以分担负载,从而保证了在不管数据是否为均匀分布以及存储节点的负载能力是否相同的情况下,都可以提高系统的利用率,维持负载均衡,以及减少节点之间数据移动次数。
附图说明
图1本发明的方法流程图;
图2数据和存储节点的映射关系;
图3标志符查询算法;
图4节点插入算法;
图5非均匀分布数据的数据量和存储节点数量的关系
图6非均匀分布数据的数据量和存储节点利用率均值的关系
图7非均匀分布数据的数据量和存储节点利用率方差的关系
图8非均匀分布数据的数据量和数据移动次数的关系
图9均匀分布数据的数据量和存储节点数量的关系
图10均匀分布数据的数据量和存储节点利用率均值的关系
图11 3种方法的存储节点利用率
图12均匀分布数据的数据量和存储节点利用率方差的关系
图13均匀分布数据的数据量和数据移动次数的关系
具体实施方式
下面结合附图和具体实施例对本发明进行详细说明。
本实施例采用本发明提出的方法建立一个模拟数据存储系统,该存储系统使用的测试机器的CPU为AMD AthlonTMII X3435Processor(3CPUs),2.90GHz。内存为8.00GB,其频率为2.67GHz。本实施例中存储方法中的存储节点的容量均设置为2097152条记录,以模拟实际硬件设施环境。采用搜狗实验室提供的包括2011-12-30和2011-12-31共2天的用户查询日志作为实验数据集,包含43,545,444个查询点击记录,其中查询词以汉字为首字符的记录有31,552,843个,实验首先使用这部分数据的查询词首字符的哈希值作为非均匀分布数据的标志符对这些数据进行存储,然后使用用户ID的哈希值作为均匀分布数据的标志符对所有数据进行存储,具体步骤如下:
实验包括3个操作:A、系统初始化;B、存储数据并保存数据存储历史;C、添加存储节点。具体过程如图1所示:首先对存储系统进行初始化,然后顺序存储数据集里面的数据,在存储数据的过程中对存储历史进行保存,在存储数据的过程中需要添加存储节点时,使用本文提出的方法添加存储节点;之后交替进行存储数据、保存存储历史的操作以及添加存储节点的操作,直到所有数据都存储完毕。
A、系统初始化;
具体为:
步骤A1:选择RSH哈希函数分别将查询词首字符和用户ID映射到(40000,65535]区间上,这样可以将每个查询记录用标志符k来表示,k位于标志符区间(40000,65535]上,整个查询记录集合可表示为一个标志符集合K,K={k1,...km},数据ki的数量为si。
初始化时分布式存储系统包含1个保存数据的存储节点,以后随着数据的增加会逐渐添加新的存储节点。将每个数据存储节点用一个标志符n来表示,整个存储节点集合可表示为一个标志符集合N,N={n1,...nd},存储节点的标志符n也位于标志符区间(40000,65535]上。如果存储节点标识符按升序排列为n1,...nd,规定标志符k位于区间(nj-1,nj]中的数据会被存储在nj上,称nj的存储区间为(nj-1,nj]。图2显示了数据和存储节点的映射关系。nj的负载lj定义为目前nj上存储的数据的数量,cj为nj的最大可以承受的负载,或称为nj的容量。
L定义为系统负载,即系统中数据的总数,可知:
定义在系统负载为L时ki的产生概率函数为:
pi=p(ki,L) (2)
可知,
si=L×p(ki,L) (3)
对于存储节点nj上,在系统总负载为L时,
步骤A2:构建存储节点的索引。存储节点的查询索引使用二叉树结构,其中叶子节点保存存储节点的信息(如容量、目前负载、IP,端口等位置信息,等等),非叶子节点存储其左子树的叶子节点可以存储的数据标志符的最大值。
经过A1至步骤A2的操作,完成存储系统初始化的操作。
B、存储数据并保存数据存储历史;
具体为:
步骤B1:查询数据所在存储节点位置,图3显示了查询数据所在存储节点位置的算法,详细过程为:根据数据的标志符从根节点开始查询,如果目前查询的节点不是叶子节点的话,判断所要查询的标志符是否大于非叶子节点中的值,如果是则继续查询其右子树,否则继续查询其左子树。直到所访问的是叶子节点时停止查询,返回此节点。
步骤B2:添加数据。将数据存储在步骤B1所返回的节点上。
步骤B3:记录添加历史。每次添加数据时记录系统负载Lz和每个数据的数量siz,具体定义如下:如果系统添加数据的次数为q,那么在每一次添加数据时,系统负载为Lz,z∈[1,q],此时每一个数据ki,i∈[1,m]时会对应一个数据量siz,i∈[1,m],z∈[1,q],即siz是指在第z次添加数据时ki的数量。
经过步骤B1至步骤B3的操作,完成存储数据并记录各种参数的操作。
C、添加存储节点。
具体为:
步骤C1:拟合数据产生概率。根据步骤B3所得到的数据存储历史,根据(6)可计算出每次添加数据时的p(ki,L),即piz。
piz=piz/Lz,z∈[1,q] (6)
再使用曲线回归的方法来拟合数据产生概率p(ki,L),定义:
本实验中阶数t定义为8,求出其中的向量β,可得到每个数据的产生概率p(ki,L)。
步骤C2:计算插入位置。设需要添加容量为cx的节点x,需要求出其插入位置y,计算方法为首先对节点nj,j∈[1,d],根据(5),求出其对应的负载L,表示为Lj,插入位置y为对应负载Lj最小的节点,即:
步骤C3:计算新加入存储节点的标志符,此标志符为x,根据(5)可知,
根据(9)计算出L,再根据(10),
计算出x,即新加入节点的标志符。
步骤C4:在索引中插入存储节点。图4显示了在索引中插入存储节点的算法,详细过程为:首先根据插入节点的标志符在索引中查询节点,此节点即为插入位置。在此节点上生成2个子节点,以插入节点的标志符作为中间点,将原节点的区间信息分别写入其左子节点和右节点,插入节点的标志符写入原节点。将原节点所保存的数据中标志符小于等于插入节点标志符的部分由原节点移动到其左子节点上,其余的移动到其右子节点上,并更新原节点和插入节点的负载。
经过步骤C1至步骤C4的操作,完成存储节点插入阶段的操作。
使用上述方法将所有查询记录存储完毕,并记录采用本发明提出的方法得到的存储系统的利用率(其中利用率定义为存储节点的负载和容量的比值)、存储节点数量,数据移动次数等参数如图5至图13所示。
为了说明本发明的实际效果,在同等条件下,以相同的实验数据分别采用目前通常使用的2种分布式存储系统的扩容方法进行比较。这两种方法为:基于一致性哈希的扩容方法和基于虚拟存储节点的一致性哈希的扩容方法。其构造方法如下:
基于一致性哈希的方法的扩容方法为:当新数据所在的存储节点的负载等于其容量时,首先随机生成一个位于区间(40000,65535]的值,然后向系统中添加一个以此值作为标志符的存储节点,尝试重新存储新数据,如果仍然无法存储则继续添加新的存储节点,直到所有数据都被存储在系统中。最后统计各种参数。
基于虚拟存储节点的一致性哈希的方法的扩容方法为:首先定义每个实际存储节点上的最大虚拟节点数量16,每个虚拟存储节点的容量l为实际节点的容量的,当新数据所在的虚拟节点的负载等于其容量时,首先向系统中添加一个实际节点,然后随机生成16个位于区间(40000,65535]的值,在新添加的实际节点上添加16个以这些值作为标志符的虚拟存储节点,再尝试重新存储数据,如果仍然无法存储则继续重复上述过程,直到所有数据都被存储在系统中。最后统计实际节点的各种参数,在计算数据的移动次数时,如果数据的移动是在同一个实际节点上不同虚拟节点之间进行,则不累计其移动次数。
经过上述实验,采用本发明提出的基于数据分布的分布式存储系统扩容方法和其他两种比较方法得到的各种性能参数如图5至图13所示,具体分析叙述如下:
一、非均匀分布的数据
1、数据量和存储节点数量的关系
图5显示了系统存储的数据量从0增长到31,552,843时存储节点数量的变化情况,从中可以看到:随着数据量的增加,每种存储方法的存储节点数量也在增加,其中基于虚拟节点的一致性哈希方法增长最快,在数据量为31,552,843时已经增长到119,基于基本一致性哈希的方法为74,而本文提出的方法的节点数量为16,仅为基于虚拟节点一致性哈希方法的13%,基于一致性哈希方法的22%。
2、存储节点利用率的均值
图6显示了系统存储的数据量增大时存储节点利用率均值的变化情况,从中可以看到:在添加节点时,每种存储方法的存储节点负载利用率均值都会下降,然后随着数据量的增加再次上升,但存储节点利用率有减小的趋势。其中虚拟节点的一致性哈希方法和基本一致性哈希方法近似,在数据量为31,552,843时其利用率均值分别为0.13和0.20,而本文提出的方法的均值为0.94,远大于其他2种方法,这表明本算法的利用率较高。因为本算法每次都将新节点插入到数据量最大的区间,可保证节点的利用率,而一致性哈希方法是将节点随机插入到区间内,不能保证其位于最需要的区间内,也就不能保证其利用率。
3、存储节点利用率的方差
图7显示了系统存储的数据量增大时存储节点利用率方差的变化情况,从中可以看到:随着数据量的增大,每种存储方法的存储节点利用率的方差的波动都有减小的趋势,但本算法的利用率方差不仅波动小,其最终值也仅为0.0007,而其他算法的波动较大,其最终值为0.06和0.03。这表明本算法的节点负载较为稳定。
4、移动次数
图8显示了系统存储的数据量从0到31,548,946时数据移动次数的变化情况,从中可以看到:随着数据量的增大,每次添加节点时每种存储方法的数据移动次数都会增大,其中基于虚拟节点的一致性哈希的方法和基于基本一致性哈希的方法移动次数相近,在数据量为31,552,843时分别为42,212,230和41,621,140,而本文提出的基于数据分布的方法的数据移动次数为15,728,640,为其他2种方法的37%和38%。
总的来说,对于非均匀分布的数据,基于一致性哈希的存储方法和基于虚拟节点的一致性哈希的方法性能非常接近,而本文提出的方法明显优于这2种方法。
二、均匀分布的数据
以下是根据用户ID的哈希值作为标志符的实验结果。
1、数据量和存储节点数量的关系
图9显示了系统存储的数据量增大时存储节点数量的变化情况,从中可以看到:随着数据量的增加,每种存储方法的存储节点数量也在增加。最后在数据量为43,545,444时,基于虚拟节点的一致性哈希方法的节点数为105,基于基本一致性哈希的方法的节点数为130,而本文提出的方法的节点数量为32,只有基于基本一致性哈希的方法的25%,基于虚拟节点的一致性哈希方法的30%。
2、存储节点利用率的均值
图10显示了系统存储的数据量增大时存储节点利用率均值的变化情况,从中可以看到:存储节点利用率均值的变化情况和非均匀分布的数据类似,在数据量增加时每种存储方法的存储节点负载利用率均值都在波动中有减少的趋势,其中虚拟节点的一致性哈希方法的均值略大于基本一致性哈希方法的均值,而本文提出的方法的均值远大于其他2种方法,3种方法的最终值分别为0.65、0.16和0.20。这表明本算法的利用率较高。
图11显示了3种方法的所有存储节点在数据达到43,545,444时的利用率,可以看到,虽然是均匀分布的数据,但基于一致性哈希的方法以及基于虚拟节点的一致性哈希的方法中存储节点的利用率仍然很不均匀。这是由于在节点或虚拟节点数量和存储区间相比较少的情况下(本实验中存储区间的长度为25536,而基于一致性哈希的方法中节点数量为130,基于虚拟节点的一致性哈希的方法虚拟节点数量为1680,实际节点数量为105),仍然不能比较均匀地分布在整个存储区间上,从而导致了整体利用率不高的结果。而如果大量增加虚拟节点,则又会导致添加节点和数据查询代价的增加,同样会损害系统性能。
3、存储节点利用率的方差
图12显示了系统存储的数据量增大时存储节点利用率方差的变化情况,从中可以看到:3种方法的存储节点利用率的方差的变化趋势和非均匀分布的实验数据类似,他们的最终值分别为0.000036、0.03和0.03。这表明本算法的节点负载较为稳定。
3、移动次数
图13显示了系统存储的数据量从0到43,545,444时节点之间数据移动次数的变化情况,从中可以看到:随着数据量的增大,每种存储方法的数据移动次数都在增大,其中基于基本一致性哈希方法的最大,而本文提出的基于数据分布的方法的节点数量最少,3种方法的移动次数分别为32,505,856、60,471,492和51,809,450,本算法是基于虚拟节点一致性哈希方法的54%,基于一致性哈希方法的63%。
通过以上数据可以看到,对于均匀分布的数据,基于虚拟节点的一致性哈希方法的性能略微优于基于一致性哈希的方法,本方法明显优于其他2种方法。
通过上述分析可以得出以下结论:本发明提出的基于数据分布的分布式存储系统的扩容方法对数据产生概率进行拟合,计算具有最大溢出概率的存储节点,在此节点的数据存储区间上添加新的存储节点以分担负载,从而提高了系统利用率,维持了负载均衡以及减少了节点之间数据移动次数,验证了其有效性。
需要强调的是,对于本领域技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进,这些也应视为属于本发明的保护范围。
Claims (1)
1.一种基于数据分布的分布式数据存储系统的扩容方法,其特征在于:包括3个操作:
A、系统初始化;B、存储数据并保存数据存储历史;C、添加存储节点;具体过程为:
A、系统初始化;
具体为:
步骤A1:选择一个哈希函数,此哈希函数可以根据数据的某个特征计算其哈希值将数据映射到区间(a,b]上,其中a,b为整数,a<b;这样可以将每个数据用标志符k来表示,k位于标识符区间(a,b]上,整个数据集合可表示为一个标识符集合K,K={k1,…km},数据k1的数量为si;
分布式存储系统包含若干个保存数据的存储节点,将每个数据存储节点用一个标识符n来表示,整个存储节点集合可表示为一个标志符集合N,N={n1,…,nd},存储节点的标志符n也位于标志符区间(a,b]上;如果存储节点标志符按升序排列为n1,…,nd,规定标志符k位于区间(nj-1,nj]中的数据会被存储在nj上,称nj的存储区间为(nj-1,nj];nj的负载lj定义为目前nj上存储的数据的数量,cj为nj的最大可以承受的负载,或称为nj的容量;
L定义为系统负载,即系统中数据的总数,可知:
定义在系统负载为L时kj的产生概率函数为:
pi=p(ki,L) (2)
可知,
si=L×p(ki,L) (3)
对于存储节点nj上,在系统总负载为L时,
步骤A2:构建存储节点的索引;存储节点的查询索引使用二叉树结构,其中叶子节点保存储节点的信息,包括容量、目前负载、IP、端口位置信息,非叶子节点存储器左子树的叶子节点可以存储的数据标志符的最大值;
经过步骤A1至步骤A2的操作,完成存储系统初始化的操作;
B、存储数据并保存数据存储历史;
具体为:
步骤B1:查询数据所在存储节点位置,详细过程为:根据数据的标志符从根节点开始查询,如果目前查询的节点不是叶子节点的话,判断所要查询的标志符是否大于非叶子节点中的值,如果是则继续查询其右子树,否则继续查询其左子树;直到所访问的是叶子节点时停止查询,返回此节点;
步骤B2:添加数据;将数据存储在步骤B1所返回的节点上;
步骤B3:记录添加历史;每次添加数据时记录系统负载Lz和每个数据的数量siz,具体定义如下:如果系统添加数据的次数为q,那么在每一次添加数据时,系统负载为Lz,z∈[1,q],此时每一个数据ki,i∈[1,m]时会对应一个数据量siz,i∈[1,m],z∈[1,q],即siz是指在第z次添加数据时ki的数量;
经过步骤B1至步骤B3的操作,完成存储数据并记录各种参数的操作;
C、添加存储节点;具体为:
步骤C1:拟合数据产生概率;根据步骤B3所得到的数据存储历史,计算出每次添加数据时的产生概率p(ki,L),即piz;
piz=piz/Lz,z∈[1,q] (6)
再使用曲线回归的方法来拟合数据产生概率p(ki,L),定义;
求出其中的向量β和阶数t,可得到每个数据的产生概率p(ki,L);
步骤C2:计算插入位置;设需要添加容量为cx的节点x,需要求出其插入位置y,计算方法为首先对节点nj,j∈[1,d],根据(5),求出其对应的负载L,表示为Lj,插入位置y为对应负载Lj最小的节点,即:
步骤C3:计算新加入存储节点的标志符,此标志符为x,根据(5)可知,
根据(9)计算出L,再根据(10),
计算出新加入节点的标志符;
步骤C4:插入节点;
即在索引中插入存储节点,详细过程为:首先根据插入节点的标志符在索引中查询节点,此节点即为插入位置;在此节点上生成2个子节点,以插入节点的标识符作为中间点,将原节点的区间信息分别写入其左子节点和右节点,插入节点的标志符写入原节点;将原节点所保存的数据中标志符小于等于插入节点标志符的部分由原节点移动到其左子节点上,其余的移动到其右子节点上,并更新原节点和插入节点的负载。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310661131.XA CN103810244B (zh) | 2013-12-09 | 2013-12-09 | 一种基于数据分布的分布式数据存储系统的扩容方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310661131.XA CN103810244B (zh) | 2013-12-09 | 2013-12-09 | 一种基于数据分布的分布式数据存储系统的扩容方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103810244A CN103810244A (zh) | 2014-05-21 |
CN103810244B true CN103810244B (zh) | 2017-10-27 |
Family
ID=50707014
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310661131.XA Active CN103810244B (zh) | 2013-12-09 | 2013-12-09 | 一种基于数据分布的分布式数据存储系统的扩容方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103810244B (zh) |
Families Citing this family (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105610879B (zh) * | 2014-10-31 | 2019-05-17 | 华为技术有限公司 | 数据处理方法和装置 |
CN104376087B (zh) * | 2014-11-19 | 2017-09-29 | 天津南大通用数据技术股份有限公司 | 一种采用交叉备份的分布式数据库负载均衡的计算方法 |
CN104539660B (zh) * | 2014-12-09 | 2018-09-11 | 珠海金山网络游戏科技有限公司 | 一种系统扩容时零数据迁移的数据分布存储方法及系统 |
CN106034144B (zh) * | 2015-03-12 | 2019-10-15 | 中国人民解放军国防科学技术大学 | 一种基于负载均衡的虚拟资产数据存储方法 |
CN106161056B (zh) * | 2015-04-01 | 2019-07-09 | 阿里巴巴集团控股有限公司 | 周期型数据的分布式缓存运维方法及装置 |
CN105094708B (zh) | 2015-08-25 | 2018-06-12 | 北京百度网讯科技有限公司 | 一种磁盘容量的预测方法及装置 |
CN105577806B (zh) * | 2015-12-30 | 2019-11-12 | Tcl集团股份有限公司 | 一种分布式缓存方法及系统 |
CN105959419A (zh) * | 2016-07-15 | 2016-09-21 | 浪潮(北京)电子信息产业有限公司 | 基于一致性树的分布式存储结构的构建方法及系统 |
CN106339450B (zh) * | 2016-08-25 | 2019-08-06 | 成都索贝数码科技股份有限公司 | 一种树形数据的索引方法 |
US11138178B2 (en) | 2016-11-10 | 2021-10-05 | Futurewei Technologies, Inc. | Separation of computation from storage in database for better elasticity |
CN108111566B (zh) * | 2016-11-25 | 2020-11-06 | 杭州海康威视数字技术股份有限公司 | 一种云存储系统扩容方法、装置及云存储系统 |
CN106844706A (zh) * | 2017-02-06 | 2017-06-13 | 广东神马搜索科技有限公司 | 更新网页存储的方法、设备、网页存储系统和搜索系统 |
CN108628892B (zh) * | 2017-03-21 | 2020-11-20 | 北京京东尚科信息技术有限公司 | 有序数据存储的方法、装置、电子设备和可读存储介质 |
CN107256132B (zh) * | 2017-06-21 | 2019-12-10 | 桂林电子科技大学 | 一种基于性能测试的异构Redis集群存储分配方法 |
CN109521943B (zh) * | 2017-09-19 | 2022-09-20 | 腾讯科技(深圳)有限公司 | 云数据库实例的分配方法及相关产品 |
CN110058789B (zh) * | 2018-01-18 | 2022-06-03 | 伊姆西Ip控股有限责任公司 | 用于管理存储系统的方法、存储系统以及计算机程序产品 |
CN110244901B (zh) * | 2018-03-07 | 2021-03-26 | 杭州海康威视系统技术有限公司 | 任务分配方法及装置、分布式存储系统 |
CN109271364A (zh) * | 2018-09-18 | 2019-01-25 | 图普科技(广州)有限公司 | 存储方法及装置 |
CN112597248B (zh) * | 2020-12-26 | 2024-04-12 | 中国农业银行股份有限公司 | 一种大数据分区存储方法及装置 |
CN113032447A (zh) * | 2020-12-31 | 2021-06-25 | 一汽资本控股有限公司 | 一种数据分布式存储的方法以及分布式数据存储系统 |
CN113109642B (zh) * | 2021-03-10 | 2023-12-05 | 中国电力科学研究院有限公司 | 一种用于对电能质量信号数据处理的方法及系统 |
CN113590042B (zh) * | 2021-07-29 | 2024-03-19 | 杭州宏杉科技股份有限公司 | 一种数据保护存储方法、装置及设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009163665A (ja) * | 2008-01-10 | 2009-07-23 | Nippon Telegr & Teleph Corp <Ntt> | 動的拡張性を備えた情報検索装置、動的拡張性を備えた情報検索方法、動的拡張性を備えた情報検索プログラムおよびそのプログラムを記録した記録媒体 |
CN102013991A (zh) * | 2009-09-08 | 2011-04-13 | 华为技术有限公司 | 自动扩容的方法、管理设备及系统 |
CN102880802A (zh) * | 2012-09-25 | 2013-01-16 | 浙江图讯科技有限公司 | 一种用于面向工矿企业安全生产云服务平台系统的重大危险源的分析评价方法 |
CN103229151A (zh) * | 2012-12-27 | 2013-07-31 | 华为技术有限公司 | 一种分区扩展方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007066259A (ja) * | 2005-09-02 | 2007-03-15 | Hitachi Ltd | 計算機システムとストレージシステム並びにボリューム容量拡張方法 |
-
2013
- 2013-12-09 CN CN201310661131.XA patent/CN103810244B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009163665A (ja) * | 2008-01-10 | 2009-07-23 | Nippon Telegr & Teleph Corp <Ntt> | 動的拡張性を備えた情報検索装置、動的拡張性を備えた情報検索方法、動的拡張性を備えた情報検索プログラムおよびそのプログラムを記録した記録媒体 |
CN102013991A (zh) * | 2009-09-08 | 2011-04-13 | 华为技术有限公司 | 自动扩容的方法、管理设备及系统 |
CN102880802A (zh) * | 2012-09-25 | 2013-01-16 | 浙江图讯科技有限公司 | 一种用于面向工矿企业安全生产云服务平台系统的重大危险源的分析评价方法 |
CN103229151A (zh) * | 2012-12-27 | 2013-07-31 | 华为技术有限公司 | 一种分区扩展方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN103810244A (zh) | 2014-05-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103810244B (zh) | 一种基于数据分布的分布式数据存储系统的扩容方法 | |
CN109299113B (zh) | 具有存储感知的混合索引的范围查询方法 | |
US9935919B2 (en) | Directory partitioned system and method | |
CN108769111A (zh) | 一种服务器连接方法、计算机可读存储介质及终端设备 | |
WO2010099715A1 (zh) | 数据操作方法、系统、客户端和数据服务器 | |
CN102567505B (zh) | 一种分布式数据库及其数据操作方法 | |
Xiao et al. | Using parallel bloom filters for multiattribute representation on network services | |
CN113315705B (zh) | 基于单次哈希布隆过滤器的Flexible IP寻址方法及装置 | |
CN106227677B (zh) | 一种变长缓存元数据管理的方法 | |
CN104699946B (zh) | 一种游戏场景的管理方法及装置 | |
CN114064984B (zh) | 一种基于稀疏数组链表的世界状态增量更新方法及装置 | |
CN104252457B (zh) | 一种用于对数据集合进行管理的方法与设备 | |
CN105959419A (zh) | 基于一致性树的分布式存储结构的构建方法及系统 | |
CN103970875A (zh) | 一种并行重复数据删除方法 | |
CN107330094A (zh) | 动态存储键值对的布鲁姆过滤器树结构及键值对存储方法 | |
CN103544300B (zh) | 一种云环境下可扩展存储索引结构的实现方法 | |
CN110399096A (zh) | 分布式文件系统元数据缓存重删的方法、装置以及设备 | |
CN101840417B (zh) | 一种基于相关关系的物联网uid查询方法 | |
CN107294855B (zh) | 一种高性能计算网络下的tcp查找优化方法 | |
CN117714543A (zh) | 一种基于缓存实现平台间数据共享的方法 | |
US9292559B2 (en) | Data distribution/retrieval using multi-dimensional index | |
CN107257356A (zh) | 一种基于超图分割的社交用户数据优化放置方法 | |
CN110417661A (zh) | 一种用于命名数据网络中网络节点的转发方法、装置、系统及存储介质 | |
CN103902554B (zh) | 数据访问方法与装置 | |
CN104391931A (zh) | 一种云计算中海量数据高效索引方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |