一种按时间排序的存储结构与快速查询的方法技术

技术编号:24331486 阅读:35 留言:0更新日期:2020-05-29 19:47
一种基于merkle tree时间排序的存储结构与快速查询的方法,根据输入数据进行merkle tree数据列表的建立,在merkel tree存储结构生成的区块链中快速查询数据的信息,按照发送数据的时间的Merkle tree生成。本发明专利技术可以让交易信息或者传输的数据按照时间序列存储到区块上面,保证数据具有时间次序,方便日后交易或者传输的数据的查找,通过使用时间戳的查询算法,缩短交易或者传输的数据的查询时间,提高了查询效率,可以把交易数据统一存储到区块链上,让交易不可能丢失和篡改。

A time ordered storage structure and fast query method

【技术实现步骤摘要】
一种按时间排序的存储结构与快速查询的方法
本专利技术属于计算机信息安全领域,涉及数据加密、存储及信息查询等内容和方法,使用区块链技术中merkletree存储结构建按照时间排序的数据管理列表,并在merkletree结构上进行快速数据查询,特别涉及一种基于merkletree时间排序的存储结构与快速查询的方法。
技术介绍
区块链是由多个独立节点参与的分布式数据库系统,也可以说是一种分布式记账机制。区块链技术有去中心化的特点,这可以让区块链在不拥有第三方信任机构的情况下进行点对点的信任构建的有价值的信息传播,这种传播方式有助于降低信息的交易成本,提高点对点的交互效率,因此区块链的应用场景非常之广。最早使用区块链技术的是中本聪,他在2008年提出了一种叫比特币的数字加密货币,这种货币和传统的货币不同,他不需要像中央银行一样的银行机构来发行,它的货币产生是靠“矿工们”不停地进行比特币的交易数据的挖掘而得到的奖励。这种机制可以有效地保证交易的安全的进行,并保护用户的个人隐私,一旦相关数据被记录在区块链的区块中后,信息就几乎不可能被更改。在区块链的应用中,比特币使用了最简单的二叉树Merkletree,它是上个世纪由RalphMerkle提出来的,用于生成数字证书目录的摘要(见文献:MerkleRC.Protocolsforpublickeycryptosystems//IEEESymposiumonSecurity&Privacy.DBLP,1980:122-134)。二叉树在比特币中用于保存交易的哈希列表。比特币通过建立这种哈希列表,把交易数据安全地记录到Merkletree树上,并且可以通过列表一层一层的去查找记录的交易。但是在数据查找交易的时候,往往需要一层一层往下找交易,而且在极端情况下需要查找所有树叶上的交易,才可以查找到自己需要查找的交易,这样会浪费大量的时间。
技术实现思路
为解决现有技术的不足,提供一种基于merkletree时间排序的存储结构与快速查询的方法,这种方法可以按“时间”来快速查找到自己想要的交易数据活信息数据,节约查询时间,提高交易效率。为实现上述目的,本专利技术采用以下技术方案:一种按时间排序的存储结构与快速查询的方法,包括以下步骤:步骤一,根据输入数据进行merkletree数据列表的建立步骤1.1,收到发送过来的数据信息,对数据信息中的隐私数据进行解密,解密后通过椭圆曲线算法ecdsa对隐私数据进行验证;步骤1.2,验证成功后,把验证者的签名写入数据验证者(Verifier)信息栏,再使用随机数生成算法把随机数写入到随机数Nonce;步骤1.3,对这一条完整的数据用不可逆的单向散列算法SHA256进行加密,得到这这条数据的哈希值,再把这条数据信息以[key(HashData),value]的形式存入levelDB数据库,再按照顺序存入到交易池中;步骤1.4,收到下一条信息数据,重复步骤1.1到步骤1.3,步骤1.5,打包开始后之后,根据发送数据的时间的Merkletree生成算法生成子节点哈希值信息,再把这条数据信息根据[key(HashData),value]的数据新式存入levelDB数据库中;步骤1.6,在没有结束之前一直重复第1.1步到第1.5步;在规定的打包时间结束后,使用了Merkletree生成算法得到了唯一的Merkletree的根的哈希值RootHash,把这个哈希值记录到当前准备打包的区块的Merkleroot这个属性的数据栏中,并完成区块链的区块数据输入和生成;versionnumber:区块链区块的版本号;timetamp:区块链区块生成的时间戳;previousblock:存储前一块区块的hash值;nonce:是一组随机数字,为了增加修改区块的难度;Merkleroot:存放这个区块的Merkle根的hash值;SendTransactionTime:在这个区块中交易的TransmitTime的最大和最小值和这个区块的交易数量;步骤2,在merkeltree存储结构生成的区块链中快速查询数据的信息步骤2.1,根据区块链上每一个区块上的发送交易时间区间[EarliestTime,LatestTime],这个区块的交易的TransmitTime的最小值为“EarliestTime”、交易的TransmitTime的最大值为“LatestTime”,确定查询的交易所在之区块;步骤2.2,选择一个区块,已知这个区块中有SumT条交易,需要查询的交易发送的时间,即这条交易的TransmitTime为QTime,计算出选择查询编号ChooseNo:ChooseNo=[(QTime-EarliestTime)/(LatestTime-EarliestTime)*SumT]步骤2.3,查询第ChooseNo条交易信息,如果查询的这条数据的信息是需要的这条信息,输出这条具体的信息数据,如果不是需要的信息:情况1:如果ChooseNo_Time<QTime<LatestTimeChooseNo_Time是第ChooseNo条交易信息的发送数据的时间,先计算SumTY=SumT-ChooseNo:ChooseNo=[(QTime-ChooseNo_Time)/(LatestTime-ChooseNo_Time)*SumTY]+ChooseNo再进入步骤3;情况2:如果EarliestTime<QTime<ChooseNo_Time先计SumTY=ChooseNo,ChooseNo_Time是第ChooseNo条交易信息的发送数据的时间:ChooseNo=[(QTime-EarliestTime)/(ChooseNo_Time-EarliestTime)*SumTY]再回到进入步骤3;步骤3,按照发送数据的时间的Merkletree生成算法;步骤3.1,从交易池中取出一条判断这一条需要进入Merkletree的数据的发送的时间是否迟于前一条已经进入Merkletree的数据的发送的时间,如果迟于之前发送的时间,进行后面的步骤;如果早于之前的时间,跳过这条信息,返回步骤1,从交易池中抽取交易并检验,直到满足条件为止;步骤3.2,对Merkletree的结构进行操作;情况1:如果是第一条数据,创建初始跟节点及一个叶子节点,并把交易写入这个节点中;记录最早一条交易的传入的时间信息;之后设置子节点左边的值Sonsleft的节点值即SonsLeft={Hash,PathValue},PathValue为叶子节点的路径,Hash为这个这个叶子节点的Hash值,更新跟节点PathValue等待下一条信息传入;情况2:如果数据编号number是偶数,创建一个叶子节点并把交易写本文档来自技高网
...

【技术保护点】
1.一种按时间排序的存储结构与快速查询的方法,其特征在于包括以下步骤:/n步骤一,根据输入数据进行merkle tree数据列表的建立/n步骤1.1,收到发送过来的数据信息,对数据信息中的隐私数据进行解密,解密后通过椭圆曲线算法ecdsa对隐私数据进行验证;/n步骤1.2,验证成功后,把验证者的签名写入数据验证者(Verifier)信息栏,再使用随机数生成算法把随机数写入到随机数Nonce;/n步骤1.3,对这一条完整的数据用不可逆的单向散列算法SHA256进行加密,得到这这条数据的哈希值,再把这条数据信息以[key(HashData),value]的形式存入levelDB数据库,再按照顺序存入到交易池中;/n步骤1.4,收到下一条信息数据,重复步骤1.1到步骤1.3,/n步骤1.5,打包开始后之后,根据发送数据的时间的Merkle tree生成算法生成子节点哈希值信息,再把这条数据信息根据[key(HashData),value]的数据新式存入levelDB数据库中;/n步骤1.6,在没有结束之前一直重复第1.1步到第1.5步;在规定的打包时间结束后,使用了Merkle tree生成算法得到了唯一的Merkle tree的根的哈希值RootHash,把这个哈希值记录到当前准备打包的区块的Merkle root这个属性的数据栏中,并完成区块链的区块数据输入和生成;/nversion number:区块链区块的版本号;/ntimetamp:区块链区块生成的时间戳;/nprevious block:存储前一块区块的hash值;/nnonce:是一组随机数字,为了增加修改区块的难度;/nMerkle root:存放这个区块的Merkle根的hash值;/nSendTransactionTime:在这个区块中交易的TransmitTime的最大和最小值和这个区块的交易数量;/n步骤2,在merkel tree存储结构生成的区块链中快速查询数据的信息/n步骤2.1,根据区块链上每一个区块上的发送交易时间区间[EarliestTime,LatestTime],这个区块的交易的TransmitTime的最小值为“EarliestTime”、交易的TransmitTime的最大值为“LatestTime”,确定查询的交易所在之区块;/n步骤2.2,选择一个区块,已知这个区块中有SumT条交易,需要查询的交易发送的时间,即这条交易的TransmitTime为QTime,计算出选择查询编号ChooseNo:/nChooseNo=[(QTime-EarliestTime)/(LatestTime-EarliestTime)*SumT]/n步骤2.3,查询第ChooseNo条交易信息,如果查询的这条数据的信息是需要的这条信息,输出这条具体的信息数据,如果不是需要的信息:/n情况1:/n如果/nChooseNo_Time<QTime<LatestTime/nChooseNo_Time是第ChooseNo条交易信息的发送数据的时间,先计算SumTY=SumT-ChooseNo:/nChooseNo=[(QTime-ChooseNo_Time)/(LatestTime-ChooseNo_Time)*SumTY]+ChooseNo再进入步骤3;/n情况2:/n如果/nEarliestTime<QTime<ChooseNo_Time/n先计SumTY=ChooseNo,ChooseNo_Time是第ChooseNo条交易信息的发送数据的时间:/nChooseNo=[(QTime-EarliestTime)/(ChooseNo_Time-EarliestTime)*SumTY]/n再回到进入步骤3;/n步骤3,按照发送数据的时间的Merkle tree生成算法;/n步骤3.1,从交易池中取出一条判断这一条需要进入Merkle tree的数据的发送的时间是否迟于前一条已经进入Merkle tree的数据的发送的时间,如果迟于之前发送的时间,进行后面的步骤;如果早于之前的时间,跳过这条信息,返回步骤1,从交易池中抽取交易并检验,直到满足条件为止;/n步骤3.2,对Merkle tree的结构进行操作;/n情况1:/n如果是第一条数据,创建初始跟节点及一个叶子节点,并把交易写入这个节点中;记录最早一条交易的传入的时间信息;/n之后设置子节点左边的值Sonsleft的节点值即SonsLeft={Hash,PathValue},PathValue为叶子节点的路径,Hash为这个这个叶子节点的Hash值,更新跟节点PathValue等待下一条信息传入;/n情况2:/n如果数据编号number是偶数,创建一个叶子节点并把交易写入这个节点中;/n设置子节...

【技术特征摘要】
1.一种按时间排序的存储结构与快速查询的方法,其特征在于包括以下步骤:
步骤一,根据输入数据进行merkletree数据列表的建立
步骤1.1,收到发送过来的数据信息,对数据信息中的隐私数据进行解密,解密后通过椭圆曲线算法ecdsa对隐私数据进行验证;
步骤1.2,验证成功后,把验证者的签名写入数据验证者(Verifier)信息栏,再使用随机数生成算法把随机数写入到随机数Nonce;
步骤1.3,对这一条完整的数据用不可逆的单向散列算法SHA256进行加密,得到这这条数据的哈希值,再把这条数据信息以[key(HashData),value]的形式存入levelDB数据库,再按照顺序存入到交易池中;
步骤1.4,收到下一条信息数据,重复步骤1.1到步骤1.3,
步骤1.5,打包开始后之后,根据发送数据的时间的Merkletree生成算法生成子节点哈希值信息,再把这条数据信息根据[key(HashData),value]的数据新式存入levelDB数据库中;
步骤1.6,在没有结束之前一直重复第1.1步到第1.5步;在规定的打包时间结束后,使用了Merkletree生成算法得到了唯一的Merkletree的根的哈希值RootHash,把这个哈希值记录到当前准备打包的区块的Merkleroot这个属性的数据栏中,并完成区块链的区块数据输入和生成;
versionnumber:区块链区块的版本号;
timetamp:区块链区块生成的时间戳;
previousblock:存储前一块区块的hash值;
nonce:是一组随机数字,为了增加修改区块的难度;
Merkleroot:存放这个区块的Merkle根的hash值;
SendTransactionTime:在这个区块中交易的TransmitTime的最大和最小值和这个区块的交易数量;
步骤2,在merkeltree存储结构生成的区块链中快速查询数据的信息
步骤2.1,根据区块链上每一个区块上的发送交易时间区间[EarliestTime,LatestTime],这个区块的交易的TransmitTime的最小值为“EarliestTime”、交易的TransmitTime的最大值为“LatestTime”,确定查询的交易所在之区块;
步骤2.2,选择一个区块,已知这个区块中有SumT条交易,需要查询的交易发送的时间,即这条交易的TransmitTime为QTime,计算出选择查询编号ChooseNo:
ChooseNo=[(QTime-EarliestTime)/(LatestTime-EarliestTime)*SumT]
步骤2.3,查询第ChooseNo条交易信息,如果查询的这条数据的信息是需要的这条信息,输出这条具体的信息数据,如果不是需要的信息:
情况1:
如果
ChooseNo_Time<QTime<LatestTime
ChooseNo_Time是第ChooseNo条交易信息的发送数据的时间,先计算SumTY=SumT-ChooseNo:
ChooseNo=[(QTime-ChooseNo_Time)/(LatestT...

【专利技术属性】
技术研发人员:程宏兵赵鹏刘加玲杨斌飞方伟
申请(专利权)人:浙江工业大学
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1