CN116955355A - 一种区块数据处理方法、装置及电子设备 - Google Patents

一种区块数据处理方法、装置及电子设备 Download PDF

Info

Publication number
CN116955355A
CN116955355A CN202310872829.XA CN202310872829A CN116955355A CN 116955355 A CN116955355 A CN 116955355A CN 202310872829 A CN202310872829 A CN 202310872829A CN 116955355 A CN116955355 A CN 116955355A
Authority
CN
China
Prior art keywords
file
block
data
index
files
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.)
Pending
Application number
CN202310872829.XA
Other languages
English (en)
Inventor
周厚发
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202310872829.XA priority Critical patent/CN116955355A/zh
Publication of CN116955355A publication Critical patent/CN116955355A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (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

一种区块数据处理方法、装置及电子设备
技术领域
本发明涉及计算机技术领域,尤其是一种区块数据处理方法、装置及电子设备。
背景技术
随着区块链技术的不断普及,单个区块链的规模也在不断扩大,在区块链中产生新数据的速度很快。其中,区块数据是由各区块链中节点上传的原始数据,在区块链的应用过程中,区块数据只增不减,而且,一旦完成对区块数据的写入,则要求区块数据不能够被修改,来保证区块链各节点之间的数据一致性,因此带来了较大的数据存储压力和数据管理压力。
相关技术一般将所有区块数据混合存储在同一个文件中,导致每次写入或删除区块数据都要对这个文件内的区块进行操作,处理对象的维度停留在区块数据阶段,导致数据存储操作不高效,且容易因为对某个区块数据的损坏而造成整个存储文件的损坏,对数据安全带来威胁。
发明内容
有鉴于此,本发明实施例提供一种区块数据处理方法、装置及电子设备,提高数据存储操作的效率,并且提高区块链中数据存储的安全性。
一方面,本发明实施例提供了一种区块数据处理方法,包括以下步骤:
对存储区块数据的第一原始文件中的各个区块数据加入第一校验数据段和区块长度字段,得到区块文件;
对存储区块索引信息的第二原始文件中的各个区块索引信息加入第二校验数据段和索引长度字段,得到索引文件;
响应于对区块文件的文件处理请求,根据区块文件中的第一校验数据段、区块长度字段和区块数据,对各个区块文件进行对应处理,得到文件处理结果;其中,文件处理请求包括文件读取请求、文件写入请求、文件合并请求和文件分割请求;
根据文件处理结果,结合索引文件中的第二校验数据段、索引长度字段和索引数据,对各个索引文件进行更新。
另一方面,本发明实施例还提供了一种区块数据处理装置,包括:
第一模块,用于对存储区块数据的第一原始文件中的各个区块数据加入第一校验数据段和区块长度字段,得到区块文件;
第二模块,用于对存储区块索引信息的第二原始文件中的各个区块索引信息加入第二校验数据段和索引长度字段,得到索引文件;
第三模块,用于响应于对区块文件的文件处理请求,根据区块文件中的第一校验数据段、区块长度字段和区块数据,对各个区块文件进行对应处理,得到文件处理结果;其中,文件处理请求包括文件读取请求、文件写入请求、文件合并请求和文件分割请求;
第四模块,用于根据文件处理结果,结合索引文件中的第二校验数据段、索引长度字段和索引数据,对各个索引文件进行更新。
可选地,第一校验数据段用于校验区块文件的完整性;区块长度字段用于表征区块文件中区块数据的字段长度;第二校验数据段用于校验索引文件的完整性;索引长度字段用于表征索引文件中索引信息的字段长度;第一模块,具体用于:
获取区块数据的存储大小;
根据存储大小计算区块数据的区块长度,并向第一原始文件中区块数据加入区块长度的字段。
可选地,当文件处理请求为文件读取请求,第三模块,具体用于:
响应于对区块文件的文件读取请求,获取区块文件的文件头,从文件头中依次读取第一校验数据段和区块长度字段;
根据区块长度字段,从区块文件中读取对应长度的数据得到区块数据;
计算区块数据的验证信息,将验证信息与第一校验数据段进行比对,确定区块数据的完整性,直至完成对区块文件中所有区块数据的读取。
可选地,装置还包括:
第五模块,用于当读取区块文件的区块数据为出错数据时,终止对区块文件的读取,并将出错数据之后的所有内容丢弃。
可选地,当文件处理请求为文件写入请求,第三模块,具体用于:
响应于对区块文件的文件写入请求,向区块文件中依次写入第一校验数据段、区块长度字段和区块数据;
将各个区块数据对应的索引信息写入索引文件,并在写完所有区块数据后,在索引文件中加入结尾标识,结尾标识用于表征区块文件中写入的最后一个区块数据。
可选地,装置还包括:
第六模块,用于当向区块文件写入区块数据出现写入错误时,终止对区块文件的写入处理,并在重启写入处理时读取结尾标识,从最后一个区块数据开始重新写入区块数据。
可选地,当文件处理请求为文件合并请求,第三模块,具体用于:
响应于对区块文件的文件合并请求,获取若干个时序相邻的区块文件;
以若干个相邻的区块文件中的第一个区块文件作为合并文件,按序将其他各个区块文件合并至合并文件;其中,合并文件中每个区块数据包括第一校验数据段和区块长度字段;
根据合并文件中新的区块数据的信息,对第一个区块文件的索引文件进行更新,得到合并文件对应的索引文件;
将合并至合并文件的各个区块文件的文件名存储至目标文件;
根据目标文件的文件名,从临时文件夹中删除对应文件名的各个区块文件和索引文件;其中,临时文件夹用于存储处理过程中的文件。
可选地,第三模块,进一步用于:
根据各个区块文件的文件名,解析各个区块文件的区块高度,并根据各个区块文件的区块高度确定各个区块文件为时序相邻的区块文件;
将时序相邻的各个区块文件中的第一个区块文件作为合并文件,按序将其他各个区块文件合并至合并文件。
可选地,当文件处理请求为文件合并请求,第三模块,具体还用于:
当对区块文件进行文件合并时出现合并错误,查看临时文件夹中存在的文件类型:
当临时文件夹中同时存在合并文件、索引文件和目标文件时,对合并文件、索引文件和目标文件进行修复后完成对区块文件的文件合并;
当临时文件夹中只存在合并文件时,删除合并文件,完成对区块文件的文件合并;
当临时文件夹中不存在合并文件,且存在索引文件和目标文件时,将索引文件中的数据写入原始文件夹,并根据目标文件的文件名,从临时文件夹中删除对应文件名的各个区块文件和索引文件,完成对区块文件的文件合并;
当临时文件夹中只存在目标文件时,根据目标文件的文件名,从临时文件夹中删除对应文件名的各个区块文件和索引文件,完成对区块文件的文件合并。
可选地,当文件处理请求为文件分割请求,第三模块,包括:
第六单元,用于响应于对区块文件的文件分割请求,确定区块文件的分割高度和分割文件数;
第七单元,用于根据分割高度和分割文件数,将区块文件分割成对应个数的子文件;其中,子文件中每个区块数据包括第一校验数据段和区块长度字段;
第八单元,用于每分割得到一个子文件时,配置子文件对应的索引文件。
可选地,第六单元,具体用于以下至少之一:
识别区块文件的整体区块高度,并根据文件分割请求中解析的分割文件数,从整体区块高度中确定各个分割高度;
或,
计算区块文件的数据大小,根据文件分割请求中解析的待分割文件大小来确定分割文件数以及区块文件的分割高度。
可选地,装置还包括:
第七模块,用于响应于对区块文件的文件分割请求,记录区块文件的文件处理状态为文件分割状态;
第八模块,用于当完成对区块文件的文件分割处理时,将文件处理状态变更为文件写入状态。
可选地,当文件处理请求为文件分割请求,第三模块,具体还用于:
当对区块文件进行文件分割时出现分割错误,停止文件分割的操作,删除已生成的子文件以及子文件对应的索引文件;
当对区块文件进行文件分割时出现区块链网络故障,根据区块文件的文件处理状态进行数据修复,直至完成区块文件的文件分割处理。
可选地,当区块文件的文件处理状态为文件分割状态时,第三模块,进一步用于:
当区块文件分割得到的各个子文件均与对应的索引文件成对存在时,根据索引文件对子文件进行修复后,重启对区块文件的文件分割流程;
当区块文件分割得到成对存在的子文件和索引文件,且得到单独存在的子文件时,删除单独存在的子文件,并重启对区块文件的文件分割流程;
当区块文件分割只得到一个子文件时,直接重启对区块文件的文件分割流程。
可选地,当区块文件的文件处理状态为文件写入状态时,第三模块,进一步用于:
当区块文件分割得到的各个子文件均与对应的索引文件成对存在时,将子文件转入区块管理数据库,并重启对区块文件的文件分割流程;其中,区块管理数据库用于存储处理完成的文件;
当区块文件分割得到成对存在的子文件和索引文件,且得到单独存在的索引文件时,将索引文件写入索引数据库,并重启对区块文件的文件分割流程;其中,索引数据库用于存储区块数据的索引信息。
另一方面,本发明实施例还提供了一种电子设备,包括处理器以及存储器;
存储器用于存储程序;
处理器执行程序实现前面的区块数据处理处理方法。
另一方面,本发明实施例还提供了一种计算机可读存储介质,存储介质存储有程序,程序被处理器执行实现如前面的区块数据处理处理方法。
另一方面,本发明实施例还提供了一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时实现前面的区块数据处理方法。
本发明的实施例首先对存储区块数据的第一原始文件中的各个区块数据加入第一校验数据段和区块长度字段,得到区块文件,接着,对存储区块索引信息的第二原始文件中的各个区块索引信息加入第二校验数据段和索引长度字段,得到索引文件;本发明针对现有的区块数据存储文件进行结构改造,增加相应的校验字段和长度字段,使得后续根据请求进行文件处理的时候,能够直接以文件的维度对各个文件进行相应处理,不需要以区块数据的维度进行处理;然后,基于结构优化后的区块文件和索引文件,本发明响应于对区块文件的文件处理请求,根据区块文件中的第一校验数据段、区块长度字段和区块数据,对各个区块文件进行对应处理,得到文件处理结果;并根据文件处理结果,结合索引文件中的第二校验数据段、索引长度字段和索引数据,对各个索引文件进行更新,本发明针对的处理对象在于文件维度,不对文件内存储的多个区块数据拆分出来单独处理,可以提高区块数据的处理效率,同时,因为提高了数据处理对象的维度,本发明还能降低数据处理过程的安全性风险,不会因为单个区块数据的处理导致整个区块文件的失效。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种区块链节点系统的结构示意图;
图2为本发明实施例提供的一种区块数据处理方法的步骤流程示意图;
图3为本发明实施例提供的区块文件存储数据的目录结构示意图;
图4为本发明实施例提供的第一原始文件的组成结构示意图;
图5为本发明实施例提供的区块文件的组成结构示意图;
图6为本发明实施例提供的索引文件的组成结构示意图;
图7为本发明实施例提供的xxx.fdb文件合并的一种实施例的示意图;
图8为本发明实施例提供的多个xxx.fdb文件合并到merge文件夹的一种实施例的示意图;
图9为本发明实施例提供的区块文件合并错误的一种实施例的流程示意图;
图10为本发明实施例提供的xxx.fdb合并错误的处理流程示意图;
图11为本发明实施例提供的xxx.fdb文件分割的一种实施例的示意图;
图12为本发明实施例提供的xxx.fdb文件分割到split文件夹的一种实施例的示意图;
图13为本发明实施例提供的区块文件分割错误的一种实施例的流程示意图;
图14为本发明实施例提供的xxx.fdb分割过程中出现错误的处理流程示意图;
图15为本发明实施例提供的一种区块数据处理装置的模块化示意图;
图16为本发明实施例提供的一种电子设备的结构示意图;
图17为本发明实施例提供的实现本申请实施例的电子设备的计算机系统结构框示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
应了解,在本发明实施例的描述中,多个(或多项)的含义是两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。如果有描述到“第一”、“第二”等只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
对本发明实施例进行进一步详细说明之前,对本发明实施例中可能涉及的名词和术语进行说明,本发明实施例中涉及的名词和术语适用于如下的解释:
区块链:信息技术领域的一种分布式账本技术,一般由共识、交易区块和状态数据存储、密码学身份安全等内容构成,由于账本是分布式存储的,而且区块是经过共识的,所以具有不可篡改、可追溯、共同维护等特征。区块链即为若干区块组成的链条。每一个区块中保存了一定的信息,它们按照各自产生的时间顺序连接成链条。这个链条被保存在所有的服务器中,只要整个系统中有一台服务器可以工作,整条区块链就是安全的。这些服务器在区块链系统中被称为节点,它们为整个区块链系统提供存储空间和算力支持。如果要修改区块链中的信息,必须征得半数以上节点的同意并修改所有节点中的信息,而这些节点通常掌握在不同的主体手中,因此篡改区块链中的信息是一件极其困难的事。相比于传统的网络,区块链具有两大核心特点:一是数据难以篡改、二是去中心化。基于这两个特点,区块链所记录的信息更加真实可靠,可以帮助解决人们互不信任的问题。
智能合约:一种运行在区块链上的程序。和普通程序不同的是,智能合约要保证在区块链网络的每一个节点中运行的结果完全相同,这样才能使任何一个节点都可以验证区块中智能合约执行的结果是否正确。
证书:数字证书(或简称证书)是在国际互联网(Internet)上唯一地标识人员和资源的电子文件。证书使两个实体之间能够进行安全、保密的通信。证书有很多种类型,例如个人证书(由个人使用)和服务器证书(用于通过安全套接字层[SSL]技术在服务器和客户机之间建立安全会话)。
签名验签:数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。验证签名是接收方需要确认自己接收到的密文文件是否真的是发送方发送过来的,需要确认的是中间有没有被篡改(不同于解密),验签最终是根据报文摘要来进行对比。
交易池:交易池是区块链暂存区块交易的池子,每一笔待出块的交易都会先到达交易池进行暂存,并通过一定的优先级顺序进行排序。在生成新区块时从交易池中按照顺序获取交易,之后区块链对交易进行执行并验证,最终确定所有节点验证通过之后。将区块中的交易从交易池中删除。
交易:提交数据到区块链中的方式。
区块:大部分区块链实现中数据存储到链上的单位,区块的编号,即为区块高度。
ChainMaker:长安链,是一个技术体系具备自主可控、灵活装配、软硬一体、开源开放的突出特点,面向大规模节点组网、高交易处理性能、强数据安全隐私等下一代区块链技术需求,融合区块链专用加速芯片硬件和可装配底层软件平台,为构建高性能、高可信、高安全的数字基础设施提供新的解决方案。
上链:数据存储到区块链的数据库中,即为上链。
节点:区块链中的服务,一个区块链一般由多个节点组成,每个节点即启动一个区块链软件服务。
KVDB:本发明实施例对非关系型数据库的称呼,常见KVDB如:leveldb,badgerdb等。其中,leveldb能够支持billion级别的数据量,leveldb是单进程的服务,性能非常之高,在一台4核Q6600的CPU机器上,每秒钟写数据超过40w,而随机读的性能每秒钟超过10w。
CRC:Cyclic Redundancy Check,即循环冗余校核,是一种根据网络数据包或电脑文件等数据产生简短固定位数校核码的快速算法,主要用来检测或校核数据传输或者保存后可能出现的错误。CRC利用除法及余数的原理,实现错误侦测的功能,具有原理清晰、实现简单等优点,是一种根据网络数据包或电脑文件等数据产生简短固定位数校核码。
区块文件存储数据:一种ChainMaker中正在使用的区块管理数据库,适合存储和管理一次写入,后续不再更改的区块链中的区块数据,简称BFDB(block file database)。在BFDB中,通常构建有多个数据库,每个数据库分别存储对应的数据(例如区块交易数据、区块索引数据、区块状态数据、区块历史数据等),在不同数据库中存储的各个文件相互独立且不再更改。
参见图1,图1是本发明实施例提供的一种区块链节点系统的结构示意图。区块链是一种分布式数据存储、点对点传输、共识机制以及加密算法等计算机技术的新型应用模式,主要用于对数据按时间顺序进行整理,并加密成账本,使其不可被篡改和伪造,同时可进行数据的验证、存储和更新。区块链本质上是一个去中心化的数据库,该数据库中的每个节点均存储一条相同的区块链,区块链网络中包括共识节点,共识节点负责区块链全网的共识。
可以理解的是,区块(Block)是在区块链网络上承载交易数据(即交易业务)的数据包,是一种被标记上时间戳和之前一个区块的哈希值的数据结构,区块经过网络的共识机制验证并确定区块中的交易。
可以理解的是,区块链系统中可以包括有智能合约,该智能合约在区块链系统中可以理解为是一种区块链各节点(包括共识节点)可以理解并执行的代码,可以执行任意逻辑并得到结果。应当理解,区块链中可以包括一个或多个智能合约,这些智能合约可以标识号(Identity document,ID)或名称来进行区分,而交易业务请求中可以携带智能合约的标识号或名称,以此指定区块链需要运行的智能合约。
如图1所示的区块链节点系统100可以对应于区块链网络,该区块链网络可以包括但不限于联盟链所对应的区块链网络。区块链节点系统100是指用于进行区块链节点与区块链节点之间数据共享的系统,该区块链节点系统中可以包括多个节点,多个节点具体可以包括节点10a、节点10b、节点10c、…、节点10n,这里的节点10a、节点10b、节点10c、…、节点10n可以统称为区块链节点。
每个节点在进行正常工作时可以接收到输入信息,并基于接收到的输入信息维护该区块链节点系统内的共享数据。为了保证区块链节点系统内的信息互通,区块链节点系统中的每个节点之间可以存在信息连接,节点之间可以通过上述信息连接进行信息传输。例如,当区块链节点系统中的任意节点接收到输入信息时,区块链节点系统中的其它节点便根据共识算法获取该输入信息,将该输入信息作为共享数据中的数据进行存储,使得区块链节点系统中全部节点上存储的数据均一致。
可以理解的是,上述的信息连接不限定连接方式,可以通过有线通信方式进行直接或间接地连接,也可以通过无线通信方式进行直接或间接地连接,还可以通过其它连接方式,本发明在此不做限制。
可以理解的是,区块链网络可以基于节点标识实现节点之间的信息连接,对于区块链节点系统中的每个节点,均具有与其对应的节点标识,而且区块链节点系统中的每个节点均可以存储有区块链节点系统中其它节点的节点标识,以便后续根据其它节点的节点标识,将生成的区块广播至区块链节点系统中的其它节点。每个节点中可维护一个如下表所示的节点标识列表,将节点名称和节点标识对应存储至该节点标识列表中。
表1
节点名称 节点标识
节点1 117.X1.Y1.Z1
节点2 117.X2.Y2.Z2
节点N 119.Xn.Yn.Zn
其中,节点标识可为IP(Internet Protocol,网络之间互联的协议)地址以及其它任一种能够用于标识区块链网络中节点的信息,表1中仅以IP地址为例进行说明。例如,节点1(例如,节点1可以为图1所示的节点10a)可以通过节点标识117.116.189.145向节点2(例如,节点2可以为图1所示的节点10b)发送信息(例如,区块),且节点2可以通过节点标识117.114.151.174确定该信息是由节点1所发送的。
可以理解的是,本发明实施例提供的区块数据处理方法,是能够应用于任意一种具备数据处理计算能力计算机设备,而这一计算机设备可以是各类终端或是服务器。当本发明实施例中的计算机设备是服务器时,该服务器是独立的物理服务器,或者,是多个物理服务器构成的服务器集群或者分布式系统,或者,是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content DeliveryNetwork,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。可选地,该终端是智能手机、平板电脑、笔记本电脑以及台式计算机等,但也并不局限于此。
需要进一步补充说明的是,本发明实施例中所涉及终端包括但不限于智能手机、电脑、智能语音交互设备、智能家电、车载终端、飞行器等。本发明实施例可应用于各种场景,包括但不限于云技术、人工智能、智慧交通、辅助驾驶等。
应当理解,在区块链中,在将一个区块(即提议区块、待上链区块)进行上链之前,该区块必须经过区块链网络中的共识节点进行共识,在共识通过后才能将该区块添加到区块链上。可以理解的是,当区块链被用于政府或者商业机构的一些场景中时,并非区块链中的所有参与节点(即上述区块链节点系统100中的区块链节点)都有足够的资源和必要性成为区块链的共识节点。例如,在图1所示的区块链节点系统100中,可以将节点10a、节点10b、节点10c作为该区块链节点系统100中的共识节点,其中,节点10a可以作为打包生成区块的打包节点,节点10b和节点10c可以作为参与共识的共识节点。
可以理解的是,区块链所在打包节点(打包节点属于共识节点)可以根据区块链节点系统100中其它共识节点的节点标识,将新生成的区块(即提议区块)分别发送给打包节点所在的区块链节点系统100中的其它共识节点,由共识节点对新生成的区块进行共识,并在共识成功后将新生成的区块添加至其存储的区块链。
应当理解,本发明实施例中的第一节点和第二节点可以为区块链网络中的共识节点。其中,第一节点可以为区块链网络中的打包节点。因此,本发明实施例可以将对交易业务进行打包处理的区块链节点统称为第一节点(即打包节点,例如,图1所示的节点10a),还可以将对打包处理所得到的区块进行共识的区块链节点统称为第二节点(即共识节点,例如,图1所示的节点10b和节点10c)。
为便于理解,进一步地,请参见图2,图2是本发明实施例提供的一种区块数据处理方法的流程示意图。该方法可以由第一节点(例如,上述图1所示的区块链节点10a)执行,也可以由第二节点(例如,上述图1所示的区块链节点10b)执行,还可以由第一节点和第二节点共同执行。
其中,该区块数据处理方法至少可以包括以下步骤S201至步骤S204:
步骤S201,对存储区块数据的第一原始文件中的各个区块数据加入第一校验数据段和区块长度字段,得到区块文件;
应当理解的是,本发明实施例的方法通过对存储区块数据的第一原始文件进行结构优化,以便于基于优化后的区块文件的结构特性实现安全高效的区块数据处理;需要说明的是,可以对区块数据主目录下的若干第一原始文件同时或依次进行相关结构优化的操作。具体地,第一原始文件的结构优化包括向文件中各个区块数据加入第一校验数据段和区块长度字段,进而得到区块文件;其中,第一原始文件和区块文件中均包括若干区块数据,而经过结构优化后得到的区块文件中各个区块数据携带上第一校验数据段和区块长度字段。
可以理解的是,第一校验数据段可以用于后续相关区块数据处理的数据校验;其中,数据校验是为保证数据的完整性进行的一种验证操作,通常用一种指定的算法对原始数据计算出的一个校验值,接收方/处理方用同样的算法计算一次校验值,如果两次计算得到的检验值相同,则说明数据是完整的。而在本发明实施例中,通过指定的算法分别针对各个区块数据计算得到各区块数据对应的第一校验数据段。而由于本发明实施例的区块文件包括了若干区块数据的结构组成特性,基于区块长度字段可以辅助后续的相关区块数据处理准确定位处理数据的字段位置。
示例性地,本发明实施例可以通过在ChainMaker中使用CRC算法计算第一原始文件中各个区块数据的第一校验数据段,并基于各区块数据的存储量或字节大小等确定其区块长度字段,进而将得到的第一校验数据段和区块长度字段加入对应的区块数据,第一原始文件中所有区块数据均加入了对应的第一校验数据段和区块长度字段后,得到区块文件。
步骤S202,对存储区块索引信息的第二原始文件中的各个区块索引信息加入第二校验数据段和索引长度字段,得到索引文件;
应当理解的是,本发明实施例的方法通过对存储区块索引信息的第二原始文件进行结构优化,以便于基于优化后的索引文件的结构特性实现安全高效的区块数据处理;需要说明的是,可以对区块索引信息(区块索引数据)主目录下的若干第二原始文件同时或依此进行相关结构优化的操作。具体地,第二原始文件的结构优化包括向文件中各个区块索引信息加入第二校验数据段和索引长度字段,进而得到索引文件;其中,第二原始文件和索引文件中均包括若干区块索引信息,而经过结构优化后得到的索引文件中各个区块索引信息携带上第二校验数据段和索引长度字段。
可以理解的是,第二校验数据段可以用于后续相关基于区块索引信息的相关区块数据处理的数据校验;其中,数据校验是为保证数据的完整性进行的一种验证操作,通常用一种指定的算法对原始数据计算出的一个校验值,接收方/处理方用同样的算法计算一次校验值,如果两次计算得到的检验值相同,则说明数据是完整的。而在本发明实施例中,通过指定的算法分别针对各个区块索引信息计算得到各区块索引信息对应的第二校验数据段。而由于本发明实施例的区块文件包括了若干区块索引信息的结构组成特性,基于索引长度字段可以辅助后续的基于区块索引信息的相关区块数据处理准确定位引用的区块索引信息的字段位置。
示例性地,本发明实施例可以通过在区块链(例如ChainMaker)中使用CRC算法计算第二原始文件中各个区块索引信息的第二校验数据段,并基于各区块索引信息的存储量或字节大小等确定其索引长度字段,进而将得到的第二校验数据段和索引长度字段加入对应的区块索引信息,第二原始文件中所有区块索引信息均加入了对应的第二校验数据段和索引长度字段后,得到索引文件。
步骤S203,响应于对区块文件的文件处理请求,根据区块文件中的第一校验数据段、区块长度字段和区块数据,对各个区块文件进行对应处理,得到文件处理结果;
其中,文件处理请求包括文件读取请求、文件写入请求、文件合并请求和文件分割请求。
应当理解的是,本发明实施例通过响应于对区块文件的文件处理请求,进而根据区块文件中的第一校验数据段进行文件处理涉及的区块数据的数据校验,确保数据的完整性,避免因数据异常导致数据处理结果误差;其中,在对区块文件的处理过程中,根据区块文件中的区块长度字段定位文件处理涉及的区块数据的字节位置,进而形成数据指针,以便于准确引用对应的区块数据。
示例性地,本发明实施例可以基于第一校验数据段和区块长度字段校验并引用区块文件中对应的区块数据,进而实现对区块文件的文件读取处理、文件写入处理、文件合并处理和文件分割处理的一种或多种组合,进而得到对应的文件处理结果。需要说明的是,文件读取处理一般不改变区块文件的数据内容。其中,可以通过对区块文件的合并和/或分割,完成对区块文件中区块数据的存储管理。
步骤S204,根据文件处理结果,结合索引文件中的第二校验数据段、索引长度字段和索引数据,对各个索引文件进行更新。
应当理解的是,本发明实施例根据对区块文件的文件处理请求所得到的文件处理结果(例如完成合并处理和/或分割处理之后得到的区块文件),进而结合索引文件中的第二校验数据段、区块长度字段和索引数据,例如通过对应于合并后的区块文件和/或分割后的区块文件的文件格式,对相关索引文件中的索引数据及第二校验数据段和区块长度字段进行文件格式对应的相关操作,以实现对各个索引文件的更新处理。
下面结合附图对本发明提供的区块数据处理方法的具体实施过程进行描述:
首先需要说明的是,在区块链中每天都在产生新的数据,其中区块数据是用户上传的原始数据,主要是区块和区块内包含的区块头和交易,数据只增加不减少,一次写入之后永不再修改,这样的数据特性非常适合区块文件存储数据(BFDB)的文件处理方式,区块文件存储数据的目录结构如图3所示,该结构中区块数据放在bfdb文件夹(区块数据主目录)下的xxx.fdb(即第一原始文件)中,索引信息放置在对应的blockdb文件夹下的leveldb(对应xxx.ldb,即第二原始文件)中。其中,如图4所示为第一原始文件的组成结构示意图,xxx.fdb中可以用于连续放置着区块链序列化后(这里的序列化是指按照区块高度排序的序列)的文本,形成多个区块序列化后的fdb文件40(第一原始文件),其中包括区块序列化后的文本41和42等(后续未标注,其中,42为41的下一个区块序列化后的文本)。对应的,第二原始文本可以采用json文件保存基于fdb文件列化后的若干索引文本。
进而,可以在图4中的每个区块前面添加校验数据,校验数据可以采用checksum(CRC校验数据,即第一校验数据段)和表征区块数据长度的长度字符(即区块长度字段)组成,其中,checksum通过在ChainMaker中使用CRC算法计算而出,长度为4byte;长度字符为一个长度为10byte的数值(够记录1000MB的区块序列化后数据的长度),用于记录写入的区块的文本长度;如图5所示,完成校验数据的添加后得到区块文件50,区块文件50的格式依然为多个区块序列化后的文本组成的fdb文件,相较于第一原始文件的区别在于文件中各区块前多了校验数据,形成完整区块数据51,52为51的下一个完整区块数据(后续未标注),各完整区块数据中依次包括CRC校验数据53、长度字符54和区块序列化后的文本55。
需要说明的是,本发明实施例的第二原始文件可以以json文件的格式进行设计,示例性地,如图6所示,本发明实施例可以在json文件中的每个索引前面添加校验数据,完成校验数据的添加后得到索引文件60,索引文件60的格式为多个xxx.fdb列化后的索引文本组成的xxx.json文件,相较于第二原始文件的区别在于文件中各索引前多了校验数据63,形成完整索引数据61,62为61的下一个完整索引数据(后续未标注),各完整索引数据中依次包括CRC校验数据63、长度字符64和xxx.fdb列化后的索引文本65。
随后基于结构优化后的区块文件和索引文件,通过响应于对区块文件的文件处理请求,根据区块文件中的第一校验数据段进行文件处理涉及的区块数据的数据校验,并根据区块文件中的区块长度字段定位文件处理涉及的区块数据的字节位置,进而形成数据指针,以便于准确引用对应的区块数据,从而实现对区块文件的文件读取处理、文件写入处理、文件合并处理和文件分割处理的一种或多种组合,以得到对应的文件处理结果;进一步根据对区块文件的文件处理请求所得到的文件处理结果(例如完成合并处理和/或分割处理之后得到的区块文件),进而结合索引文件中的第二校验数据段、区块长度字段和索引数据,例如通过对应于合并后的区块文件和/或分割后的区块文件的文件格式,对相关索引文件中的索引数据及第二校验数据段和区块长度字段进行文件格式对应的相关操作,以实现对各个索引文件的更新处理。
在一些可能实现的实施例中,第一校验数据段用于校验区块文件的完整性;区块长度字段用于表征区块文件中区块数据的字段长度;第二校验数据段用于校验索引文件的完整性;索引长度字段用于表征索引文件中索引信息的字段长度,步骤S201中的向第一原始文件中各个区块数据加入区块长度字段这一步骤,可以包括但不限于步骤S2011至S2012。
步骤S2011,获取区块数据的存储大小;
示例性地,可以直接通过相关函数获取区块数据的数据存储字节的大小,包括但不限于sizeof函数、mongoDB和redis函数等,或者直接通过访问区块文件的关系数据库(区块链)获取对应区块数据的存储大小。由于数据中包括的字节多少直接体现在存储大小中,而数据的存储大小能够便捷获取,因此,通过获取区块数据的存储大小能够为后续确定区块长度字节提供参数基础。
步骤S2012,根据存储大小计算区块数据的区块长度,并向第一原始文件中区块数据加入区块长度的字段。
应当理解的是,存储单位是一种数量单位。指在某一行业以一个特殊量,或规范作为一个纪录(计数)点,再为此点以某个倍率前去界定另一个点,而这个点的象征便是计数企业或存储单位。在计算机内部结构,信息全是釆用二进制的方式进行储存、计算、和处理传送的。因此,能够先根据存储大小确定数据字节,进而计算得到区块数据的区块长度。
示例性地,可以预留一个长度为10byte的数值(能够记录1000MB的区块序列化后数据的长度),用于记录写入的区块的文本长度;而基于区块数据的存储大小确定区块长度的过程,例如:区块序列化后大小为10MB,则文本大小为10485760,“10485760”长度为8个byte,小于预留的10byte。
在一些可能实现的实施例中,当文件处理请求为文件读取请求,步骤S203,可以包括但不限于步骤S20301至S20303。
步骤S20301,响应于对区块文件的文件读取请求,获取区块文件的文件头,从文件头中依次读取第一校验数据段和区块长度字段;
应当理解的是,文件头即表征在对第一原始文件进行结构优化过程中,在区块数据前所加入的第一校验数据段和区块长度字段。其中,第一校验数据段是通过相关校验算法(例如CRC)对原始的区块数据计算出的一个校验值,该检验值通常不再修改作为固定值,以用于后期数据校验过程的对比参照;而由于本发明实施例的区块文件包括了若干区块数据的结构组成特性,基于区块长度字段可以辅助后续的相关区块数据处理准确定位处理数据的字段位置。
示例性地,以(如图3所示的)区块文件采用xxx.fdb格式结构的文件、检验算法采用CRC(得到的校验值为4个字节)为例,而区块长度字段可以预留10个字节(能够记录1000MB的区块序列化后数据的长度),即文件头总共为14个字节(包括4个字节的第一校验数据段和10个字节的区块长度字段),xxx.fdb中包括若干含有文件头的区块数据,任一区块数据的文件头的读取过程可以为:首先从区块数据的前面获取文件头,然后在文件头中读取4个字节的checksum(CRC计算的检验值,即第一校验数据段)和读取10个字节的“区块长度”。
步骤S20302,根据区块长度字段,从区块文件中读取对应长度的数据得到区块数据;
应当理解的是,由于本发明实施例的区块文件包括了若干区块数据的结构组成特性,为能够准确获取对应的区块数据,避免因区块数据获取过程中各区块数据的数据混合导致提取数据错误,基于区块长度字段可以辅助后续的相关区块数据处理准确定位处理数据的字段位置。
示例性地,以(如图3所示的)区块文件采用xxx.fdb格式结构的文件为例,首先需要说明的是,为便于对区块数据的准确获取,可以将“区块长度”转换成数值,即为区块数据的长度数据,进而根据长度数据读取指定长度的文本,得到区块序列化后存放在xxx.fdb中的文本(即区块数据)。
步骤S20303,计算区块数据的验证信息,将验证信息与第一校验数据段进行比对,确定区块数据的完整性,直至完成对区块文件中所有区块数据的读取。
应该理解的是,为验证区块数据的完整性,首先根据读取得到的区块数据计算验证信息,具体的计算过程与基于第一原始文件中各个区块数据计算第一校验数据段的流程一致。而该步骤计算的对象为重新读取得到的区块数据,当数据存储过程出现数据损坏,则其与第一原始文件中对应的区块数据不一定相同,因此,需要将验证信息与第一校验数据段进行比对,以确定区块数据的完整性。依次读取并确定区块文件中各个区块数据的完整性,直至完成对区块文件中所有区块数据的读取。
示例性地,以(如图3所示的)区块文件采用xxx.fdb格式结构的文件、检验算法采用CRC为例,则读取的区块数据为区块序列化后存放在xxx.fdb中的文本,根据这段文本通过CRC计算checksum(文本的检验值,此处表征验证信息),进而与步骤S20301中读出的checksum(第一校验数据段)进行比对,两个检验值一致则代表数据为完整的,依次遍历读取xxx.fdb中的序列化后的各个区块文本,并进行数据完整性确定,直至完成对xxx.fdb中所有区块文本的读取。
在一些可能实现的实施例中,本发明实施例的方法还可以包括但不限于步骤S20304。
步骤S20304,当读取区块文件的区块数据为出错数据时,终止对区块文件的读取,并将出错数据之后的所有内容丢弃。
应当理解的是,区块数据在存储过程中可能会出现数据损坏,损坏的原因可以包括:不可抗拒因素,例如,自然灾害,如水灾、火灾、雷击、地震等造成计算机系统的破坏,导致存储数据被破坏或完全丢失;使用人员的误操作;计算机设备的硬件故障,包括存储介质的老化、失效;病毒感染造成的数据破坏。而损坏出错的区块数据是无法应用的,因此,当读取区块文件的区块数据为出错数据时,终止对区块文件的读取,并将出错数据之后的所有内容丢弃,以避免因数据出错导致进一步应用相关区块数据的计算、处理等流程出错;由于区块文件中包括若干区块数据,而以读取到出错数据为节点,抛弃后续数据,以期尽可能保存前面完整的区块数据,提升数据利用率,并避免后续错误数据对整体数据的污染。
示例性地,以(如图3所示的)区块文件采用xxx.fdb格式结构的文件为例,依次读取xxx.fdb中的各个区块数据的文件头,进而通过文件头的区块长度确定指定长度读取当前的区块数据,进而计算区块数据的验证值,与文件头的第一建议数据段进行比对,实现当前区块数据的完整性检验。在读取的过程中,如果其中一个区块数据的检验发现其出现错误,则表示后期数据被损坏,读取数据终止,后续的xxx.fdb文本丢弃,而前期已读取的文本可以另行保存。
在一些可能实现的实施例中,当文件处理请求为文件写入请求,步骤S203,可以包括但不限于步骤S20305至S20306。
步骤S20305,响应于对区块文件的文件写入请求,向区块文件中依次写入第一校验数据段、区块长度字段和区块数据。
应当理解的是,当有新的区块数据需要上链(例如来自于区块链用户),响应于对区块文件的文件写入请求,其中,文件写入请求可以基于区块链用户的数据上传操作生成,此时,区块数据写入的是经过结构优化后的区块文件中,对应的,在获取到需要写入的区块数据后且在写入区块文件前,为了新写入的区块数据的数据格式对应区块文件的格式特征,可以先针对写入的区块数据进行相关校验和字节长度的计算,得到其对应的第一校验数据段和区块长度字段,进而将第一校验数据段、区块长度字段和区块数据依次写入区块文件中。
步骤S20306,将各个区块数据对应的索引信息写入索引文件,并在写完所有区块数据后,在索引文件中加入结尾标识,结尾标识用于表征区块文件中写入的最后一个区块数据。
应当理解的是,当完成将新的区块数据的写入区块文件的操作后,进而将区块数据对应的索引信息写入索引文件,此时,索引信息写入的是经过结构优化后的索引文件中,对应的,在获取到写入的区块数据对应的索引信息后且在写入区块文件前,为了新写入的索引信息的数据格式对应索引文件的格式特征,可以先针对写入的索引信息进行相关校验和字节长度的计算,得到其对应的第二校验数据段和索引长度字段,进而将第二校验数据段、索引长度字段和索引信息依次写入索引文件中。其中,区块数据往往是批量写入,而为了防止写入中途的失败或崩溃导致数据杂糅,在将一个区块数据完全写入之后,通过在索引文件中加入结尾标识,当后续的一个区块数据完全写入之后,进一步加入结尾标识(对原来的结尾标识进行更新或覆盖),结尾标识始终表征着区块文件中写入的最后一个区块数据。
示例性地,当文件处理请求为文件写入请求,以(如图3所示的)区块文件采用xxx.fdb格式结构的文件、检验算法采用CRC(得到检验值为checksum,即第一、第二校验数据段)为例,一些具体实施例中,步骤S203可以包括步骤:区块写入xxx.fdb文件时先写入checksum,再写入“区块长度”,最后写入区块文本数据;在写入xxx.fdb之后再写入区块对应的索引数据到KVDB(即索引文件)中,为防止索引数据写入中途出现失败(如:KVDB崩溃),在所有索引写完之后,单独再写入一个lastsavepoint的标识数据,记录写入索引对应的区块高度。其中,区块和索引写入的顺序:区块(N-1)-->区块索引(N-1)-->区块(N)-->区块索引(N)-->区块(N+1)-->区块索引(N+1)。本发明实施例采用上述区块和索引的写入顺序作为示例,在该示例下,本发明实施例能够实现在区块数据的处理流程中,当任何一个步骤出现异常中断时,重新开始处理流程都能保证数据不出现损坏或者丢失。按照上述区块和区块索引对应一一写入的顺序,能够便于在发生异常中断时,直接从中断位置继续写入,且保证中断前的数据完整性,以及区块和区块索引一一对应,还能够保证在中断期间,前方的区块数据能够基于索引正常应用。否则,如果直接在数据库中一次性写入所有区块,若此时发生处理中断,由于没有顺序存储对应的索引信息,将会导致写入的区块无法正常使用,只能等待全部的区块和索引对应写完后才能应用,因此本发明实施例的区块数据写入顺序和索引数据写入顺序的规划能够大大提高系统发生中断时的处理效率。
在一些可能实现的实施例中,本发明实施例的方法还可以包括但不限于步骤S20307。
步骤S20307,当向区块文件写入区块数据出现写入错误时,终止对区块文件的写入处理,并在重启写入处理时读取结尾标识,从最后一个区块数据开始重新写入区块数据。
应当理解的是,当向区块文件写入区块数据出现写入错误时,为避免全部区块数据的重写写入,增加无效工作量,所以通过终止对区块文件的写入处理保证已经写入的区块数据的完整性,进而在重启写入处理时读取结尾标识,根据结尾标识确定其表征的区块文件中写入的最后一个区块数据,再从最后一个区块数据开始重新写入区块数据。
示例性地,以(如图3所示的)区块文件采用xxx.fdb格式结构的文件、检验算法采用CRC(得到检验值为checksum,即第一、第二校验数据段)为例,说明响应于文件写入请求的整体处理步骤:
区块写入xxx.fdb文件时先写入checksum,再写入“区块长度”,最后写入区块文本数据,这中间写入出现错误时直接终止写入,直接终止节点;再次写入时,需要重新启动节点,此时可以按照步骤S20301至S20303进行文件读取以加载区块数据。
假设:写入高度为N的区块结束后,在写入高度为(N+1)的区块时节点服务器发生断电,导致高度(N+1)的区块数据未写入完成,如写入0.5个区块。在节点重新启动后加载xxx.fdb中的最新区块时会丢弃(N+1),只认可自己存储到区块高度为N。
并且,写入xxx.fdb之后再写入区块对应的索引数据到KVDB(索引文件)中,为防止索引数据写入中途出现失败(如:KVDB崩溃),在所有索引写完之后,单独再写入一个lastsavepoint的标识数据,记录写入索引对应的区块高度。其中,区块和索引写入的顺序:区块(N-1)-->区块索引(N-1)-->区块(N)-->区块索引(N)-->区块(N+1)-->区块索引(N+1)。
假设:写入高度为N的区块和索引数据结束后,在写入“区块(N+1)”之后,再写入“区块索引(N+1)”时数据库崩溃;
节点在重启时读取KVDB中lastsavepoint返回的值;
若返回N+1,表示区块N+1数据存储是完整的,可继续写入N+2的流程;
若返回N,表示区块N+1数据存储不完整,存储需要根据xxx.fdb中的高度(N+1)的区块数据重新计算索引数据,再次写入“区块索引(N+1)”的数据到KVDB中,由于KVDB的特性,若之前写入过数据也会被新的数据覆盖,无需担心数据多次写入导致数据损坏问题。
在一些可能实现的实施例中,当文件处理请求为文件合并请求,步骤S203,可以包括但不限于步骤S20308至S20312。
步骤S20308,响应于对区块文件的文件合并请求,获取若干个时序相邻的区块文件。
应当理解的是,在一些特定场景下,如在节点区块归档后恢复(归档是指(archive):将不再活跃但必须保留的数据移动到另一个存储系统,以便释放节点主存储,提高系统性能。数据归档后,如果再要使用到,则可以从归档数据中恢复得到相关数据)时,区块链用户恢复到节点上的区块可能是不连续的(此时也会保持成区块文件,每批区块高度连续的顺序增长的区块放置在一个区块文件中),或者顺序不是按照区块文件中区块存放的顺序推送的(比如,恢复时区块是倒序写入区块文件的,此时会使得每个区块单独保存成一个区块文件),因此节点在接收到区块后,需要会对这些区块数据进行整理,按照区块文件预设的存放规则和单个区块文件的大小合并整理。因此,通过相关特定场景的时间节点(如归档后恢复时的节点)出发相关区块文件的文件合并请求,进而获取若干个时序相邻的区块文件,作为后续合并处理的数据基础。
步骤S20309,以若干个相邻的区块文件中的第一个区块文件作为合并文件,按序将其他各个区块文件合并至合并文件。
其中,合并文件中每个区块数据包括第一校验数据段和区块长度字段。
应当理解的是,由于区块数据是按照高度进行排列的,因此相邻的区块文件中的区块数据是连续的,即,相邻两个区块文件中,前一个区块文件的最后一个区块数据的高度比后一个区块文件的第一个区块数据的高度大1。因此,以若干个相邻的区块文件进行文件的合并,进而基于待合并的若干个相邻的区块文件中的第一个区块文件作为合并文件,进而可以按序将其他各个区块文件中的各区块数据合并至合并文件,能够避免过多的文件调动,只需将后续区块文件依次合并到合并文件,能够便捷地实现文件合并。
步骤S20310,根据合并文件中新的区块数据的信息,对第一个区块文件的索引文件进行更新,得到合并文件对应的索引文件。
应当理解的是,当完成对若干个相邻的区块文件的文件合并后,对应的区块文件的索引文件也许要基于合并后的文件结构进行更新,以便于后续基于索引文件的相关区块数据的调用能够准确指引到对应的区块文件。其中,由于各个索引文件中包括了若干与对应区块文件中的区块数据对应的索引信息(数据),索引文件的更新可以通过类似于区块文件的合并处理,即首先基于进行合并处理的若干相邻的区块文件对应的若干相邻的索引文件作为更新基础,进而基于待合并的若干个相邻的区块文件中的第一个区块文件的索引文件作为更新文件,再按序将其他各个区块文件的索引文件中的各索引信息合并至索引文件,将后续区块文件对应的索引文件依次合并到更新文件,以得到合并文件对应的索引文件。
步骤S20311,将合并至合并文件的各个区块文件的文件名存储至目标文件。
应当理解的是,通过将合并至合并文件的各个区块文件的文件名存储至目标文件对合并至合并文件的各个区块文件的文件名进行记录,以作为后续步骤对相关区块文件的进行相关处理的文件指针,以便于快速定位对应的区块文件。
步骤S20312,根据目标文件的文件名,从临时文件夹中删除对应文件名的各个区块文件和索引文件。
其中,临时文件夹用于存储处理过程中的文件。
应当理解的是,为避免文件合并处理的过程的相关错误造成区块文件的根文件的损坏,因此,在合并的过程中,可以先创建一个临时文件夹用于存储处理过程中的中间文件,如合并至合并文件的各个区块文件,以及用于更新合并文件对应的索引文件的各个索引文件(即被合并的区块文件对应的索引文件)。进而,对于合并过程的区块文件合并以及索引文件更新都可以基于临时文件中的相关区块文件和索引文件进行合并和索引更新,避免对根文件的随意改动造成文件丢失、损坏等。最终,再根据目标文件的文件名,从临时文件夹中删除对应文件名的各个区块文件和索引文件。
还需要说明的是,一些实施例中,文件合并和索引更新是基于调动相关的区块文件中的区块数据至合并文件以及调动相关索引文件中的索引信息至合并文件对应的索引文件,被合并的区块文件及其对应的索引文件依然存在于根目录中,此时,还可以通过目标文件中的文件名将根目录中对应文件名的各个区块文件和索引文件一并删除,避免数据冗余。
在一些可能实现的实施例中,步骤S20309可以包括但不限于步骤S203091至S203092。
步骤S203091,根据各个区块文件的文件名,解析各个区块文件的区块高度,并根据各个区块文件的区块高度确定各个区块文件为时序相邻的区块文件;
应当理解的是,由于区块数据是按照高度进行排列的,因此根据各区块文件中的区块高度可以确定各个区块文件为时序相邻的区块文件,即,相邻两个区块文件中,前一个区块文件的最后一个区块数据的高度比后一个区块文件的第一个区块数据的高度大1。其中,一些实施例中,各个区块文件的文件名表征该区块文件中第一个区块数据的高度,而由于区块文件中通常包括若干区块数据,所以各区块文件的文件名通常不是连续的,如第一个区块文件包括高度1至5的区块数据,则第一个区块文件的文件名为xxx1,而第二个区块包括高度6至9的区块数据,则第二个区块文件的文件名为xxx6,以此类推,因此,解析各个区块文件的区块高度,并根据各个区块文件的区块高度确定各个区块文件为时序相邻的区块文件。其中,当两个区块文件的文件名不存在中间值的文件名时,则可以认定该两个区块文件为相邻文件名,并根据文件名确定的区块高度进一步确定文件顺序,依次类推,便可以确定所有区块文件的序列。
步骤S203092,将时序相邻的各个区块文件中的第一个区块文件作为合并文件,按序将其他各个区块文件合并至合并文件。
可以理解的是,基于前述步骤已经确定的区块文件的时序(高度序列),进而对时序相邻的多个区块文件进行文件的合并,具体通过待合并的若干个时序相邻的区块文件中的第一个区块文件作为合并文件,然后可以按序将其他各个区块文件中的各区块数据合并至合并文件,能够避免过多的文件调动,只需将后续区块文件依次合并到合并文件,能够便捷地实现文件合并。
示例性地,以(如图3所示的)区块文件采用xxx.fdb格式结构的文件为例,其中,xxx.fdb支持合并,即将多个(两个及以上)xxx.fdb合并成一个更大的xxx.fdb;此处合并得到更大的xxx.fdb的目的在于应对特定场景下的相关需求,如在节点区块归档后恢复(归档是指(archive):将不再活跃但必须保留的数据移动到另一个存储系统,以便释放节点主存储,提高系统性能。数据归档后,如果再要使用到,则可以从归档数据中恢复得到相关数据)时,用户恢复到节点上的区块可能是不连续的(此时也会保持成xxx.fdb文件,每批区块高度连续的顺序增长的区块放置在一个xxx.fdb中),或者顺序不是按照xxx.fdb中区块存放的顺序推送的(比如,恢复时区块是倒序写入xxx.fdb的,此时会使得每个区块单独保存成一个xxx.fdb),因此时节点在接收到区块后,会对这些区块数据进行整理,按照xxx.fdb的存放规则和单个xxx.fdb的大小合并整理,解决bfdb中xxx.fdb散乱问题。
其中,一些具体实施例中,如图7所示,可以看到合并00000000000000000006.fdb和00000000000000000010.fdb到00000000000000000001.fdb的效果,之后删除掉已合并后的00000000000000000006.fdb和00000000000000000010.fdb;具体地,xxx.fdb合并过程可以包括:
1、在bfdb文件夹(即区块数据主目录)下创建merge文件夹(即临时文件夹);
2、确认合并的文件内容是连续的:解析00000000000000000006.fdb文件名中的高度:6,从KVDB(索引文件)获取高度为4和5的两个区块的索引信息。高度5为00000000000000000006.fdb中的第一个区块的高度(ChainMaker中bfdb高度比区块高度大1,因此5=6-1),FileName(文件名):为00000000000000000006;再获取高度为4(4=5-1)的区块,该高度是00000000000000000001.fdb的最后一个区块的高度,FileName:为00000000000000000001,因此,00000000000000000001.fdb和00000000000000000006.fdb是两个连续文件,若两个连续区块的索引中的FileName不一致,表示该两个连续区块所在的xxx.fdb是连续的;
3、合并是将后面的xxx.fdb的内容顺序合并到最开始的xxx.fdb中,所以合并后的文件名是第一个xxx.fdb的文件名,如图7所示;
4、拷贝第一个xxx.fdb(如:00000000000000000001.fdb)到merge文件夹;
5、解析后一个xxx.fdb(如:00000000000000000002.fdb)内容,重新计算该xxx.fdb的索引信息存储到第一个xxx.fdb文件名命名的索引文件中(如:00000000000000000001.json),之后将改xxx.fdb文件内容直接附加到merge/00000000000000000001.fdb后面;
6、若还有其它需要合并的xxx.fdb文件,参照步骤5的处理方案依次合并到第一个xxx.fdb文件;
7、xxx.json文件结构:在添加索引到xxx.json文件时,后续区块的索引数据也需参照xxx.fdb中区块添加方式;
8、索引添加完毕后,将文件名添加到xxx.file(如:00000000000000000001.file,即目标文件),这里是把所有合并了的文件的文件名都添加到file中,以便能够在根目录下删掉那些已经合并的单个文件,之后成为如图8所示的状态:
8.1、merge/00000000000000000001.fdb中存放合并后最终状态的区块数据;
8.2、merge/00000000000000000001.json中存放合并后最终状态的区块的索引数据;
8.3、merge/00000000000000000001.file中存放合并相关的文件名,每个文件名占一行,不存储第一个文件名;如下列的merge/00000000000000000001.file内容:
00000000000000000006;
00000000000000000010。
9、用merge/00000000000000000001.fdb覆盖bfdb/00000000000000000001.fdb,然后删除merge/00000000000000000001.fdb;
10、将merge/00000000000000000001.json中的数据写入存放区块索引的KVDB(如图3:leveldb),写入完成后,删除merge/00000000000000000001.json。索引写入过程若出现中断,此时KVDB中未写入的旧索引数据还可以读取旧xxx.fdb中的数据,(如图8中的bfdb/00000000000000000006.fdb和bfdb/00000000000000000010.fdb);
11、读取merge/00000000000000000001.file中的数据,删除bfdb文件夹下对应文件名的文件,之后再删除merge/00000000000000000001.file文件;若merge/00000000000000000001.file中记录的bfdb下的文件不存在,可直接删除merge/00000000000000000001.file文件。
在一些可能实现的实施例中,当文件处理请求为文件合并请求,步骤S203,还可以包括但不限于步骤S20313至S20317。
步骤S20313,当对区块文件进行文件合并时出现合并错误,查看临时文件夹中存在的文件类型:
可以理解的是,在合并过程中,可以在任何异常步骤终止,以期极大程度保证数据的完整性。因此,当对区块文件进行文件合并时出现合并错误,查看临时文件夹中存在的文件类型,进而可以基于临时文件夹中存在的文件类型进行如步骤S20314至S20317适应性的处理。需要说明的是,此处的合并错误指的是由于区块链的节点错误或者服务器奔溃后重启等原因导致合并过程被迫中断时出现的合并错误,一些实施例中,当合并中出现(流程性或逻辑性等)错误,则直接终止合并,并向管理人员进行报错,之后删除合并过程产生的合并文件及其对应的索引文件,并进一步清空临时文件夹,重置合并环境。并待管理人员改正相关错误后重新启动合并流程。
步骤S20314,当临时文件夹中同时存在合并文件、索引文件和目标文件时,对合并文件、索引文件和目标文件进行修复后完成对区块文件的文件合并;
示例性地,如图9所示,当临时文件夹中同时存在合并文件、索引文件和目标文件时,则表征合并已经开始,并且是在进行了一段时间后才终止的,读取索引文件后,便可以进行如下步骤:
1、首先确定合并文件对应的索引文件解析是否出错;
2、当解析出错,丢弃索引文件中不完整的索引数据,并进行下一步骤;否则,当解析未出错,直接进行下一步步骤;
3、根据索引文件的信息校验合并文件的内容,删除合并文件中没有存储索引的部分数据;并根据索引文件找到涉及到合并文件的文件名,补齐目标文件缺少的文件名;
4、数据结构已经修复,继续之前未完成的合并工作;
5、完成合并后,清空临时文件夹,重置合并环境。
步骤S20315,当临时文件夹中只存在合并文件时,删除合并文件,完成对区块文件的文件合并;
示例性地,当临时文件夹中只存在合并文件时,则表征刚刚开始合并就终止了,进而可以通过删除合并文件(以及可以重新启动合并流程,直至合并完成),并清空临时文件夹,重置合并环境。或者,待管理人员重新发送文件合并请求,进而响应于文件合并请求重新启动合并流程进行相关文件合并处理。
步骤S20316,当临时文件夹中不存在合并文件,且存在索引文件和目标文件时,将索引文件中的数据写入原始文件夹,并根据目标文件的文件名,从临时文件夹中删除对应文件名的各个区块文件和索引文件,完成对区块文件的文件合并;
示例性地,当临时文件夹中不存在合并文件,且存在索引文件和目标文件时,则表征已经完成合并文件的合并,并且已经删除了临时文件夹中的合并文件,进而便需要更新索引文件,则可以将索引文件中的数据写入原始文件夹,并删除根目录下被合并的合并文件及其索引文件,可以根据目标文件的文件名,从临时文件夹中删除对应文件名的各个区块文件和索引文件,完成对区块文件的文件合并。最终,清空临时文件夹,重置合并环境。
步骤S20317,当临时文件夹中只存在目标文件时,根据目标文件的文件名,从临时文件夹中删除对应文件名的各个区块文件和索引文件,完成对区块文件的文件合并。
示例性地,当临时文件夹中合并文件和索引文件都不存在,只存在目标文件时,则表征已经完成合并文件的合并,同时已经删除了临时文件夹中的合并文件,并且,已经完成索引文件的内容写入原始文件夹中,进而只需要根据目标文件的文件名,从临时文件夹中删除对应文件名的各个区块文件和索引文件,完成对区块文件的文件合并。最终,清空临时文件夹,重置合并环境。
示例性地,一些具体实施例中,以(如图3所示的)区块文件采用xxx.fdb格式结构的文件为例,如图10所示,在文件合并过程中出现合并错误时,接着前述的xxx.fdb合并过程进行如下步骤:
1、当合并中出现(流程性或逻辑性等)错误,直接终止合并,并向管理人员进行报错,随后跳转至后续第7步骤;否则,跳转至下一步骤;
2、当合并过程中出现由于区块链的节点错误或者服务器奔溃后重启等原因导致合并过程被迫中断时出现的合并错误,查看merge文件夹(即临时文件夹)中存在的文件类型,进而基于merge文件夹中存在的文件类型进行如第3步骤至第6步骤中任一步骤对应的适应性的处理;
3、当merge文件夹中同时存在xxx.fdb(即合并文件)、xxx.json(索引文件)和xxx.file(目标文件)时,则表征合并已经开始,并且是在进行了一段时间后才终止的,便可以进行如下步骤:
3.1、首先确定xxx.json解析是否出错;
3.2、当xxx.json解析出错,丢弃xxx.json中不完整的索引数据,并进行下一步骤;否则,当解析未出错,直接进行下一步步骤;
3.3、根据xxx.json的信息校验xxx.fdb的内容,删除xxx.fdb中没有存储索引的部分数据;并根据xxx.json找到涉及到xxx.fdb的文件名,补齐xxx.file缺少的文件名;
3.4、数据结构已经修复,跳转至前述的xxx.fdb合并过程中的步骤5继续之前未完成的合并工作;
3.5、完成合并后,跳转至后续第7步骤;
4、当merge文件夹中只存在xxx.fdb时,则表征刚刚开始合并就终止了,进而可以删除xxx.fdb,直至完成合并,跳转至后续第7步骤;
5、当merge文件夹中,xxx.fdb不存在,而xxx.json、xxx.file存在时,则表征已经完成xxx.fdb文件合并,进而跳转至前述的xxx.fdb合并过程中的步骤10重新开始执行;直至完成合并,跳转至后续第7步骤;
6、当merge文件夹中,xxx.fdb和xxx.json都不存在,只有xxx.file存在时,则表征已经完成xxx.json内容写入KVDB(图示kvdb),进而跳转至前述的xxx.fdb合并过程中的步骤11重新开始执行;直至完成合并,跳转至后续第7步骤;
7、清空merge文件,重置合并环境。
在一些可能实现的实施例中,当文件处理请求为文件分割请求,步骤S203,可以包括但不限于步骤S20318至S20320。
步骤S20318,响应于对区块文件的文件分割请求,确定区块文件的分割高度和分割文件数;
应当理解的是,在一些特定场景下,如在节点区块归档时,区块链用户的指定的归档高度在某个区块文件的中间,例如某一区块文件中包含区块:10、11、12、13、14、15,而区块链用户想归档高度为13以前的区块,此时就需要先对相应的区块文件进行分割,再进行归档操作。因此,为便于进行归档操作,通过响应于对区块文件的文件分割请求,确定区块文件的分割高度和分割文件数,进而可以通过确定的分割高度和分割文件数定位需要归档高度的区块,以便于后续分割处理。
步骤S20319,根据分割高度和分割文件数,将区块文件分割成对应个数的子文件;
其中,子文件中每个区块数据包括第一校验数据段和区块长度字段;
应当理解的是,由于区块文件中的区块数据是按照高度进行排列的,因此,当某一目标高度的区块在区块文件内,则需要根据分割高度和分割文件数确定该区块文件的分割点,进而再基于确定的分割点将区块文件分割成对应个数的子文件,以保证目标高度的区块经过分割后,处于分割得到的子文件的首端或末端,以便于区块链用户基于相关目标高度的区块的归档操作。
步骤S20320,每分割得到一个子文件时,配置子文件对应的索引文件。
应当理解的是,为便于归档操作对分割后的区块子文件的引用,需要在完成分割操作后,对分割得到的每一个子文件,进行相应的索引文件的配置。其中,各子文件的索引文件的配置可以通过对被分割的区块文件对应的索引文件以同样的分割点进行相应的分割操作,进而对应得到各子文件的索引文件;各子文件的索引文件的配置还可以通过对分割得到的各子文件的索引计算,直接得到各子文件对应的索引文件,进而覆盖被分割的区块文件对应的索引文件。
还需要说明的是,文件分割过程还可以创建类似于文件合并过程中的临时文件夹,用于存储处理过程中的中间文件,如分割得到的各个子文件,以及各子文件对应配置的索引文件等。避免对根文件的随意改动造成文件丢失、损坏等。同时,该临时文件夹还能作为参考依据,随时掌握分割过程的中间文件状态,进而基于中间文件的状态实现分割流程状态的实测或分割错误的判定。
在一些可能实现的实施例中,步骤S20318,可以包括以下至少之一:
识别区块文件的整体区块高度,并根据文件分割请求中解析的分割文件数,从整体区块高度中确定各个分割高度;
或,计算区块文件的数据大小,根据文件分割请求中解析的待分割文件大小来确定分割文件数以及区块文件的分割高度。
在一些可能实现的实施例中,本发明实施例的方法还可以包括但不限于步骤S20320至S20321。
步骤S20320,响应于对区块文件的文件分割请求,记录区块文件的文件处理状态为文件分割状态;
应当理解的是,当某一区块文件正在进行分割处理时,该区块文件内的区块数据及其对应的索引信息在同步进行相关处理步骤,如果同时进行其它会对区块数据和索引信息进行变动(例如增加数据信息、删除数据信息、修改数据信息等),则容易造成对应处理的相关数据混淆,进而导致分割处理及相关变动处理失败,并导致数据损坏。因此,通过响应于对区块文件的文件分割请求,记录区块文件的文件处理状态为文件分割状态,具体在分割处理过程中,对相关区块文件进行状态标记,以保证当前区块文件中的数据仅支持分割处理,其它需要调度该区块文件的相关变动操作的权限暂时封闭。
步骤S20321,当完成对区块文件的文件分割处理时,将文件处理状态变更为文件写入状态。
应当理解的是,当完成对区块文件的文件分割处理时,此时,通过将文件处理状态变更为文件写入状态,对相关区块文件进行状态转换,重新打开其它需要调度该区块文件的相关变动操作的权限。本发明实施例通过基于分割请求和完成分割处理两个节点,对相应的区块文件进行状态标记和状态转换,保证了文件分割处理过程中的数据不被重复调动,避免造成数据损坏或丢失。
示例性地,以(如图3所示的)区块文件采用xxx.fdb格式结构的文件为例,其中,xxx.fdb支持分割,即将一个xxx.fdb分割成多个更小的xxx.fdb(被分割的xxx.fdb中的区块文本对应
分散到各个小的xxx.fdb);此处分割得到多个小的xxx.fdb的目的在于应对特定场景下的相关需求,如在节点区块归档时,区块链用户的指定的归档高度在某个区块文件的中间,例如某一区块文件中包含区块:10、11、12、13、14、15,而区块链用户想归档高度为13以前的区块,此时就需要先对相应的区块文件进行分割,再进行归档操作。可以通过分割处理以便于准确进行归档操作。
其中,一些具体实施例中,xxx.fdb分割过程可以包括:
1、在bfdb文件夹下创建spilt文件夹(类似临时文件夹);
2、根据一定规则计算出xxx.fdb分割的区块高度:
2.1、如00000000000000000001.fdb包含区块高度为0~13的区块数据,若根据区块高度从中间分割成两份,则分割的点为区块高度7;
2.2、若根据xxx.fdb内数据大小为分割依据,则统计xxx.fdb中每个区块的大小,根据连续区块的总大小分割。如连续区块总和大于等于64MB则分割一次,00000000000000000001.fdb包含区块0~13,总大小为192MB,计算出分割点为4、8,如图11所示,使得00000000000000000001.fdb分割成00000000000000000001.fdb、00000000000000000006.fdb、00000000000000000010.fdb三个分别为64MB的文件:
以分割bfdb/00000000000000000001.fdb为例讲解,分割区块高度点为:4、8,最后分割成三个文件,最后状态如表1。
表1
分割后文件名 包含区块 文件大小
00000000000000000001.fdb 0、1、2、3、4 64MB
00000000000000000006.fdb 5、6、7、8 64MB
000000000000000000010.fdb 9、10、11、12、13 64MB
2.3、创建split/00000000000000000001.state文件(记录文件处理状态的标记文件),写入“spliting”单词,用于记录分割状态;
3、读取bfdb/xxx.fdb文件,创建split/00000000000000000001.fdb文件,顺序写入从开始(0)到第一个分割点(4)的区块数据;
4、创建split/00000000000000000006.fdb文件,继续写入第一个分割点(5=4+1)到第二个分割点(8)的区块数据,split/00000000000000000006.fdb数据结构与图5一致,同时每写入一个区块完成后立即将区块对应索引写入split/00000000000000000006.json,索引文件结构与图6一致。按照同样的规则写入对应区块数据到split/00000000000000000010.fdb,索引数据到split/00000000000000000010.json;
5、如图12,将bfdb/00000000000000000001.fdb分割到split文件夹中;
6、写入“writing”单词到split/00000000000000000001.state,覆盖原先的“spliting”,表示分割从spliting进入到写入数据状态;
7、移动split/00000000000000000010.fdb到bfdb/00000000000000000010.fdb,之后将split/00000000000000000010.json中的索引信息全部写入到KVDB(如:leveldb);
8、xxx.fdb移动时,为防止移动过程中数据丢失或损坏,这里的“移动”采用先拷贝,拷贝成功后,再删除源数据的方式;
9、按照步骤6的方式,先处理split/00000000000000000006.fdb、split/00000000000000000006.json,再处理split/00000000000000000001.fdb、split/00000000000000000001.json(split/00000000000000000001.fdb会覆盖bfdb/00000000000000000001.fdb),直到倒序处理完split中的所有文件;
10、处理完成后,删除split/00000000000000000001.state,最后split成为空文件夹,bfdb成为图11的状态,xxx.fdb分割完成。
在一些可能实现的实施例中,当文件处理请求为文件分割请求,步骤S203还可以包括但不限于步骤S20322至S20323。
步骤S20322,当对区块文件进行文件分割时出现分割错误,停止文件分割的操作,删除已生成的子文件以及子文件对应的索引文件;
可以理解的是,在分割过程中,可以在任何异常步骤终止,以期极大程度保证数据的完整性。因此,一些实施例中,当分割中出现(流程性或逻辑性等)错误,则直接终止分割,并向管理人员进行报错,之后删除分割过程产生的子文件及其对应的索引文件,并进一步清空用于存放分割过程产生的中间文件的临时文件夹,重置合并环境。进而待管理人员改正相关错误后重新启动分割流程。
步骤S20323,当对区块文件进行文件分割时出现区块链网络故障,根据区块文件的文件处理状态进行数据修复,直至完成区块文件的文件分割处理。
应当理解的是,当对区块文件进行文件分割时出现区块链网络故障,则首先需要确定区块文件的文件处理状态,进而可以基于文件处理状态进行如步骤S203231至S203233以及步骤S203234至S203235适应性的处理。需要说明的是,由于区块链网络故障导致的分割错误指的是由于区块链的节点错误或者服务器奔溃后重启等原因导致分割过程被迫中断时出现的分割错误。
在一些可能实现的实施例中,当区块文件的文件处理状态为文件分割状态时,步骤S20323可以包括但不限于步骤S203231至S203233。
步骤S203231,当区块文件分割得到的各个子文件均与对应的索引文件成对存在时,根据索引文件对子文件进行修复后,重启对区块文件的文件分割流程;
应当理解的是,如图13所示,当区块文件的文件处理状态为文件分割状态时,且当区块文件分割得到的各个子文件均与对应的索引文件成对存在时,则表征分割已经开始,并且是在进行了一段时间后才终止的,读取索引文件后,便可以进行如下步骤:
1、首先确定索引文件解析是否出错;
2、当解析出错,丢弃索引文件中不完整的索引数据,并进行下一步骤;否则,当解析未出错,直接进行下一步步骤;
3、根据索引文件的信息校验子文件的内容,删除子文件中没有存储索引的部分数据;
4、数据结构已经修复,继续之前未完成的分割工作;
5、完成分割后,清空临时文件夹,重置分割环境。
步骤S203232,当区块文件分割得到成对存在的子文件和索引文件,且得到单独存在的子文件时,删除单独存在的子文件,并重启对区块文件的文件分割流程;
示例性地,当区块文件的文件处理状态为文件分割状态时,且当区块文件分割得到部分成对存在的子文件和索引文件,此外还得到单独存在的子文件时,则表征部分分割刚开始就终止了,进而可以通过删除单独存在的子文件(以及可以重新启动分割流程,直至分割完成),并清空临时文件夹,重置分割环境。或者,待管理人员重新发送文件分割请求,进而响应于文件分割请求,在区块文件的分割终止处重新启动分割流程进行相关文件分割处理,即已经分割得到部分成对存在的子文件和索引文件表征完成分割的部分,而继续启动的分割流程在后续未完成分割的部分开始。
步骤S203233,当区块文件分割只得到一个子文件时,直接重启对区块文件的文件分割流程。
示例性地,当区块文件的文件处理状态为文件分割状态时,且当临时文件夹中只存在一个子文件时,则表征刚刚开始分割就终止了,进而可以通过删除那一个文件(以及可以重新启动分割流程,直至分割完成),并清空临时文件夹,重置分割环境。或者,待管理人员重新发送文件分割请求,进而响应于文件分割请求重新启动分割流程,从头开始进行相关文件分割处理。
在一些可能实现的实施例中,当区块文件的文件处理状态为文件写入状态时,步骤S20323可以包括但不限于步骤S203234至S203235。
步骤S203234,当区块文件分割得到的各个子文件均与对应的索引文件成对存在时,将子文件转入区块管理数据库,并重启对区块文件的文件分割流程;
其中,区块管理数据库用于存储处理完成的文件;
应当理解的是,当区块文件的文件处理状态为文件写入状态时,且当区块文件分割得到的各个子文件均与对应的索引文件成对存在时,则表征区块文件已完成全部的分割,并得到分割处理结果的各个子文件,但是子文件此时是作为中间文件,还未写入转入到区块文件的根目录中,接着便可以将分割得到的子文件写入区块文件的根目录(覆盖或更新区块文件根目录中被分割的区块文件),以及将各子文件对应的索引文件写入索引文件的根目录(覆盖或更新区块文件根目录中与被分割的区块文件对应的索引文件),直至临时文件夹中的所有中间文件均写入对应的根目录,并清空临时文件夹,重置分割环境。
步骤S203235,当区块文件分割得到成对存在的子文件和索引文件,且得到单独存在的索引文件时,将索引文件写入索引数据库,并重启对区块文件的文件分割流程;
其中,索引数据库用于存储区块数据的索引信息。
应当理解的是,当区块文件的文件处理状态为文件写入状态时,且当区块文件分割得到部分成对存在的子文件和索引文件,此外还得到单独存在的索引文件时,则表征区块文件已完成全部的分割,并得到分割处理结果的各个子文件也已经写入转入到区块文件的根目录中,但是各子文件对应的索引文件还未完全写入索引文件的根目录,此时,便可以将各子文件对应的索引文件写入索引文件的根目录(覆盖或更新区块文件根目录中与被分割的区块文件对应的索引文件),直至临时文件夹中的所有索引文件的中间文件均写入对应的根目录,并清空临时文件夹,重置分割环境。
示例性地,一些具体实施例中,以(如图3所示的)区块文件采用xxx.fdb格式结构的文件为例,如图14所示,在文件分割过程中出现合并错误时,接着前述的xxx.fdb分割过程进行如下步骤:
1、当分割中出现(流程性或逻辑性等)错误,直接终止分割,并向管理人员进行报错,随后跳转至后续第10步骤;否则,跳转至下一步骤;
2、由于区块链的节点错误或者服务器奔溃后重启等原因导致分割过程被迫中断时出现的分割错误,从xxx.state(记录文件处理状态的标记文件)获取文件处理状态;当文件处理状态为spliting状态(分割状态),跳转至后续第3步骤;当文件处理状态为writing状态(写入状态),跳转至后续第7步骤;
3、确定split文件夹(即分割过程中的临时文件夹)中存在的文件类型,进而基于split文件夹中存在的文件类型进行如第4步骤至第6步骤中任一步骤对应的适应性的处理;
4、当split文件夹中xxx.fdb(即子文件)、xxx.json(子文件对应的索引文件)均成对存在时,则表征分割已经开始,并且是在进行了一段时间后才终止的,便可以进行如下步骤:
4.1、首先确定xxx.json解析是否出错;
4.2当解析出错,丢弃xxx.json中不完整的索引数据,并进行下一步骤;否则,当解析未出错,直接进行下一步步骤;
4.3根据xxx.json的信息校验xxx.fdb的内容,删除xxx.fdb中没有存储索引的部分数据;
4.4数据结构已经修复,跳转至前述的xxx.fdb分割过程中的步骤3继续之前未完成的分割工作;
4.5、完成分割后,跳转至后续第10步骤;
5、当split文件夹中部分xxx.fdb和xxx.json成对存在,但存在单个xxx.fdb时,则表征部分分割刚开始就终止了,进而可以删除单个xxx.fdb,然后跳转至前述的xxx.fdb分割过程中的步骤3继续之前未完成的分割工作,直至完成分割,跳转至后续第10步骤;
6、当split文件夹中至存在一个xxx.fdb,则表征刚刚开始分割就终止了,然后跳转至前述的xxx.fdb分割过程中的步骤3继续之前未完成的分割工作,直至完成分割,跳转至后续第10步骤;
7、确定split文件夹(即分割过程中的临时文件夹)中存在的文件类型,进而基于split文件夹中存在的文件类型进行如第8步骤至第9步骤中任一步骤对应的适应性的处理;
8、当split文件夹中xxx.fdb和xxx.json均成对存在,则表征xxx.fdb还未写入转入bfdb,然后跳转至前述的xxx.fdb分割过程中的步骤7继续之前未完成的分割工作,直至完成分割,跳转至后续第10步骤;
9、当split文件夹中部分xxx.fdb和xxx.json成对存在,但存在单个xxx.json时,则表征xxx.json还未写入转入KVDB完毕,然后跳转至前述的xxx.fdb分割过程中的步骤7,将split/00000000000000000010.json中的未写入KVDB的索引信息全部写入到KVDB(如:leveldb),进而继续未完成的分割工作,直至完成分割,跳转至后续第10步骤;
10、清空split文件,重置合并环境。
综上所述,本发明实施例文件处理步骤(包括读取、写入、合并和分割)在执行过程中的每一步都能保证数据的完整性,允许在任何一步出现异常中断,重新开始都能保证数据不出现损坏或者丢失;并且在合并和分割过程中,尽量保证操作是以整个文件为单位,而不是单个区块为粒度,最大可能的降低了操作成本和时间。其中,文件合并,针对的就只是文件之间的合并,不需要把文件里面存储的多个区块数据拆分出来看待。也就是允许一个文件里面存了很多个区块数据,并且本发明实施例的合并处理不管里面有几个区块数据,只要将不同文件合并起来即可,实现高效的归档操作。归档的目的是为了服务品质和保证数据的可管理,使得运行、维护、投入整体的成本降低,如何最大化使用存储,保证数据的访问。
如图15所示,本发明实施例的另一方面还提供了一种区块数据处理装置1500,该装置包括:
第一模块1510,用于对存储区块数据的第一原始文件中的各个区块数据加入第一校验数据段和区块长度字段,得到区块文件;
第二模块1520,用于对存储区块索引信息的第二原始文件中的各个区块索引信息加入第二校验数据段和索引长度字段,得到索引文件;
第三模块1530,用于响应于对区块文件的文件处理请求,根据区块文件中的第一校验数据段、区块长度字段和区块数据,对各个区块文件进行对应处理,得到文件处理结果;其中,文件处理请求包括文件读取请求、文件写入请求、文件合并请求和文件分割请求;
第四模块1540,用于根据文件处理结果,结合索引文件中的第二校验数据段、索引长度字段和索引数据,对各个索引文件进行更新。
结合附图15,对本发明提供的区块数据处理装置的具体实施过程进行描述:首先,第一模块1510,用于对存储区块数据的第一原始文件中的各个区块数据加入第一校验数据段和区块长度字段,得到区块文件;然后第二模块1520,用于对存储区块索引信息的第二原始文件中的各个区块索引信息加入第二校验数据段和索引长度字段,得到索引文件;接着,第三模块1530,用于响应于对区块文件的文件处理请求,根据区块文件中的第一校验数据段、区块长度字段和区块数据,对各个区块文件进行对应处理,得到文件处理结果;具体地,文件处理请求包括文件读取请求、文件写入请求、文件合并请求和文件分割请求;最后,第四模块1540,用于根据文件处理结果,结合索引文件中的第二校验数据段、索引长度字段和索引数据,对各个索引文件进行更新。
在一些可能实现的实施例中,当文件处理请求为文件合并请求,第三模块1530,具体还用于:当对区块文件进行文件合并时出现合并错误,查看临时文件夹中存在的文件类型:当临时文件夹中同时存在合并文件、索引文件和目标文件时,对合并文件、索引文件和目标文件进行修复后完成对区块文件的文件合并;当临时文件夹中只存在合并文件时,删除合并文件,完成对区块文件的文件合并;当临时文件夹中不存在合并文件,且存在索引文件和目标文件时,将索引文件中的数据写入原始文件夹,并根据目标文件的文件名,从临时文件夹中删除对应文件名的各个区块文件和索引文件,完成对区块文件的文件合并;当临时文件夹中只存在目标文件时,根据目标文件的文件名,从临时文件夹中删除对应文件名的各个区块文件和索引文件,完成对区块文件的文件合并。
在一些可能实现的实施例中,装置还可以包括但不限于如下模块:
第五模块,用于当读取区块文件的区块数据为出错数据时,终止对区块文件的读取,并将出错数据之后的所有内容丢弃。
第六模块,用于当向区块文件写入区块数据出现写入错误时,终止对区块文件的写入处理,并在重启写入处理时读取结尾标识,从最后一个区块数据开始重新写入区块数据。
第七模块,用于响应于对区块文件的文件分割请求,记录区块文件的文件处理状态为文件分割状态;
第八模块,用于当完成对区块文件的文件分割处理时,将文件处理状态变更为文件写入状态。
另一方面,如图16所示,本发明实施例还提供了一种电子设备1600,该电子设备包括至少一个处理器1610,还包括至少一个存储器1620,用于存储至少一个程序,处理器1610执行程序以执行前述的区块数据处理方法;以一个处理器1610及一个存储器1620为例。
处理器1610和存储器1620可以通过总线或者其他方式连接。
存储器1620作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序。此外,存储器1620可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件或其他非暂态固态存储器件。在一些实施方式中,存储器1620可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
以上所描述的系统实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
具体地,图17示意性地示出了用于实现本申请实施例的电子设备的计算机系统结构框图。
需要说明的是,图17示出的电子设备的计算机系统1700仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图17所示,计算机系统1700包括中央处理器1701(Central Processing Unit,CPU),其可以根据存储在只读存储器1702(Read-Only Memory,ROM)中的程序或者从存储部分1708加载到随机访问存储器1703(Random Access Memory,RAM)中的程序而执行各种适当的动作和处理。在随机访问存储器1703中,还存储有系统操作所需的各种程序和数据。中央处理器1701、在只读存储器1702以及随机访问存储器1703通过总线1704彼此相连。输入/输出接口1705(Input/Output接口,即I/O接口)也连接至总线1704。
以下部件连接至输入/输出接口1705:包括键盘、鼠标等的输入部分1706;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分1707;包括硬盘等的存储部分1708;以及包括诸如局域网卡、调制解调器等的网络接口卡的通信部分1709。通信部分1709经由诸如因特网的网络执行通信处理。驱动器1710也根据需要连接至输入/输出接口1705。可拆卸介质1711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1710上,以便于从其上读出的计算机程序根据需要被安装入存储部分1708。
本发明实施例还公开了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行图2所示的方法。
其中,根据本申请的实施例,各个方法流程图中所描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,如图17,该计算机程序可以通过通信部分1709从网络上被下载和安装,和/或从可拆卸介质1711被安装。在该计算机程序被中央处理器1701执行时,执行本申请的系统中限定的各种功能。
需要说明的是,本申请实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
在一些可选择的实施例中,在方框图中提到的功能/操作可以不按照操作示图提到的顺序发生。例如,取决于所涉及的功能/操作,连续示出的两个方框实际上可以被大体上同时地执行或所述方框有时能以相反顺序被执行。此外,在本发明的流程图中所呈现和描述的实施例以示例的方式被提供,目的在于提供对技术更全面的理解。所公开的方法不限于本文所呈现的操作和逻辑流程。可选择的实施例是可预期的,其中各种操作的顺序被改变以及其中被描述为较大操作的一部分的子操作被独立地执行。
此外,虽然在功能性模块的背景下描述了本发明,但应当理解的是,除非另有相反说明,所述的功能和/或特征中的一个或多个可以被集成在单个物理装置和/或软件模块中,或者一个或多个功能和/或特征可以在单独的物理装置或软件模块中被实现。还可以理解的是,有关每个模块的实际实现的详细讨论对于理解本发明是不必要的。更确切地说,考虑到在本文中公开的装置中各种功能模块的属性、功能和内部关系的情况下,在工程师的常规技术内将会了解该模块的实际实现。因此,本领域技术人员运用普通技术就能够在无需过度试验的情况下实现在权利要求书中所阐明的本发明。还可以理解的是,所公开的特定概念仅仅是说明性的,并不意在限制本发明的范围,本发明的范围由所附权利要求书及其等同方案的全部范围来决定。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。
计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置)、便携式计算机盘盒(磁装置)、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编辑只读存储器(EPROM或闪速存储器)、光纤装置以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。
以上是对本发明的较佳实施进行了具体说明,但本发明并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做出种种的等同变形或替换,这些等同的变形或替换均包含在本发明权利要求所限定的范围内。

