一种基于IPFS分布式存储关键词检索方法与流程

文档序号:30831546发布日期:2022-07-22 21:40阅读:305来源:国知局
一种基于IPFS分布式存储关键词检索方法与流程
一种基于ipfs分布式存储关键词检索方法
技术领域
1.本发明涉及数据检索技术领域,尤其涉及一种基于ipfs分布式存储关键词检索方法。


背景技术:

2.随着信息技术的快速发展,数据呈爆发时增长。为了满足大数据背景下不断增长的数据应用需求,存储系统正在由传统的集中式架构向分布式架构演进。分布式存储经过飞速发展,目前已有一定规模。星际文件系统(ipfs)是一个点对点的分布式文件系统,它能够将所有异构的设备通过相同的方式组成一个网络。与传统http基于物理位置定位不同,ipfs分布式网络基于内容寻址,通过文件哈希获得文件,相同文件去冗余存储,极大节省了存储空间。这也带来了文件检索的问题,哈希冗长晦涩,用户不方便保存,不利于文件流通传播,针对此类问题,本文对ipfs节点进行改进,并构建出去中心化的关键词检索系统。
3.星际文件系统(ipfs)2014年上线,作为一项新兴技术一上线便得到广大技术者的研究,并尝试应用到各个场景中。ipfs是一个点对点的分布式文件系统,它能过将所有异构的设备通过相同的方式组成一个网络。ipfs与web相似,但是web基于位置寻址,ipfs基于内容寻址。ipfs可以被看作单一的bittorrent群,在一个git仓库中交换对象。ipfs提供了一个高吞吐量的内容寻址块存储模型,这形成了一个广义的merkle-dag,一个可以构建版本化文件系统、区块链甚至永久web的数据结构。ipfs结合了分布式哈希表、激励块交换和自认证命名空间。ipfs没有单点故障,节点不需要互相信任。
4.当前检索方案主要有siva和ipfs-ddam以及ipfs-search, ipfs-search是一个中心化的搜索引擎,与ipfs设计初衷违背。siva 与ipfs-ddam将索引键入分布式哈希表,查询时通过分布式哈希表进行查询。缺点:ipfs节点本身文件交换通过dht(分布式哈希表),再将索引信息键入分布式哈希表,节点通信量将非常庞大,同时庞大的通信将用产生较长的时延,给用户带来非常差的用户体验。


技术实现要素:

