一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于Nauru-graph的大规模数据存储和读取方法及装置与流程

2022-03-26 06:44:08 来源:中国专利 TAG:

基于nauru-graph的大规模数据存储和读取方法及装置
技术领域
1.本发明涉及信息网络、分布式存储系统、虚拟化、拓扑结构及网络存储技术领域,特别涉及一种基于nauru-graph的大规模数据存储和读取方法及装置。


背景技术:

2.分布式存储是对应于集中式存储提出的,最初企业级的存储设备都是集中式存储,该存储设备由机头、磁盘阵列(jbod)和交换机等设备构成,其中机头是这个存储系统中最核心的部件,所有的数据需要通过一个统一的入口-机头,被分到不同的磁盘中进行存储。
3.随着网络的普及和云端大数据时代的到来,每天都有海量的数据产生,存储需求也随之应运而生,分布式是解决该问题的一个主要思路。分布式存储最早由谷歌提出,在谷歌的分布式存储系统架构(hdfs)中,将服务器分为两种:namenode和datanode。其中namenode负责存储和管理元数据(数据的索引id),datanode负责存储管理实际数据。如果用户想要读取文件,则首先从namenode中获取该文件的存储位置(具体在哪个datanode),然后从具体的datanode中检索具体文件。在此分布式存储框架的基础上,演变出了我们当前非常流行的分布式存储架构ceph和swift,其中ceph通过一个设备映射关系来计算写入数据的位置。swift是将设备做成哈希环,通过一致性哈希映射计算写入数据的位置。相较于hdfs,二者都可以分担请求的负载,各有适用的应用场景。但是在负载均衡和系统稳定性方面都有一定的改进空间。
4.hdfs主要面向大数据的存储场景,其处理模式是一次写入、多次读取,适合低写入、高读取的业务,不适合频繁的数据写入。同时hdfs采用多副本数据保护机制,不推荐在虚拟化环境中使用。ceph是一个开源的存储项目,采用crush算法,相较于hdfs数据分布更加均衡、并行度更高。同时部署更加复杂,性能也更弱。swift同属开源存储项目,与ceph类似,考虑到swift的数据是最终一致的,因此在面对海量数据处理时swift效率更高,但是客户段在访问对象存储系统服务时,需要通过swift网关才能获取数据,相较于ceph通过每一个存储节点上的osd获取数据信息,不够灵活。同时,这些技术解决方案在进行数据映射,没有从拓扑结构的维度进行考虑。引入拓扑结构可以使映射更加均衡,安全和稳定性更高。


技术实现要素:

5.本发明旨在至少在一定程度上解决相关技术中的技术问题之一。
6.为此,本发明的第一个目的在于提出一种基于nauru-graph的大规模数据存储和读取方法,通过引入特殊的图结构,在提高云端分布式存储的负载均衡和系统稳定性方面给出了一种改进方案。
7.本发明的第二个目的在于提出一种基于nauru-graph的大规模数据存储和读取装置。
8.为达上述目的,本发明第一方面实施例提出了一种基于nauru-graph的大规模数
据存储和读取方法,包括:
9.步骤s1,获取数据id值,检索所述数据id值的可用存储节点,以生成所述数据的索引项id值;以及,
10.将所述数据的索引项id值,存储于所述数据id值的节点上,以对所述数据进行存储操作;
11.步骤s2,计算所述数据的索引项id值,通过所述索引项中数据id找到目标节点,以对所述数据进行读取操作。
12.另外,根据本发明上述实施例的基于nauru-graph的大规模数据存储和读取方法还可以具有以下附加的技术特征:
13.进一步地,在本发明的一个实施例中,所述步骤s1,包括:
14.s1.1,获取数据的存储id,检索可用存储节点,假设当前检索节点id为i,尝试通过节点i写入数据,若节点i中空间充足,则数据存储id为i,并将数据存入节点i中;若节点i中空间不足,检索与节点i相邻的其它节点,按id从小到大进行检索,直到找到合适的节点j,将数据写入对应节点j中,并将数据的存储id置为j,并生成索引项;
15.s1.2,通过s1.1中的账户名/对象名获取数据的初始索引id;
16.s1.3,根据hashmap重置数据的索引id;将s1.2中得到的索引id进行哈希映射得到索引项的id值:k=hash(f)%24,k取[0,23]之间的任意唯一值;
[0017]
s1.4,根据邻接矩阵表,找到当前节点到存储索引项节点k的一条最短路径,在节点k中存入索引项。
[0018]
进一步地,在本发明的一个实施例中,所述步骤s2,包括:
[0019]
s2.1,根据数据账户名/对象名计算索引id;通过hashmap找到索引id在nauru-graph中对应的存储索引项节点的id:i=f_id=hash(f)%24。
[0020]
s2.2,通过最短路径到节点i,取出索引项;
[0021]
s2.3,根据索引项中的数据存储id,找到目标节点,取出数据。
[0022]
进一步地,在本发明的一个实施例中,所述步骤s1.4,包括:
[0023]
根据邻接矩阵表,找到当前节点到存储索引项节点k的一条最短路径,检查节点k的状态;若正常,则在节点k中存入索引项,若不正常,则检查与节点k相邻的其他节点,按id从小到大进行检查,直到找到合适的节点k

,在k

中存入索引项。
[0024]
进一步地,在本发明的一个实施例中,所述根据事故分析不同程序计算结果对比或/及不确定性分析结果,对现象识别模型进行优化和完善,包括:根据所述核电站设计数据信息建立事故分析基准模型,基于所述事故分析基准模型进行节点划分确认以及不确定性分析步骤和不同程序结果分析对比。
[0025]
进一步地,在本发明的一个实施例中,所述步骤s1,还包括:
[0026]
s1.5定期对邻接表中的邻接节点进行检测,如果某个邻接节点失效,则修改对应的行列值,将所述行列值预设一个阈值,表示路径已失效。
[0027]
本发明实施例的基于nauru-graph的大规模数据存储和读取方法,通过获取数据id值,检索数据id值的可用存储节点,以生成数据的索引项id值;以及,将数据的索引项id值,存储于数据id值的节点上,以对数据进行存储操作;计算数据的索引项id值,通过索引项中数据id找到目标节点,以对数据进行读取操作。本发明主要通过引入高对称强联通的
拓扑结构改进数据存储时,数据分布均衡,系统稳定性和存储效率不能兼得的问题。同时给出了依据实际场景生成高对称强连通拓扑结构的方案。
[0028]
为达上述目的,本发明第二方面实施例提出了一种基于nauru-graph的大规模数据存储和读取装置,包括:
[0029]
存储模块,用于获取数据id值,检索所述数据id值的可用存储节点,以生成所述数据的索引项id值;以及,
[0030]
将所述数据的索引项id值,存储于所述数据id值的节点上,以对所述数据进行存储操作;
[0031]
读取模块,用于计算所述数据的索引项id值,通过所述索引项中数据id找到目标节点,以对所述数据进行读取操作。
[0032]
本发明实施例的基于nauru-graph的大规模数据存储和读取装置,通过存储模块,用于获取数据id值,检索数据id值的可用存储节点,以生成数据的索引项id值;以及,将数据的索引项id值,存储于数据id值的节点上,以对数据进行存储操作;读取模块,用于计算数据的索引项id值,通过索引项中数据id找到目标节点,以对数据进行读取操作。本发明主要通过引入高对称强联通的拓扑结构改进数据存储时,数据分布均衡,系统稳定性和存储效率不能兼得的问题。同时给出了依据实际场景生成高对称强连通拓扑结构的方案。
[0033]
本发明的有益效果为:
[0034]
利用了nauru-graph的特殊图结构:每个顶点到图中任意顶点最多只需要四步,只有当3台以上机器发生损坏时,才会对连通性造成影响,使得存储可靠性更强。通过数据和索引两级存储的方法,改进了存储空间有限情况下的数据定位,进一步地,通过将数据和节点映射到同一个id空间,可以有效地进行统一数据存储管理,具有很强的实用价值。同时我们给出了一种生成一系列同类型高连通度高对称图的方法,以应对不同具体场景不同时对图结构的不同需求。
[0035]
本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
[0036]
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
[0037]
图1为根据本发明一个实施例的基于nauru-graph的大规模数据存储和读取方法流程图;
[0038]
图2为根据本发明一个实施例的nauru-graph的结构特性示意图;
[0039]
图3为根据本发明一个实施例的nauru-graph的邻接矩阵形式示意图;
[0040]
图4为根据本发明一个实施例的利用nauru-graph进行数据写入的步骤示意图;
[0041]
图5为根据本发明一个实施例的利用nauru-graph进行数据读取的步骤示意图;
[0042]
图6为根据本发明另一个实施例的基于nauru-graph的数据存储和读取方法的基于p2p网络和nauru-graph网络的双层网络示意图。
[0043]
图7为根据本发明一个实施例的基于集合和群论思想的适用于数据分布式存储的高对称强连通图结构的生成方法示意图;
[0044]
图8为根据本发明一个实施例的基于nauru-graph的大规模数据存储和读取装置结构示意图。
具体实施方式
[0045]
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
[0046]
下面参考附图描述本发明实施例的基于nauru-graph的大规模数据存储和读取方法和装置。
[0047]
图1为本发明实施例所提供的基于nauru-graph的大规模数据存储和读取方法的流程图。
[0048]
如图1所示,该基于nauru-graph的大规模数据存储和读取方法包括:
[0049]
步骤s1,获取数据id值,检索数据id值的可用存储节点,以生成数据的索引项id值;以及,将数据的索引项id值,存储于数据id值的节点上,以对数据进行存储操作。
[0050]
可以理解地是,通过两个层次的管理,将数据内容和索引信息进行分开存储。第一层是待存储数据所对应的数据id,即表述数据的存储节点所对应id,需要尽量保证将数据存储在提交该数据存储请求的节点或者相近的节点上,减少多个节点间传递数据带来的通信代价;第二层是确定数据的索引id,将数据id等相关信息组成一个索引id,并将索引项存储于该id值的节点上,两个层次的存储保证了该方法可以有效地对数据进行路由定位和存储管理,同时,负载均衡的特性,也有利于nauru-graph结构在分布式存储系统中的应用。图4为根据本发明一个实施例的利用nauru-graph进行数据写入的步骤示意图,如图4所示,具体的步骤如下:
[0051]
1)获取数据的存储id;检索可用存储节点,假设当前检索节点id为i,尝试通过节点i写入数据。若节点i中空间充足,则数据存储id为i,并将数据存入节点i中;若节点i中空间不足,检索与节点i相邻的其它节点,按id从小到大进行检索,直到找到合适的节点j,将数据写入对应节点j中,并将数据的存储id置为j,并生成索引项。
[0052]
2)确定数据的索引id:通过1)中的账户名/对象名获取数据的初始索引id;
[0053]
3)根据hashmap重置数据的索引id;将2)中得到的索引id进行哈希映射得到索引项的id值:k=hash(f)%24,k取[0,23]之间的任意唯一值。
[0054]
4)根据邻接矩阵表(见表1),找到当前节点到存储索引项节点k的一条最短路径,检查节点k的状态。若正常,则在节点k中存入索引项,若不正常,则检查与节点k相邻的其他节点,按id从小到大进行检查,知道找到合适的节点k

,在k

中存入索引项。
[0055]
5)定期对邻接表中的邻接节点进行检测,如果某个邻接节点失效,则修改对应的行列值,将其设为一个很大的数,表示该路径已失效。
[0056]
表1
[0057]
节点链接节点节点链接节点节点链接节点节点链接节点01、5、2167、11、191213、17、181819、2313、1576、9、131315192123、4、2389、10、221415、16、202021、22
399无15无21无45、171011、161617222351111无17无23无
[0058]
nauru-graph的链接表信息,每个节点与邻点的节点信息仅展示一次
[0059]
进一步地,nauru-graph邻接矩阵形式如图3所示,实际操作中非1项全部设为∞。
[0060]
进一步地,图2为nauru-graph网络中的结构和id,展示了nauru-graph的结构特性,如图2所示,nauru-graph24个顶点、36条边、直径为4,点三连通且边三连通的对称二部三正则图。
[0061]
进一步地,图3展示了nauru-graph的邻接矩阵形式,如图3所示该矩阵为对称阵,任意行或列有三个元素,表示每个节点均为3度点。
[0062]
步骤s2,计算数据的索引项id值,通过索引项中数据id找到目标节点,以对数据进行读取操作。
[0063]
具体地,图5为根据本发明一个实施例的利用nauru-graph进行数据写入的读取示意图,如图5所示,具体的,从任意节点读取数据,其读取步骤如下:
[0064]
a)根据数据账户名/对象名计算索引id;通过hashmap找到它在nauru-graph中对应的存储索引项节点的id:i=f_id=hash(f)%24。
[0065]
b)通过最短路径到节点i,取出索引项;
[0066]
c)根据索引项中的数据存储id,找到目标节点,取出数据。
[0067]
本发明通过数据和索引两级存储的方法,改进了存储空间有限情况下的数据定位,进一步地,通过将数据和节点映射到同一个id空间,可以有效地进行统一数据存储管理,具有很强的实用价值。同时我们给出了一种生成一系列同类型高连通度高对称图的方法,以应对不同具体场景不同时对图结构的不同需求。
[0068]
作为另一种示例,图6是利用本发明的基于特殊图结构(以nauru-graph为例)的数据存储和读取方法的基于p2p网络和nauru-graph网络的双层网络示意图。如图6所示,
[0069]
假设存在一个双层网络层一为24个节点组成的nauru-graph存储网络,层2为pastry组织的p2p网络并提供某些应用。
[0070]
层1采用纠删码的方法进行冗余存储,层2中每个节点都包含至少一个nauru-graph网络中的节点信息。假设文件名为f的数据通过节点0写入,则写入步骤如下:
[0071]
1)如果节点0中空间充足,则数据的id为0,写入节点0中;如果0中空间不足则数据id只能为表3中id映射表中存在的链接的id数(这里可为1,5,21),写入具有可用空间且id最小的节点,这里选择节点1;
[0072]
2)计算文件id,f_id=hash(f)%24,这里假设f_id=20;
[0073]
3)将数据id,数据文件名等相关信息简历索引项,如《f,0》,放置在id为20的nauru-graph节点中。根据表2所示的邻接矩阵,找到从节点0到20的一条最短路径,并将索引项存入其中。
[0074]
4)每隔2小时,每个节点需要对邻接表中的邻接节点进行检测,如果某个邻接节点已失效,则修改邻接矩阵中这两个节点id所对应行、列的值(即该节点id和已失效的邻接节点id在表2中的交叉值),将其设为无穷大或者一个很大的数,表示该路径已经无效。
[0075]
5)当从任意节点读取数据时,假设从节点1读取文件f,读取过程如下:
[0076]
a)计算文件哈希值f_id=hash(f)%24=20,即索引id值;
[0077]
b)通过表1的矩阵路径表,找到5跳内从节点1到达节点20的所有路径,比如:路径距离,如表2所示:
[0078]
表2
[0079][0080]
然后找到其中距离最短的路径,即1-0-21-20或1-15-14-20路由到索引节点,取出其中的索引表项《f,0》,并返回给节点1;
[0081]
c)从索引表项中,读取数据id(这里值为0),则节点1向节点0发出查询请求,读取数据。
[0082]
进一步地,作为一种示例,图7为根据本发明一个实施例的基于集合和群论思想的适用于数据分布式存储的高对称强连通图结构的生成方法示意图,举例来说,如图7所示:
[0083]
1)先确定一个群g=《a,b|a^4=b^2=e》,s=《a,b》为群g的生成子集合;
[0084]
2)群g中的每一个元素均可对应图g中的一个点,群g的阶数等于图g的点数,即8;
[0085]
3)对图g中的任意两点u和v,点u对应群g中的元素g,点v对应群g中的元素g

