一种基于区块链和分布式存储的大文本存储、索引及检索方法与流程

文档序号:17989811发布日期:2019-06-22 00:41阅读:176来源:国知局
本发明属于智能合约与区块链数据存储
技术领域
:,具体涉及一种基于区块链和分布式存储的大文本存储、索引及检索方法。
背景技术
::一般说来,区块链网络由数据层、网络层、共识层、激励层、合约层和应用层组成。其中,数据层封装了底层数据区块以及相关的数据加密和时间戳等技术;网络层则包括分布式组网机制、数据传播机制和数据验证机制等;共识层主要封装网络节点的各类共识算法;激励层将经济因素集成到区块链技术体系中来,主要包括经济激励的发行机制和分配机制等;合约层主要封装各类脚本、算法和智能合约,是区块链可编程特性的基础;应用层则封装了区块链的各种应用场景和案例。基于时间戳的链式区块结构、分布式节点的共识机制、基于共识算力的经济激励和灵活可编程的智能合约是区块链技术最具代表性的创新点。在此基础上,可以将交易数据存储在不可篡改的区块中,并将区块按照时间顺序串连形成区块链,通过非对称加密签名保证交易的安全,通过常见的pow或pos等共识算法,使整个网络达成一致,通过p2p技术实现消息的传输与数据的同步。该技术的优势是具有防篡改、透明及去中心化等特性,可以在一个缺乏信任的网络中实现安全交易和数字资产保护。比特币发布之后,其和法定货币相比,没有一个集中的发行方,而是由网络节点的计算生成,谁都有可能参与制造比特币,而且可以全世界流通,其背后的区块链技术就迅速得到了人们的认同,并得到了快速的发展,之后由第二代区块链技术以太坊发扬光大。以太坊为区块链引入了图灵完备的编程框架“智能合约”,以太坊是一个平台和一种编程语言,使开发人员能够建立和发布下一代分布式应用,以太坊可以用来编程、分散、担保和交易任何事物如投票、域名、金融交易所、众筹、公司管理、合同和大部分的协议、知识产权,还有得益于硬件集成的智能资产,使人们可以基于它在区块链上运行分布式应用dapp,使区块链的行业落地成为可能,进一步激发了区块链技术的繁荣。传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。并且,分布式存储网络是一种基于p2p技术的分布式文件系统,可以将文件分片之后,分发到p2p网络的节点上进行分布式存储,相对于传统的中心化存储系统,具有安全性高,存取速度快,成本低等优点。在区块链上开发dapp的时候,出于业务需要,我们需要在智能合约中存储各种形式的数据,但是其存储成本是很高的,需要大量的手续费,只适合存储一些关键的小量数据,非常不适合大规模的数据存储,这无疑不利于区块链的大规模应用。例如对于新闻媒体、电子合同等需要存储大量大文本的应用来说,昂贵的存储成本将使其难以上链。另外,对于链上大文本数据来说,大文本(或大二进制)数据的存储操作具有一定的特殊性,主要体现在以下三个方面:一是大文本对象不能用一般的字符串函数进行操作,只能用powerbuilder提供的blob编辑函数操作;二是由于所要操纵的文本对象过大,需要编制输出输入函数(或过程)进行预先处理;三是存储blob记录对事务对象有特定的要求,数据的检索也是一个难题,很难根据用户意图获取到准确的数据,而数据的获取是应用中一个最基本的需求。技术实现要素:鉴于上述,本发明提供了一种基于区块链和分布式存储的大文本存储、索引及检索方法,其将区块链智能合约技术与分布式存储网络技术结合起来,能够实现在区块链上低成本地进行大文本数据存储,并且快速精准地进行内容检索,使需要大文本数据的dapp在技术上成为了可能,在成本上降低了门槛。一种基于区块链和分布式存储的大文本存储、索引及检索方法,包括如下步骤:(1)将大文本数据存储到分布式存储网络中,分布式存储网络为大文本数据分配唯一标识doc_id,并且通过doc_id对大文本的数据进行寻址;(2)对大文本数据进行分词处理,生成关键词列表,并基于所有关键词构建关键词倒排索引表keywords_index_table,使每个关键词哈希keyword_hash指向大文本数据的唯一标识doc_id;(3)将索引表keywords_index_table存储到分布式存储网络中,并将其唯一标识keywords_index_table_id和名称keywords_index_table_name存储到区块链网络中具体智能合约的数据结构中;(4)在智能合约中建立一种特殊的类型bigtext,通过该类型声明的变量将会被映射为分布式存储网络中的相应索引表keywords_index_table,其变量名称与对应索引表keywords_index_table绑定,且变量名称与变量相关的大文本数据一同被存入分布式存储网络中,并得到一个唯一标识进行寻址,同时大文本数据也会被构建索引到索引表keywords_index_table中。进一步地,所述类型bigtext的变量名称根据索引表keywords_index_table所满足的功能进行制定,且与keywords_index_table_name一致。比如,articals可以表示一个存储“文章”大文本数据的索引表,contracts可以表示一个存储“合同”大文本数的索引表...等等。进一步地,所述智能合约开放有写入接口和检索接口,写入接口用于接受如变量名称及大文本数据的参数,将对应大文本数据存入分布式存储系统并为其构建索引表keywords_index_table;检索接口用于接受参数如变量名称及关键字的参数,并返回符合条件的文档列表。进一步地,所述步骤(2)通过以下两个程序实现:分词程序,用于对大文本数据进行分词处理,生成关键词列表,并将关键词列表传递给索引表构建程序;索引表构建程序,用于对关键词列表进行哈希运算,并基于关键词哈希keyword_hash构建关键词倒排索引表keywords_index_table,使每个关键词哈希keyword_hash指向大文本数据的唯一标识doc_id。关键词可能来自不同的大文本数据分词结果,所以在索引表keywords_index_table中,关键字哈希keyword_hash可能指向多个doc_id,即一个关于doc_id的列表。进一步地,所述索引表构建程序每次更新索引表keywords_index_table时,都需要从分布式存储网络中读取对应的索引表keywords_index_table,更新完后再重新将其写回分布式存储网络。进一步地,所述智能合约写入接口的具体功能实现过程如下:1.1根据关于变量名称的参数,通过合约虚拟机的程序自动查找到该变量名称所关联的索引表唯一标识keywords_index_table_id,并通过该唯一标识,从分布式文件系统中读取对应的索引表数据;1.2自动调用分词程序对大文本数据进行分词,生成关键词列表,并将关键词列表传递给索引表构建程序;1.3自动调用索引表构建程序对大文本数据的关键词列表进行哈希运算,并基于关键词哈希keyword_hash构建关键词倒排索引表keywords_index_table,使关键词哈希keyword_hash指向大文本数据的唯一标识doc_id。进一步地,所述智能合约检索接口的具体功能实现过程如下:2.1根据关于变量名称的参数,通过合约虚拟机的程序自动查找到该变量名称所关联的索引表唯一标识keywords_index_table_id,并通过该唯一标识,从分布式文件系统中读取对应的索引表数据;2.2根据关于关键字的参数,计算关键字哈希keyword_hash,并通过关键字哈希keyword_hash搜索索引表keywords_index_table,获取对应的doc_id列表;然后,根据doc_id列表从分布式存储网络中读取对应的大文本数据,并返回给用户,进而对返回结果中每个大文本数据进行针对关键字的匹配度计算,所得的匹配度分数用于对返回结果进行排序。进一步地,所述分布式存储网络包括但不限于以下几种:ipfs、sia、storj、swarm。进一步地,所述步骤(4)中当类型bigtext的变量名称与对应索引表keywords_index_table绑定后,在区块链智能合约中维护其变量名称与索引表唯一标识keywords_index_table_id的对应关系,即keywords_index_table_name–>keywords_index_table_id。进一步地,所述对应关系是由区块链系统中的合约虚拟机来维护,并自动地将对应关系存储在区块链的数据库中,智能合约只需简单声明类型bigtext的变量即可,参数名称即为索引表名称keywords_index_table_name本身,以简化合约开发。本发明将大文本数据存储到分布式存储网络中,分布式存储网络为该大文本数据分配唯一标识,并且通过该唯一标识对该大文本的数据进行寻址,对大文本数据进行分词,基于分词结果生成关键字倒排索引表,使关键字哈希指向关键字所在的大文本存储的唯一标识,基于关键字倒排索引表,根据相应的关键字检索到对应的大文本列表。此外本发明允许开发者声明一种特殊类型bigtext的变量,并使该变量映射为分布式存储网络中的一个关键字倒排索引表,使与该变量相关的大文本数据存储到分布式网络中,并构建索引到索引表中。同时,本发明还允许通过关键字,对该变量所对应的索引表进行检索,并得到相应的大文本数据。由此可见,本发明将区块链智能合约技术与分布式存储网络技术结合起来,实现在区块链上低成本地进行大文本数据存储,并且快速精准地进行内容检索,使需要大文本数据的dapp在技术上成为了可能,在成本上降低了门槛。附图说明图1为本发明大文本在分布式存储网络中的存储流程示意图。图2为本发明大文本在分布式存储网络中分词和索引的过程示意图。图3为本发明区块链合约虚拟机架构的框架示意图。具体实施方式为了更为具体地描述本发明,下面结合附图及具体实施方式对本发明的技术方案进行详细说明。本发明基于区块链和分布式存储网络的大文本存储、索引和检索方法,包括如下步骤:(1)图1展示了大文本数据存储到分布式存储网络的流程,第1步:将大文本数据text1进行分片并,其中分片分别为text1-slice1、text1-slice2、text1-slice3、text1-slice4,具体的分片数量,和数据总大小与每个分片的大小有关;第2步:将分片存储到分布式存储网络中;第3步:为被存储的大数据分配唯一标识text1-doc_id,分布式存储网络将会通过text1-doc_id对大文本的数据text1进行寻址;具体的唯一标识生成方式不做限制。(2)图2展示了大文本在分布式存储网络中分词和索引的过程,第1步:对大文本进行分词处理,生成关键词列表;第2步:基于所有关键词构建关键词倒排索引表keywords_index_table(以下简称索引表),使每个关键词的哈希值keyword_hash指向大文本的唯一标识doc_id;第3步:将索引表存储在分布式网络中;第4步:分布式存储网络为索引表分配唯一标识keyword_index_table_id。(3)将索引表存储在分布式存储网络中后,并将其唯一标识keywords_index_table_id和名称keywords_index_table_name存储在区块链网络中具体智能合约的数据结构中。(4)在智能合约建立一种特殊的类型bigtext,通过该类型声明的变量将会被映射为分布式存储网络中的相应索引表keywords_index_table,其变量名与对应索引表绑定,与变量相关的大文本数据,都会被存入分布式存储网络中,并得到一个唯一标识进行寻址;同时,大文本数据也会被构建索引到索引表中。变量名称可根据索引表所满足的功能进行制定;比如,articals可以表示一个存储文章大文本的索引表,contracts可以表示一个存储合同大文本的索引表,等等,变量的名称与上述keywords_index_table_name一致。智能合约开放写入接口和检索接口,其中写入接口接受关于变量名称与大文本数据的参数,将对应大文本存入分布式存储系统,并为其构建索引表;检索接口接受关于变量名称与关键字的参数,并返回符合条件的文档列表。本实施方式中还需要一个分词程序和一个索引表构建程序,分词程序可以对大文本进行分词,生成关键词列表,并将关键词列表传递给索引表构建程序。索引表构建程序可以对大文本的关键词列表进行哈希运算,并基于关键词哈希构建关键词倒排索引表,使关键词哈希指向大文本的唯一标识doc_id;关键词可能来自不同的大文本分词结果,所以在索引表中关键字的哈希值是可能指向多个doc_id,即一个doc_id列表。索引表构建程序每次更新索引表时,都需要从分布式存储网络中读取对应的索引表,更新完后再重新写回分布式存储网络。图3展示了区块链的合约虚拟机架构,合约的写入接口可实现以下功能:(1)根据参数变量名称,通过合约虚拟机的程序自动查找到该变量名称所关联的索引表唯一标识keywords_index_table_id,并通过该唯一标识,从分布式文件系统中读取对应的索引表数据。(2)自动调用分词程序对大文本进行分词,生成关键词列表,并将关键词列表传递给索引表构建程序。(3)自动调用索引表构建程序对大文本的关键词列表进行哈希运算,并基于关键词哈希构建关键词倒排索引表,使关键词哈希指向大文本的唯一标识doc_id。合约的检索接口可实现如下功能:(1)根据关于变量名称法人参数,通过合约虚拟机的程序自动查找到变量名称所关联的索引表唯一标识keywords_index_table_id,并通过该唯一标识,从分布式文件系统中读取对应的索引表。(2)根据关于关键字法人参数,计算关键字的哈希值keyword_hash,并通过keyword_hash搜索索引表,获取应的doc_id列表;然后,根据doc_id列表从分布式存储网络中读取对应的大文本数据列表,并返回给用户,并且系统对返回结果中每个大文本数据进行针对上述关键字的匹配度计算,所得分数用于对返回结果进行排序。分布式存储网络包括但不限于以下几种:ipfs、sia、storj、swarm。本实施方式中需要在区块链合约中维护bigtext类型变量名与索引表的唯一标识的对应关系:keywords_index_table_name–>keywords_index_table_id;对应关系是由区块链系统的合约虚拟机层来维护,并自动地将对应关系存储在区块链的数据库中;智能合约层只简单声明bigtext变量即可,参数名称就是索引表名称keywords_index_table_name本身,以简化合约开发。上述对实施例的描述是为便于本
技术领域
:的普通技术人员能理解和应用本发明。熟悉本领域技术的人员显然可以容易地对上述实施例做出各种修改,并把在此说明的一般原理应用到其他实施例中而不必经过创造性的劳动。因此,本发明不限于上述实施例,本领域技术人员根据本发明的揭示,对于本发明做出的改进和修改都应该在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1