Claims (19)

1.一种区块数据处理方法,其特征在于,包括:
对存储区块数据的第一原始文件中的各个区块数据加入第一校验数据段和区块长度字段,得到区块文件;
对存储区块索引信息的第二原始文件中的各个区块索引信息加入第二校验数据段和索引长度字段,得到索引文件;
响应于对所述区块文件的文件处理请求,根据所述区块文件中的第一校验数据段、区块长度字段和区块数据,对各个所述区块文件进行对应处理,得到文件处理结果;其中,所述文件处理请求包括文件读取请求、文件写入请求、文件合并请求和文件分割请求;
根据所述文件处理结果,根据所述索引文件中的第二校验数据段、索引长度字段和索引数据,对各个所述索引文件进行更新。
2.根据权利要求1所述的一种区块数据处理方法,其特征在于,所述第一校验数据段用于校验所述区块文件的完整性;所述区块长度字段用于表征所述区块文件中区块数据的字段长度;所述第二校验数据段用于校验所述索引文件的完整性;所述索引长度字段用于表征所述索引文件中索引信息的字段长度;所述向所述第一原始文件中各个区块数据加入区块长度字段,包括:
获取区块数据的存储大小;
根据所述存储大小计算所述区块数据的区块长度,并向所述第一原始文件中区块数据加入所述区块长度的字段。
3.根据权利要求1所述的一种区块数据处理方法,其特征在于,当所述文件处理请求为文件读取请求,所述响应于对所述区块文件的文件处理请求,根据所述区块文件中的第一校验数据段、区块长度字段和区块数据,对各个所述区块文件进行对应处理,包括:
响应于对所述区块文件的文件读取请求,获取所述区块文件的文件头,从所述文件头中依次读取第一校验数据段和区块长度字段;
根据所述区块长度字段,从所述区块文件中读取对应长度的数据得到区块数据;
计算所述区块数据的验证信息,将所述验证信息与所述第一校验数据段进行比对,确定所述区块数据的完整性,直至完成对所述区块文件中所有区块数据的读取。
4.根据权利要求3所述的一种区块数据处理方法,其特征在于,所述方法还包括:
当读取所述区块文件的区块数据为出错数据时,终止对所述区块文件的读取,并将所述出错数据之后的所有内容丢弃。
5.根据权利要求1所述的一种区块数据处理方法,其特征在于,当所述文件处理请求为文件写入请求,所述响应于对所述区块文件的文件处理请求,根据所述区块文件中的第一校验数据段、区块长度字段和区块数据,对各个所述区块文件进行对应处理,包括:
响应于对所述区块文件的文件写入请求,向所述区块文件中依次写入所述第一校验数据段、所述区块长度字段和所述区块数据;
将各个所述区块数据对应的索引信息写入所述索引文件,并在写完所有区块数据后,在所述索引文件中加入结尾标识,所述结尾标识用于表征所述区块文件中写入的最后一个区块数据。
6.根据权利要求5所述的一种区块数据处理方法,其特征在于,所述方法还包括:
当向所述区块文件写入区块数据出现写入错误时,终止对所述区块文件的写入处理,并在重启写入处理时读取所述结尾标识,从所述最后一个区块数据开始重新写入区块数据。
7.根据权利要求1所述的一种区块数据处理方法,其特征在于,当所述文件处理请求为文件合并请求,所述响应于对所述区块文件的文件处理请求,根据所述区块文件中的第一校验数据段、区块长度字段和区块数据,对各个所述区块文件进行对应处理,包括:
响应于对所述区块文件的文件合并请求,获取若干个时序相邻的所述区块文件;
以若干个相邻的所述区块文件中的第一个区块文件作为合并文件,按序将其他各个区块文件合并至所述合并文件;其中,所述合并文件中每个区块数据包括所述第一校验数据段和所述区块长度字段;
根据所述合并文件中新的区块数据的信息,对所述第一个区块文件的索引文件进行更新,得到所述合并文件对应的索引文件;
将合并至所述合并文件的各个区块文件的文件名存储至目标文件;
根据所述目标文件的文件名,从临时文件夹中删除对应文件名的各个区块文件和索引文件;其中,所述临时文件夹用于存储处理过程中的文件。
8.根据权利要求7所述的一种区块数据处理方法,其特征在于,所述以若干个相邻的所述区块文件中的第一个区块文件作为合并文件,按序将其他各个区块文件合并至所述合并文件,包括:
根据各个所述区块文件的文件名,解析各个所述区块文件的区块高度,并根据各个所述区块文件的区块高度确定各个所述区块文件为时序相邻的区块文件;
将时序相邻的各个区块文件中的第一个区块文件作为合并文件,按序将其他各个区块文件合并至所述合并文件。
9.根据权利要求8所述的一种区块数据处理方法,其特征在于,当所述文件处理请求为文件合并请求,所述响应于对所述区块文件的文件处理请求,根据所述区块文件中的第一校验数据段、区块长度字段和区块数据,对各个所述区块文件进行对应处理,还包括:
当对所述区块文件进行文件合并时出现合并错误,查看所述临时文件夹中存在的文件类型:
当所述临时文件夹中同时存在所述合并文件、所述索引文件和所述目标文件时,对所述合并文件、所述索引文件和所述目标文件进行修复后完成对所述区块文件的文件合并;
当所述临时文件夹中只存在所述合并文件时,删除所述合并文件,完成对所述区块文件的文件合并;
当所述临时文件夹中不存在所述合并文件,且存在所述索引文件和所述目标文件时,将所述索引文件中的数据写入原始文件夹,并根据所述目标文件的文件名,从临时文件夹中删除对应文件名的各个区块文件和索引文件,完成对所述区块文件的文件合并;
当所述临时文件夹中只存在所述目标文件时,根据所述目标文件的文件名,从临时文件夹中删除对应文件名的各个区块文件和索引文件,完成对所述区块文件的文件合并。
10.根据权利要求1所述的一种区块数据处理方法,其特征在于,当所述文件处理请求为文件分割请求,所述响应于对所述区块文件的文件处理请求,根据所述区块文件中的第一校验数据段、区块长度字段和区块数据,对各个所述区块文件进行对应处理,包括:
响应于对所述区块文件的文件分割请求,确定所述区块文件的分割高度和分割文件数;
根据所述分割高度和所述分割文件数,将所述区块文件分割成对应个数的子文件;其中,所述子文件中每个区块数据包括所述第一校验数据段和所述区块长度字段;
每分割得到一个所述子文件时,配置所述子文件对应的索引文件。
11.根据权利要求10所述的一种区块数据处理方法,其特征在于,所述响应于对所述区块文件的文件分割请求,确定所述区块文件的分割高度和分割文件数,包括以下至少之一:
识别所述区块文件的整体区块高度,并根据所述文件分割请求中解析的分割文件数,从所述整体区块高度中确定各个分割高度;
或,
计算所述区块文件的数据大小,根据所述文件分割请求中解析的待分割文件大小来确定所述分割文件数以及所述区块文件的分割高度。
12.根据权利要求11所述的一种区块数据处理方法,其特征在于,所述方法还包括:
响应于对所述区块文件的文件分割请求,记录所述区块文件的文件处理状态为文件分割状态;
当完成对所述区块文件的文件分割处理时,将所述文件处理状态变更为文件写入状态。
13.根据权利要求12所述的一种区块数据处理方法,其特征在于,当所述文件处理请求为文件分割请求,所述响应于对所述区块文件的文件处理请求,根据所述区块文件中的第一校验数据段、区块长度字段和区块数据,对各个所述区块文件进行对应处理,还包括:
当对所述区块文件进行文件分割时出现分割错误,停止所述文件分割的操作,删除已生成的所述子文件以及所述子文件对应的索引文件;
当对所述区块文件进行文件分割时出现区块链网络故障,根据所述区块文件的所述文件处理状态进行数据修复,直至完成所述区块文件的文件分割处理。
14.根据权利要求13所述的一种区块数据处理方法,其特征在于,当所述区块文件的文件处理状态为文件分割状态时,所述当对所述区块文件进行文件分割时出现区块链网络故障,根据所述区块文件的所述文件处理状态进行数据修复,包括:
当所述区块文件分割得到的各个所述子文件均与对应的索引文件成对存在时,根据所述索引文件对所述子文件进行修复后,重启对所述区块文件的文件分割流程;
当所述区块文件分割得到成对存在的所述子文件和所述索引文件,且得到单独存在的所述子文件时,删除单独存在的所述子文件,并重启对所述区块文件的文件分割流程;
当所述区块文件分割只得到一个所述子文件时,直接重启对所述区块文件的文件分割流程。
15.根据权利要求13所述的一种区块数据处理方法,其特征在于,当所述区块文件的文件处理状态为文件写入状态时,所述当对所述区块文件进行文件分割时出现区块链网络故障,根据所述区块文件的所述文件处理状态进行数据修复,包括:
当所述区块文件分割得到的各个所述子文件均与对应的索引文件成对存在时,将所述子文件转入区块管理数据库,并重启对所述区块文件的文件分割流程;其中,所述区块管理数据库用于存储处理完成的文件;
当所述区块文件分割得到成对存在的所述子文件和所述索引文件,且得到单独存在的所述索引文件时,将所述索引文件写入索引数据库,并重启对所述区块文件的文件分割流程;其中,所述索引数据库用于存储区块数据的索引信息。
16.一种区块数据处理装置,其特征在于,包括:
第一模块,用于对存储区块数据的第一原始文件中的各个区块数据加入第一校验数据段和区块长度字段,得到区块文件;
第二模块,用于对存储区块索引信息的第二原始文件中的各个区块索引信息加入第二校验数据段和索引长度字段,得到索引文件;
第三模块,用于响应于对所述区块文件的文件处理请求,根据所述区块文件中的第一校验数据段、区块长度字段和区块数据,对各个所述区块文件进行对应处理,得到文件处理结果;其中,所述文件处理请求包括文件读取请求、文件写入请求、文件合并请求和文件分割请求;
第四模块,用于根据所述文件处理结果,根据所述索引文件中的第二校验数据段、索引长度字段和索引数据,对各个所述索引文件进行更新。
17.一种电子设备,其特征在于,包括处理器以及存储器;
所述存储器用于存储程序;
所述处理器执行所述程序实现如权利要求1至15中任一项所述的方法。
18.一种计算机可读存储介质,其特征在于,所述存储介质存储有程序,所述程序被处理器执行实现如权利要求1至15中任一项所述的方法。
19.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至15中任一项所述的方法。
CN202310872829.XA 2023-07-15 2023-07-15 一种区块数据处理方法、装置及电子设备 Pending CN116955355A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310872829.XA CN116955355A (zh) 2023-07-15 2023-07-15 一种区块数据处理方法、装置及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310872829.XA CN116955355A (zh) 2023-07-15 2023-07-15 一种区块数据处理方法、装置及电子设备