,点u和点v之间存在连边当且仅当存在生成子s属于s使得g’=gs;
[0086]
4)计算该生成图的连通度和直径,验证是否符合需要。
[0087]
根据本发明实施例的基于nauru-graph的大规模数据存储和读取方法,通过获取数据id值,检索数据id值的可用存储节点,以生成数据的索引项id值;以及,将数据的索引项id值,存储于数据id值的节点上,以对数据进行存储操作;计算数据的索引项id值,通过索引项中数据id找到目标节点,以对数据进行读取操作。本发明主要通过引入高对称强联通的拓扑结构改进数据存储时,数据分布均衡,系统稳定性和存储效率不能兼得的问题。同时给出了依据实际场景生成高对称强连通拓扑结构的方案。
[0088]
图8为根据本发明一个实施例的基于nauru-graph的大规模数据存储和读取装置结构示意图。
[0089]
如图8所示,该基于nauru-graph的大规模数据存储和读取装置10包括:存储模块100和读取模块200。
[0090]
存储模块100,用于获取数据id值,检索数据id值的可用存储节点,以生成数据的索引项id值;以及,
[0091]
将数据的索引项id值,存储于数据id值的节点上,以对数据进行存储操作;
[0092]
读取模块200,用于计算数据的索引项id值,通过索引项中数据id找到目标节点,以对数据进行读取操作。
[0093]
进一步地,上述存储模块100,包括:
[0094]
生成模块,用于获取数据的存储id,检索可用存储节点,假设当前检索节点id为i,尝试通过节点i写入数据,若节点i中空间充足,则数据存储id为i,并将数据存入节点i中;若节点i中空间不足,检索与节点i相邻的其它节点,按id从小到大进行检索,直到找到合适的节点j,将数据写入对应节点j中,并将数据的存储id置为j,并生成索引项;
[0095]
获取模块,用于通过生成模块中的账户名/对象名获取数据的初始索引id;
[0096]
映射模块,用于根据hashmap重置数据的索引id;将获取模块中得到的索引id进行哈希映射得到索引项的id值:k=hash(f)%24,k取[0,23]之间的任意唯一值;
[0097]
存入模块,用于根据邻接矩阵表,找到当前节点到存储索引项节点k的一条最短路径,在节点k中存入索引项。
[0098]
进一步地,上述读取模块200,包括:
[0099]
计算模块,用于根据数据账户名/对象名计算索引id;通过hashmap找到索引id在nauru-graph中对应的存储索引项节点的id:i=f_id=hash(f)%24;
[0100]
节点模块,用于通过最短路径到节点i,取出索引项;
[0101]
目标模块,用于根据索引项中的数据存储id,找到目标节点,取出数据。
[0102]
进一步地,上述存入模块,还用于:
[0103]
根据邻接矩阵表,找到当前节点到存储索引项节点k的一条最短路径,检查节点k的状态;若正常,则在节点k中存入索引项,若不正常,则检查与节点k相邻的其他节点,按id从小到大进行检查,直到找到合适的节点k

,在k

中存入索引项。
[0104]
进一步地,上述存储模块,还包括:
[0105]
检测模块,用于定期对邻接表中的邻接节点进行检测,如果某个邻接节点失效,则修改对应的行列值,将行列值预设一个阈值,表示路径已失效。
[0106]
根据本发明实施例的基于nauru-graph的大规模数据存储和读取装置,通过存储模块,用于获取数据id值,检索数据id值的可用存储节点,以生成数据的索引项id值;以及,将数据的索引项id值,存储于数据id值的节点上,以对数据进行存储操作;读取模块,用于计算数据的索引项id值,通过索引项中数据id找到目标节点,以对数据进行读取操作。本发明主要通过引入高对称强联通的拓扑结构改进数据存储时,数据分布均衡,系统稳定性和存储效率不能兼得的问题。同时给出了依据实际场景生成高对称强连通拓扑结构的方案。
[0107]
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
[0108]
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
[0109]
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献