5.基于背景技术存在的技术问题,本发明提出了一种基于ipfs分布式存储关键词检索方法。
6.本发明提出的一种基于ipfs分布式存储关键词检索方法,包括如下步骤:
7.s1索引提取;
8.s11节点根据rsa非对称加密算法生成公私钥对,用于证明身份和对发布的索引进行数字签名,使其他节点对信息能够进行验证,rsa 签名认证机制包括三个算法:keygen,sign,verify,节点使用keygen 生成pk,sk,发布消息时调用sign算法,将私钥sk和消息m作为输入,输出签名s,验证签名时调用verify方法,将pk,s和m作为输入,输出比特值b,b=1代表验证通过,即签名s与消息m对应,b=0 代表验证不通过;
9.s12节点通过libp2p中的pubsub泛洪广播操作,pubsub即消息订阅模式,在ipfs网
络内,消息的发送者(publishers)不直接将消息发给接送者(subscribers),而是通过分布式哈希表(dht)在相邻节点传递消息,发送者不知到接收者存在,也不知道消息别多少接收者获取,接收者只需订阅一个或多个消息类别,消息通过dht转发也无法知道消息发布者的存在,节点泛洪广播操作时将消息msub到keyword_index主题,接收者pubkeyword_index主题,订阅之后节点可收到发布者的操作信息;
10.s13因消息订阅模式通过分布式哈希表传递消息无法知道消息发布者的存在,首先需要在以keyword_index这个主题内建立自己的身份,对所有订阅keyword_index主题的节点pub自己身份信息,为了增加可靠性,使用sign方法对nodeid与公钥签名,然后将nodeid,公钥与签名一起pub出去,这里的pub使用floodsubrouter泛洪广播,接收节点收到之后调用verify方法验证消息是否准确,验签成功则将nodeid与pk保存至索引节点列表;
11.s14侦听dht(分布式哈希表),向连接节点不断发送find_node请求,枚举kademlia网络内所有可到达的节点并轮询这些节点的k-buckets,返回它们的关键信息(nodeid,dht网络内以保存的地址,是否正常连接),对于能够连接的节点,通过访问节点的have_list获得节点保存的文件;
12.s15对步骤s14获取的文件使用apache的tika程序对元数据提取,对提取之后的元数据使用tf-idf(termfrequency-inversedocumentfrequency)算法提取权重最高关键词,词,词频(tf)表示词条(关键字)在文本中出现的频率,逆向文件频率(idf)表示词条在其他文本中出现的频率,某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的tf-idf。关键词与文件cid对应成为一组关键词索引;关键词与文件类型、内容哈希、是否非法内容和时间戳一起生成如下的json文件;
[0013][0014]
s16步骤s15得到的索引需存入相应倒排索引文件中,倒排索引不是由记录来确定属性值,而是由属性值来确定记录的位置,这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址,所有关键词的倒排文件组成一棵字典树,字典树每个节点记
录该节点表示keyword和该keyword对应的倒排索引文件,倒排索引文件存储该keyword对应文件的信息,包括文件cid、是否合法、文件类型和发现时间,通过本地字典树找到该关键词倒排文件的内容哈希,通过内容哈希找到倒排文件,检查该cid是否已存在,若不存在则插入,插入位置由时间戳的反顺序决定,插入之后将新的倒排索引进行内容哈希,并更新字典树上该keyword对应节点的倒排索引文件cid;
[0015]
s17将步骤s15得到的json索引作为消息m与步骤s11的sk调用rsa的sign方法得到数字签名,将索引、pk、node id与时间戳一起生成json文件等待广播至下游节点;具体如下所示:
[0016]
[0017][0018]
s18单个节点完成索引添加后,为了保证其他节点都收敛到相同的状态,需要在索引分布式网络内对其他节点进行资源复制;索引的建立不存在因果关系且不被先后顺序影响,故分布式网络内采用基于操作的无冲突复制数据类型cmrdt策略保证网络内节点索引最终一致,一个cmrdt对象可以抽象成为一个六元组(s,s0,q,t,u,p),s代表状态域,si∈s且s0代表初始状态,q、t、u都为方法,q(query)为查询状态方法,查询节点的索引更新状态,t(prepare-update)为本地索引更新方法,步骤s16就为方法t的实现,u(effect-update)为远程更新方法,指将本节点更新的索引广播供下游节点更新索引目录,p为索引递送关系,在ipfs分布式网络内对所用sub了keyword_index主题的节点进行泛洪投递,具体来讲,对于一个索引更新,触发节点首先执行步骤e(prepare-update),这是一个无副作用的更新,随后根据p(泛洪投递),立即执行方法远程更新方法u(effect-update),将步骤s17得到的json文件pub到下游节点;
[0019]
s2索引更新;
[0020]
s21节点通过libp2p的pubsub订阅keyword_index主题便能得到上游节点根据递送关系p(泛洪投递)传递过来的操作,即上游节点执行了带副作用的方法u,操作分为两类,身份建立操作和索引更新操作;
[0021]
s22对于收到的消息首先进行验签操作,调用rsa非对称加密的verify方法,将数字签名与pk一起作为m校验,若输出比特值为0则丢弃,输出比特值1则对消息进行更新;
[0022]
s23若消息为身份建立操作,调用q-identity方法检查节点更新状态,扫描节点的索引节点列表,检查是否已存在对应的pk与nodeid,若未存在则将pk与nodeid加入索引节点列表,若已存在则丢弃,同时查看搁置索引列表,是否存在以该nodeid为源泛洪广播的更新索引,若存在则步骤与索引更新操作一致;
[0023]
s24若消息为索引更新操作,调用q-index方法检查节点更新状态,以时间倒序扫描索引更新操作中的文件cid查询本机状态,若已完成该操作则丢弃;
[0024]
s25通过字典树定位到该索引对应关键字的倒排索引文件,已该json索引文件中的find-date时间倒叙将该索引插入至相应位置,新建立的索引排在旧索引前面;
[0025]
s26插入之后将新的倒排索引进行内容哈希,并将新的倒排索引文件的cid更新到字典树对应的keyword节点;
[0026]
s3响应检索;
[0027]
s31选择分布式检索网络内任一节点访问,输入关键词,对节点发起检索请求;
[0028]
s32节点收到关键词之后,将关键词分解为单个字符,在字典树进行遍历,定位到与关键词对应的字典树节点并获得该节点对应倒排索引文件的内容哈希;
[0029]
s33通过ipfs节点获取具体倒排文件,对倒排索引中 illegal-content为true的条目进行过滤,将所有合法条目返回至客户端,并将每个索引条目的cid链接至ipfs公网网关,方便进行下载。
[0030]
优选的,所述步骤s16中两层索引设计,字典树对关键词倒排索引文件cid进行索引,为第一层索引;具体关键词倒排索引文件存储在ipfs内,通过字典树每个节点cid获取,为第二层索引。
[0031]
优选的,所述步骤s18结合conflict-free replicated data type 解决分布式检索节点索引一致性问题,建立身份与递送索引操作皆被设计为commute,query为查询状态算法,查询索引更新状态与信任节点更新状态;prepare-update为无副作用更新算法,进行本地索引更新;effect-update为带副作用更新算法,将本地更新索引通过 dht递送至下游ipfs节点。
[0032]
本发明中,所述一种基于ipfs分布式存储关键词检索方法,此分布式检索方案实现异步构建,所有节点相互协作保证整个系统正常运转,相较于现有系统,避免了分布式哈希表之间大量冗余的通信,从而减少了节点间传递消息所耗费时间,同时每个节点都是索引全节点没有单点故障,避免了分布式网络内节点上下线带来的部分索引不能响应的问题,此方案还针对海量索引条目设计两层索引来对查询效率做了进一步优化,第一层索引将所有具体索引条目的json文件存入ipfs,第二层索引基于字典树将每个倒排索引文件cid存入字典树相应节点,一方面实现了快速定位查询,另一方面字典树因为只保存索引文件的cid所以在查询时加载入内存不会对内存有太大依赖,解决了单机资源屏障限制。
附图说明
[0033]
图1为本发明提出的一种基于ipfs分布式存储关键词检索方法的字典树与倒排索引json文件示意图;
[0034]
图2为本发明提出的一种基于ipfs分布式存储关键词检索方法的索引提取流程图;
[0035]
图3为本发明提出的一种基于ipfs分布式存储关键词检索方法的检索更新流程图;
[0036]
图4为本发明提出的一种基于ipfs分布式存储关键词检索方法的响应检索流程图;
[0037]
图5为本发明提出的一种基于ipfs分布式存储关键词检索方法的示意图;
[0038]
图6为本发明提出的一种基于ipfs分布式存储关键词检索方法的ipfs文件存在形式图。
具体实施方式
[0039]
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
[0040]
参照图1-6,一种基于ipfs分布式存储关键词检索方法,包括如下步骤:
[0041]
s1索引提取;
[0042]
s11节点根据rsa非对称加密算法生成公私钥对,用于证明身份和对发布的索引进行数字签名,使其他节点对信息能够进行验证,rsa签名认证机制包括三个算法:keygen,sign,verify,节点使用keygen生成pk,sk,发布消息时调用sign算法,将私钥sk和消息m作为输入,输出签名s,验证签名时调用verify方法,将pk,s和m作为输入,输出比特值b,b=1代表验证通过,即签名s与消息m对应,b=0代表验证不通过;
[0043]
s12节点通过libp2p中的pubsub泛洪广播操作,pubsub即消息订阅模式,在ipfs网络内,消息的发送者(publishers)不直接将消息发给接送者(subscribers),而是通过分布式哈希表(dht)在相邻节点传递消息,发送者不知到接收者存在,也不知道消息别多少接收者获取,接收者只需订阅一个或多个消息类别,消息通过dht转发也无法知道消息发布者的存在,节点泛洪广播操作时将消息msub到keyword_index主题,接收者pubkeyword_index主题,订阅之后节点可收到发布者的操作信息;
[0044]
s13因消息订阅模式通过分布式哈希表传递消息无法知道消息发布者的存在,首先需要在以keyword_index这个主题内建立自己的身份,对所有订阅keyword_index主题的节点pub自己身份信息,为了增加可靠性,使用sign方法对nodeid与公钥签名,然后将nodeid,公钥与签名一起pub出去,这里的pub使用floodsubrouter泛洪广播,接收节点收到之后调用verify方法验证消息是否准确,验签成功则将nodeid与pk保存至索引节点列表;
[0045]
s14侦听dht(分布式哈希表),向连接节点不断发送find_node请求,枚举kademlia网络内所有可到达的节点并轮询这些节点的k-buckets,返回它们的关键信息(nodeid,dht网络内以保存的地址,是否正常连接),对于能够连接的节点,通过访问节点的have_list获得节点保存的文件;
[0046]
s15对步骤s14获取的文件使用apache的tika程序对元数据提取,对提取之后的元数据使用tf-idf(termfrequency-inversedocumentfrequency)算法提取权重最高关键词,关键词与文件cid对应成为一组关键词索引;
[0047]
s16步骤s15得到的索引需存入相应倒排索引文件中,倒排索引不是由记录来确定属性值,而是由属性值来确定记录的位置,这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址,所有关键词的倒排文件组成一棵字典树,字典树每个节点记录该节点表示keyword和该keyword对应的倒排索引文件,倒排索引文件存储该keyword对应文件的信息,包括文件cid、是否合法、文件类型和发现时间,通过本地字典树找到该关键词倒排文件的内容哈希,通过内容哈希找到倒排文件,检查该cid是否已存在,若不存在则插入,插入位置由时间戳的反顺序决定,插入之后将新的倒排索引进行内容哈希,并更新字典树上该keyword对应节点的倒排索引文件cid;
[0048]
s17将步骤s15得到的json索引作为消息m与步骤s11的sk调用rsa的sign方法得到数字签名,将索引、pk、nodeid与时间戳一起生成json文件等待广播至下游节点;
[0049]
s18单个节点完成索引添加后,为了保证其他节点都收敛到相同的状态,需要在索引分布式网络内对其他节点进行资源复制;索引的建立不存在因果关系且不被先后顺序影响,故分布式网络内采用基于操作的无冲突复制数据类型cmrdt策略保证网络内节点索引最终一致,一个cmrdt对象可以抽象成为一个六元组(s,s0,q,t,u,p),s代表状态域,si∈s且s0代表初始状态,q、t、u都为方法,q(query)为查询状态方法,查询节点的索
引更新状态,t(prepare-update)为本地索引更新方法,步骤s16就为方法t的实现,u(effect-update)为远程更新方法,指将本节点更新的索引广播供下游节点更新索引目录,p为索引递送关系,在ipfs分布式网络内对所用sub了keyword_index主题的节点进行泛洪投递,具体来讲,对于一个索引更新,触发节点首先执行步骤e(prepare-update),这是一个无副作用的更新,随后根据p(泛洪投递),立即执行方法远程更新方法u(effect-update),将步骤s17得到的json文件pub到下游节点;
[0050]
s2索引更新;
[0051]
s21节点通过libp2p的pubsub订阅keyword_index主题便能得到上游节点根据递送关系p(泛洪投递)传递过来的操作,即上游节点执行了带副作用的方法u,操作分为两类,身份建立操作和索引更新操作;
[0052]
s22对于收到的消息首先进行验签操作,调用rsa非对称加密的verify方法,将数字签名与pk一起作为m校验,若输出比特值为0则丢弃,输出比特值1则对消息进行更新;
[0053]
s23若消息为身份建立操作,调用q-identity方法检查节点更新状态,扫描节点的索引节点列表,检查是否已存在对应的pk与nodeid,若未存在则将pk与nodeid加入索引节点列表,若已存在则丢弃,同时查看搁置索引列表,是否存在以该nodeid为源泛洪广播的更新索引,若存在则步骤与索引更新操作一致;
[0054]
s24若消息为索引更新操作,调用q-index方法检查节点更新状态,以时间倒序扫描索引更新操作中的文件cid查询本机状态,若已完成该操作则丢弃;
[0055]
s25通过字典树定位到该索引对应关键字的倒排索引文件,已该json索引文件中的find-date时间倒叙将该索引插入至相应位置,新建立的索引排在旧索引前面;
[0056]
s26插入之后将新的倒排索引进行内容哈希,并将新的倒排索引文件的cid更新到字典树对应的keyword节点;
[0057]
s3响应检索;
[0058]
s31选择分布式检索网络内任一节点访问,输入关键词,对节点发起检索请求;
[0059]
s32节点收到关键词之后,将关键词分解为单个字符,在字典树进行遍历,定位到与关键词对应的字典树节点并获得该节点对应倒排索引文件的内容哈希;
[0060]
s33通过ipfs节点获取具体倒排文件,对倒排索引中illegal-content为true的条目进行过滤,将所有合法条目返回至客户端,并将每个索引条目的cid链接至ipfs公网网关,方便进行下载。
[0061]
本发明中,所述步骤s16中两层索引设计,字典树对关键词倒排索引文件cid进行索引,为第一层索引;具体关键词倒排索引文件存储在ipfs内,通过字典树每个节点cid获取,为第二层索引。
[0062]
本发明中,所述步骤s18结合conflict-freereplicateddatatype解决分布式检索节点索引一致性问题,建立身份与递送索引操作皆被设计为commute,query为查询状态算法,查询索引更新状态与信任节点更新状态;prepare-update为无副作用更新算法,进行本地索引更新;effect-update为带副作用更新算法,将本地更新索引通过dht递送至下游ipfs节点。
[0063]
本发明:此分布式检索方案实现异步构建,所有节点相互协作保证整个系统正常运转,相较于现有系统,避免了分布式哈希表之间大量冗余的通信,从而减少了节点间传递
消息所耗费时间,同时每个节点都是索引全节点没有单点故障,避免了分布式网络内节点上下线带来的部分索引不能响应的问题,此方案还针对海量索引条目设计两层索引来对查询效率做了进一步优化,第一层索引将所有具体索引条目的json文件存入ipfs,第二层索引基于字典树将每个倒排索引文件cid存入字典树相应节点,一方面实现了快速定位查询,另一方面字典树因为只保存索引文件的cid所以在查询时加载入内存不会对内存有太大依赖,解决了单机资源屏障限制。
[0064]
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1