Publications (1)

Publication Number Publication Date
CN116955355A true CN116955355A (zh) 2023-10-27

Family

ID=88452246

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310872829.XA Pending CN116955355A (zh) 2023-07-15 2023-07-15 一种区块数据处理方法、装置及电子设备

Country Status (1)

Country Link
CN (1) CN116955355A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117579617A (zh) * 2024-01-10 2024-02-20 深圳市众志天成科技有限公司 一种基于信息安全的数据传输方法和装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117579617A (zh) * 2024-01-10 2024-02-20 深圳市众志天成科技有限公司 一种基于信息安全的数据传输方法和装置
CN117579617B (zh) * 2024-01-10 2024-03-22 深圳市众志天成科技有限公司 一种基于信息安全的数据传输方法和装置

Similar Documents

Publication Publication Date Title
CN109150598B (zh) 一种基于块片的bft共识算法带宽使用率改进方法
CN110912937B (zh) 一种基于区块链的数字存证平台和存证方法
CN108648084B (zh) 一种区块链网络的数据处理方法、装置、设备及存储介质
CN107577427B (zh) 用于区块链系统的数据迁移方法、设备和存储介质
WO2019218717A1 (zh) 一种分布式存储方法、装置、计算机设备及存储介质
CN110334075B (zh) 基于消息中间件的数据迁移方法及相关设备
CN110941859A (zh) 用于区块链形成共识的方法、设备、计算机可读存储介质和计算机程序产品
US11210003B2 (en) Method, device and computer program product for restoring data based on replacing child node identifiers with parent node identifier
CN105530272A (zh) 一种应用数据的同步方法和装置
CN109492049B (zh) 用于区块链网络的数据处理、区块生成及同步方法
CN113326165B (zh) 基于区块链的数据处理方法、设备及计算机可读存储介质
CN116955355A (zh) 一种区块数据处理方法、装置及电子设备
CN112087530B (zh) 一种将数据上传至区块链系统的方法、装置、设备及介质
CN109672752A (zh) 数据同步的方法及节点
CN105871819A (zh) 传输控制方法及设备
CN109542860B (zh) 基于hdfs的业务数据管理方法、终端设备
US10853892B2 (en) Social networking relationships processing method, system, and storage medium
CN111400270B (zh) 一种基于区块链的文件授时的方法和装置
CN112182112A (zh) 基于区块链的分布式数据动态存储方法和电子设备
CN110807203B (zh) 数据处理方法、业务运营中心平台、系统以及存储介质
CN116846888A (zh) 区块链网络的共识处理方法、装置、设备及存储介质
CN110099117B (zh) 一种多版本dns区文件全量下发的方法和装置
CN110309191B (zh) 存储业务数据的方法、装置和系统
CN113610527A (zh) 联盟链的交易方法、装置、系统、终端设备及存储介质
CN111949738A (zh) 基于区块链的数据存储去重方法、终端设备和存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication