CN114089924A - 区块链账本数据存储系统及方法 - Google Patents

区块链账本数据存储系统及方法 Download PDF

Info

Publication number
CN114089924A
CN114089924A CN202111460149.4A CN202111460149A CN114089924A CN 114089924 A CN114089924 A CN 114089924A CN 202111460149 A CN202111460149 A CN 202111460149A CN 114089924 A CN114089924 A CN 114089924A
Authority
CN
China
Prior art keywords
data
account book
storage
book data
node
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
CN202111460149.4A
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.)
Neusoft Corp
Original Assignee
Neusoft Corp
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 Neusoft Corp filed Critical Neusoft Corp
Priority to CN202111460149.4A priority Critical patent/CN114089924A/zh
Publication of CN114089924A publication Critical patent/CN114089924A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]

Abstract

本公开涉及一种区块链账本数据存储系统及方法。该系统包括账本访问服务模块、账本数据存储服务模块、存储节点集群;账本访问服务模块用于接收区块链节点发起的账本数据存储请求,存储待存储账本数据的账本元信息,将待存储账本数据以及账本数据标识发送至账本数据存储服务模块;账本数据存储服务模块用于根据预设账本写入策略以及待存储账本数据生成账本写入请求,将账本写入请求发送至存储节点集群中的目标存储主节点;目标存储主节点用于根据账本写入请求存储待存储账本数据,并向账本数据存储服务模块反馈存储待存储账本数据的第一物理地址,以使账本数据存储服务模块存储账本数据标识与第一物理地址之间的映射关系。如此可存储海量账本数据。

Description

区块链账本数据存储系统及方法
技术领域
本公开涉及区块链技术领域,具体地,涉及一种区块链账本数据存储系统及方法。
背景技术
由于区块链具有去中心化、集体维护、高可信、可追溯、不可篡改、共识机制、智能合约等功能特性,所以区块链在越来越多的业务领域得以应用。区块链以链式结构存储账本数据,并以共识机制以及密码学等方式来保障账本数据的不可篡改,任何篡改操作都会导致整个账本不可用。简而言之,区块链账本只支持账本数据查询操作和账本数据写入操作,不支持账本数据修改操作和账本数据删除操作。由于区块链账本数据的不可删除,因此随着时间推移,区块链账本数据不断追加会导致账本数据“膨胀”隐患。
发明内容
本公开的目的是提供一种区块链账本数据存储系统及方法,以解决相关技术中存在的问题。
为了实现上述目的,本公开实施例提供一种区块链账本数据存储系统,所述系统包括账本访问服务模块、账本数据存储服务模块、以及存储节点集群;
所述账本访问服务模块用于,响应于接收到区块链节点发起的账本数据存储请求,存储待存储账本数据的账本元信息,并将所述待存储账本数据以及账本数据标识发送至所述账本数据存储服务模块,所述账本数据存储请求中携带所述待存储账本数据以及所述账本元信息,所述账本元信息包括所述账本数据标识,所述待存储账本数据是所述区块链节点中的第一区块对应的账本数据,所述账本元信息还包括用于表征所述第一区块与第二区块之间的链式关系的数据,所述第二区块是所述区块链节点中所述第一区块的上一区块;
所述账本数据存储服务模块用于,响应于接收到所述待存储账本数据以及所述账本数据标识,根据预设账本写入策略以及所述待存储账本数据生成账本写入请求,并将所述账本写入请求发送至所述存储节点集群中的目标存储主节点;
所述目标存储主节点用于,根据所述账本写入请求存储所述待存储账本数据,并在存储所述待存储账本数据之后向所述账本数据存储服务模块反馈存储所述待存储账本数据的第一物理地址,以使所述账本数据存储服务模块存储所述账本数据标识与所述第一物理地址之间的映射关系。
可选地,所述用于表征所述第一区块与第二区块之间的链式关系的数据,包括:
所述第一区块的哈希值和所述第二区块的哈希值。
可选地,所述账本数据存储服务模块还用于根据所述待存储账本数据的所述账本数据标识计算哈希值,并根据所述哈希值从所述存储节点集群中确定所述目标存储主节点。
可选地,所述预设账本写入策略包括表征文件副本个数的预设数量,所述账本写入请求中包括目标存储从节点列表;
所述账本数据存储服务模块还用于,从所述存储节点集群中的除所述目标存储主节点之外的其他存储节点中确定磁盘占用率最低的所述预设数量的目标存储从节点,以得到所述目标存储从节点列表;
所述目标存储主节点还用于,基于所述目标存储从节点列表向每一所述目标存储从节点发送副本文件存储请求,以使各所述目标存储从节点存储所述待存储账本数据的副本文件。
可选地,所述目标存储从节点用于,在存储所述待存储账本数据的副本文件之后,向所述目标存储主节点反馈存储所述待存储账本数据的副本文件的第二物理地址,以使所述目标存储主节点将所述第二物理地址反馈给所述账本数据存储服务模块;
所述账本数据存储服务模块还用于,存储所述账本数据标识与所述第二物理地址之间的映射关系。
可选地,所述账本数据存储服务模块还用于,监控各所述存储节点的磁盘占用率,以基于各所述存储节点的磁盘占用率的大小从所述存储节点集群中确定所述目标存储从节点列表。
可选地,所述账本访问服务模块还用于,接收所述区块链节点发起的用于查询目标账本数据的第一账本数据查询请求,在根据所述第一账本数据查询请求中携带的目标账本数据标识确定所述存储节点集群中存储有所述目标账本数据的情况下,将所述第一账本数据查询请求发送给所述账本数据存储服务模块;
所述账本数据存储服务模块还用于,响应于接收到所述第一账本数据查询请求,根据所述目标账本数据标识获取对应的目标物理地址,以基于所述目标物理地址获取到所述存储节点集群中存储的所述目标账本数据,并将所述目标账本数据反馈给所述区块链节点。
可选地,所述目标物理地址包括多个物理地址,所述账本数据存储服务模块还用于根据预设账本读取策略从所述多个物理地址中确定目标查询物理地址,并向所述目标查询物理地址对应的目标查询存储节点发送第二账本数据查询请求,以从所述目标查询存储节点查询到所述目标账本数据。
可选地,所述账本数据存储服务模块还用于:
监控各所述存储节点的磁盘剩余容量、总账本数据量、以及热点数据占比率;
针对任一所述存储节点,根据所述存储节点的所述磁盘剩余容量、所述磁盘占用率、所述总账本数据量、以及所述热点数据占比率确定是否对所述存储节点上存储的至少部分账本数据进行文件迁移。
可选地,所述账本数据存储服务模块还用于:
在确定对所述存储节点上存储的至少部分账本数据进行文件迁移的情况下,将所述存储节点确定为待迁移存储节点,并计算所述待迁移存储节点上待迁移账本数据的数据总量;
根据所述数据总量以及单个账本数据的数据量确定所述待迁移账本数据的个数;
从所述待迁移存储节点中确定对应所述个数的所述待迁移账本数据,以对所述待迁移账本数据进行文件迁移。
可选地,所述账本数据存储服务模块从所述待迁移存储节点中确定对应所述个数的所述待迁移账本数据,包括:
获取所述待迁移存储节点上各所述账本数据的被查询次数;
根据所述待迁移存储节点上各所述账本数据的被查询次数,计算平均查询次数;
针对所述待迁移存储节点上的每一所述账本数据,在确定所述账本数据对应的被查询次数少于所述平均查询次数的情况下,将所述账本数据确定为候选待迁移账本数据,以得到候选待迁移账本数据池;
从所述候选待迁移账本数据池中随机选择对应所述个数的所述待迁移账本数据。
可选地,所述账本数据存储服务模块还用于:
针对每一所述待迁移账本数据,从除所述待迁移存储节点之外的其他存储节点中选择目标迁移存储节点,并向所述目标迁移存储节点发送文件迁移请求;
所述目标迁移存储节点用于,存储所述文件迁移请求中携带的所述待迁移账本数据,并将存储所述待迁移账本数据的第三物理地址反馈给所述账本数据存储服务模块,以使所述账本数据存储服务模块更新所述待迁移账本数据的第一物理地址或第二物理地址。
可选地,所述账本数据存储服务模块针对每一所述待迁移账本数据,从除所述待迁移存储节点之外的其他存储节点中选择目标迁移存储节点的方式,包括:
根据所述待迁移账本数据的账本数据标识查询对应的目标第一物理地址和目标第二物理地址;
排除所述目标第一物理地址和目标第二物理地址对应的存储节点,得到第一候选存储节点池;
从所述第一候选存储节点池中选择符合预设条件的目标迁移存储节点。
可选地,所述账本数据存储服务模块针对每一所述待迁移账本数据,从除所述待迁移存储节点之外的其他存储节点中选择目标迁移存储节点的方式,包括:
根据所述待迁移账本数据的账本数据标识查询对应的目标第一物理地址和目标第二物理地址;
排除所述目标第一物理地址和所述目标第二物理地址对应的存储节点,得到第一候选存储节点池;
从所述第一候选存储节点池中排除其他待迁移存储节点,得到第二候选存储节点池;
从所述第二候选存储节点池中选择符合预设条件的目标迁移存储节点。
可选地,所述预设条件包括磁盘剩余内存大于预设内存、磁盘占用率小于预设占用率、热点数据占比率小于预设占比率、响应时间小于预设时长中的至少一者。
可选地,所述账本数据存储服务模块用于通过如下公式计算所述待迁移存储节点上待迁移账本数据的数据总量:
Figure BDA0003389604250000041
其中,β表征所述待迁移账本数据的数据总量,γ表征所述待迁移存储节点上的总账本数据量,n表征所述存储节点集群中的存储节点总数,γi表征第i个存储节点的总账本数据量,μ表征影响因子。
本公开实施例还提供一种区块链账本数据存储方法,所述方法应用于前述任一项所述的区块链账本数据存储系统,所述方法包括:
所述账本访问服务模块响应于接收到区块链节点发起的账本数据存储请求,存储待存储账本数据的账本元信息,并将所述待存储账本数据以及账本数据标识发送至所述账本数据存储服务模块,所述账本数据存储请求中携带所述待存储账本数据以及所述账本元信息,所述账本元信息包括所述账本数据标识,所述待存储账本数据是所述区块链节点中的第一区块对应的账本数据,所述账本元信息还包括用于表征所述第一区块与第二区块之间的链式关系的数据,所述第二区块是所述区块链节点中所述第一区块的上一区块;
所述账本数据存储服务模块响应于接收到所述待存储账本数据以及所述账本数据标识,根据预设账本写入策略以及所述待存储账本数据生成账本写入请求,并将所述账本写入请求发送至所述存储节点集群中的目标存储主节点;
所述目标存储主节点根据所述账本写入请求存储所述待存储账本数据,并在存储所述待存储账本数据之后向所述账本数据存储服务模块反馈存储所述待存储账本数据的第一物理地址,以使所述账本数据存储服务模块存储所述账本数据标识与所述第一物理地址之间的映射关系。
可选地,所述用于表征所述第一区块与第二区块之间的链式关系的数据,包括:
所述第一区块的哈希值和所述第二区块的哈希值。
可选地,所述方法还包括:
账本数据存储服务模块根据所述待存储账本数据的所述账本数据标识计算哈希值,并根据所述哈希值从所述存储节点集群中确定所述目标存储主节点。
可选地,所述预设账本写入策略包括表征文件副本个数的预设数量,所述账本写入请求中包括目标存储从节点列表;
所述方法还包括:
所述账本数据存储服务模块从所述存储节点集群中的除所述目标存储主节点之外的其他存储节点中确定磁盘占用率最低的所述预设数量的目标存储从节点,以得到所述目标存储从节点列表;
所述目标存储主节点基于所述目标存储从节点列表向每一所述目标存储从节点发送副本文件存储请求,以使各所述目标存储从节点存储所述待存储账本数据的副本文件。
可选地,所述方法还包括:
所述目标存储从节点在存储所述待存储账本数据的副本文件之后,向所述目标存储主节点反馈存储所述待存储账本数据的副本文件的第二物理地址,以使所述目标存储主节点将所述第二物理地址反馈给所述账本数据存储服务模块;
所述账本数据存储服务模块存储所述账本数据标识与所述第二物理地址之间的映射关系。
可选地,所述方法还包括:
所述账本数据存储服务模块监控各所述存储节点的磁盘占用率,以基于各所述存储节点的磁盘占用率的大小从所述存储节点集群中确定所述目标存储从节点列表。
可选地,所述方法还包括:
所述账本访问服务模块接收所述区块链节点发起的用于查询目标账本数据的第一账本数据查询请求,在根据所述第一账本数据查询请求中携带的目标账本数据标识确定所述存储节点集群中存储有所述目标账本数据的情况下,将所述第一账本数据查询请求发送给所述账本数据存储服务模块;
所述账本数据存储服务模块响应于接收到所述第一账本数据查询请求,根据所述目标账本数据标识获取对应的目标物理地址,以基于所述目标物理地址获取到所述存储节点集群中存储的所述目标账本数据,并将所述目标账本数据反馈给所述区块链节点。
可选地,所述目标物理地址包括多个物理地址,所述方法还包括:
所述账本数据存储服务模块根据预设账本读取策略从所述多个物理地址中确定目标查询物理地址,并向所述目标查询物理地址对应的目标查询存储节点发送第二账本数据查询请求,以从所述目标查询存储节点查询到所述目标账本数据。
可选地,所述方法还包括:
所述账本数据存储服务模块监控各所述存储节点的磁盘剩余容量、总账本数据量、以及热点数据占比率;并针对任一所述存储节点,根据所述存储节点的所述磁盘剩余容量、所述磁盘占用率、所述总账本数据量、以及所述热点数据占比率确定是否对所述存储节点上存储的至少部分账本数据进行文件迁移。
可选地,所述方法还包括:所述账本数据存储服务模块在确定对所述存储节点上存储的至少部分账本数据进行文件迁移的情况下,将所述存储节点确定为待迁移存储节点,并计算所述待迁移存储节点上待迁移账本数据的数据总量;根据所述数据总量以及单个账本数据的数据量确定所述待迁移账本数据的个数;从所述待迁移存储节点中确定对应所述个数的所述待迁移账本数据,以对所述待迁移账本数据进行文件迁移。
可选地,所述账本数据存储服务模块从所述待迁移存储节点中确定对应所述个数的所述待迁移账本数据,包括:
获取所述待迁移存储节点上各所述账本数据的被查询次数;
根据所述待迁移存储节点上各所述账本数据的被查询次数,计算平均查询次数;
针对所述待迁移存储节点上的每一所述账本数据,在确定所述账本数据对应的被查询次数少于所述平均查询次数的情况下,将所述账本数据确定为候选待迁移账本数据,以得到候选待迁移账本数据池;
从所述候选待迁移账本数据池中随机选择对应所述个数的所述待迁移账本数据。
可选地,所述方法还包括:
所述账本数据存储服务模块针对每一所述待迁移账本数据,从除所述待迁移存储节点之外的其他存储节点中选择目标迁移存储节点,并向所述目标迁移存储节点发送文件迁移请求;
所述目标迁移存储节点存储所述文件迁移请求中携带的所述待迁移账本数据,并将存储所述待迁移账本数据的第三物理地址反馈给所述账本数据存储服务模块,以使所述账本数据存储服务模块更新所述待迁移账本数据的第一物理地址或第二物理地址。
可选地,所述账本数据存储服务模块针对每一所述待迁移账本数据,从除所述待迁移存储节点之外的其他存储节点中选择目标迁移存储节点的方式,包括:
根据所述待迁移账本数据的账本数据标识查询对应的目标第一物理地址和目标第二物理地址;
排除所述目标第一物理地址和目标第二物理地址对应的存储节点,得到第一候选存储节点池;
从所述第一候选存储节点池中选择符合预设条件的目标迁移存储节点。
可选地,所述账本数据存储服务模块针对每一所述待迁移账本数据,从除所述待迁移存储节点之外的其他存储节点中选择目标迁移存储节点的方式,包括:
根据所述待迁移账本数据的账本数据标识查询对应的目标第一物理地址和目标第二物理地址;
排除所述目标第一物理地址和所述目标第二物理地址对应的存储节点,得到第一候选存储节点池;
从所述第一候选存储节点池中排除其他待迁移存储节点,得到第二候选存储节点池;
从所述第二候选存储节点池中选择符合预设条件的目标迁移存储节点。
可选地,所述预设条件包括磁盘剩余内存大于预设内存、磁盘占用率小于预设占用率、热点数据占比率小于预设占比率、响应时间小于预设时长中的至少一者。
可选地,所述账本数据存储服务模块通过如下公式计算所述待迁移存储节点上待迁移账本数据的数据总量:
Figure BDA0003389604250000081
其中,β表征所述待迁移账本数据的数据总量,γ表征所述待迁移存储节点上的总账本数据量,n表征所述存储节点集群中的存储节点总数,γi表征第i个存储节点的总账本数据量,μ表征影响因子。
采用上述技术方案,至少能够达到如下的有益技术效果:
在存储待存储账本数据的过程中,通过存储表征第一区块与第二区块之间的链式关系的数据,可以在逻辑上保障区块链账本数据的链式存储结构。通过存储账本数据标识与第一物理地址之间的映射关系,可在保障区块链账本数据的链式存储结构的基础上,实现将待存储账本数据存储在存储节点集群中的任一存储节点上的目的。因此,采用本公开的这种通过存储节点集群存储区块链账本数据的分布式存储方法,既可以保障区块链账本数据链式存储结构,又能够应对区块链账本数据膨胀的问题,达到存储海量的区块链账本数据的目的。而且还因可在存储节点集群中动态新增存储节点而使得存储系统具备动态扩容的能力。
本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
图1是根据本公开一示例性实施例示出的一种区块链账本数据存储系统的框图。
图2是根据本公开一示例性实施例示出的一种区块链以及区块链账本数据存储系统的框图。
图3是根据本公开一示例性实施例示出的一种区块链账本数据存储方法的流程图。
具体实施方式
以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。
图1是根据本公开一示例性实施例示出的一种区块链账本数据存储系统的框图,如图1所示,所述系统100包括账本访问服务模块110、账本数据存储服务模块120、以及存储节点集群130;
所述账本访问服务模块110用于,响应于接收到区块链节点发起的账本数据存储请求,存储待存储账本数据的账本元信息,并将所述待存储账本数据以及账本数据标识发送至所述账本数据存储服务模块120,所述账本数据存储请求中携带所述待存储账本数据以及所述账本元信息,所述账本元信息包括所述账本数据标识,所述待存储账本数据是所述区块链节点中的第一区块对应的账本数据,所述账本元信息还包括用于表征所述第一区块与第二区块之间的链式关系的数据,所述第二区块是所述区块链节点中所述第一区块的上一区块;
所述账本数据存储服务模块120用于,响应于接收到所述待存储账本数据以及所述账本数据标识,根据预设账本写入策略以及所述待存储账本数据生成账本写入请求,并将所述账本写入请求发送至所述存储节点集群130中的目标存储主节点;
所述目标存储主节点用于,根据所述账本写入请求存储所述待存储账本数据,并在存储所述待存储账本数据之后向所述账本数据存储服务模块120反馈存储所述待存储账本数据的第一物理地址,以使所述账本数据存储服务模块存储所述账本数据标识与所述第一物理地址之间的映射关系。
基于图2示出的区块链节点进行解释,区块链节点中存储有区块链,区块链中的一个区块对应一个区块链账本文件,一个区块链账本文件包括区块数据(即是指区块头和区块体中的数据)以及链下存储的相应的账本数据。
在本公开实施例中,一个区块链节点对应一个区块链账本数据存储系统100,该区块链账本数据存储系统100用于实现在链下存储该区块链节点上的所有区块对应的账本数据。其中,账本数据具体用于记录具体的账本内容(例如交易明细)。
当区块链节点需要对新产生的待存储账本数据进行存储时,可向账本访问服务模块110发起账本数据存储请求,该账本数据存储请求中包括待存储账本数据以及账本元信息。
账本访问服务模块110响应于接收到区块链节点发起的账本数据存储请求,可存储账本数据存储请求中携带的账本元信息。账本元信息可包括账本数据标识,例如账本数据标识为图2中所示的数据标识ID。
在一些实施方式中,账本元信息还可以包括用于表征第一区块与第二区块之间的链式关系的数据。例如,第一区块的账本数据哈希值和第二区块的账本数据哈希值;又例如,第一区块的账本ID和第二区块的账本ID;又例如,第一区块的区块哈希值和第二区块的区块哈希值,区块哈希值根据整个区块(即区块头和区块体)中的数据进行哈希计算得到。
在一些实施方式中,账本元信息还可以包括以下任意一种或多种信息:时间戳、账本通道名称、账本数据名称、账本数据量等。应当解释的是,通道(channel)是指,在企业级联盟链场景中,有时需要一种保密的交易机制,比如说几个参与(区块链)节点希望做的交易不向未参与节点公开,那么这几个参与节点形成一个隔离通道,该通道对应一个大账本,该大账本包括每一次保密交易生成的账本文件,每一个账本文件的账本数据中详细记录了该次保密交易的内容。
账本访问服务模块110存储待存储账本数据的账本元信息的同时或之后,可将待存储账本数据以及账本数据标识发送至账本数据存储服务模块120。
账本数据存储服务模块120响应于接收到待存储账本数据以及账本数据标识,根据预设账本写入策略以及待存储账本数据生成账本写入请求,并将账本写入请求发送至存储节点集群130中的目标存储主节点。其中,目标存储主节点是账本数据存储服务模块120基于预设账本写入策略而确定的。
目标存储主节点响应于接收到账本写入请求,根据账本写入请求存储待存储账本数据,并在成功存储待存储账本数据之后向账本数据存储服务模块120反馈存储待存储账本数据的第一物理地址。其中,第一物理地址包括以下一种或多种信息:目标存储主节点的(主机)名称、存储待存储账本数据的文件存储地址以及偏移量等。此处需说明的是,账本数据存储在任意存储器上的物理地址均由段地址和偏移地址两部分组成,本公开中文件存储地址表征的是段地址,偏移量表征的是偏移地址。
在一些实施方式中,第一物理地址还可以包括存储账本数据的具体起始地址和结束地址。
账本数据存储服务模块120接收到目标存储主节点反馈的第一物理地址之后,将待存储账本数据的账本数据标识与第一物理地址进行关联存储。
采用上述方式,在存储待存储账本数据的过程中,通过存储表征第一区块与第二区块之间的链式关系的数据,可以在逻辑上保障区块链账本数据的链式存储结构。通过存储账本数据标识与第一物理地址之间的映射关系,可在保障区块链账本数据的链式存储结构的基础上,实现将待存储账本数据存储在存储节点集群中的任一存储节点上的目的。因此,采用本公开的这种通过存储节点集群存储区块链账本数据的分布式存储方法,既可以保障区块链账本数据链式存储结构,又能够应对区块链账本数据膨胀的问题,达到存储海量的区块链账本数据的目的。而且还因可在存储节点集群中动态新增存储节点而使得存储系统具备动态扩容的能力。
在一些实施方式中,所述用于表征所述第一区块与第二区块之间的链式关系的数据,包括:所述第一区块的哈希值和所述第二区块的哈希值。
若用于表征第一区块与第二区块之间的链式关系的数据为第一区块的哈希值(即图2中所示的账本数据hash)和第二区块的哈希值。那么在账本数据读取场景下,可在从存储节点集群中读取到第一区块对应的账本数据的情况下,根据第一区块的哈希值对读取到的账本数据的正确/完整性进行校验。如此,可在保障区块链账本数据的链式存储结构的基础上,还可以保障存储节点集群中存储的账本数据不会被篡改,提升了分布式账本数据存储的安全性。
在一些实施方式中,所述账本数据存储服务模块120还用于根据所述待存储账本数据的所述账本数据标识计算哈希值,并根据所述哈希值从所述存储节点集群中确定所述目标存储主节点。
在具体实施时,可以根据哈希算法对账本数据标识进行计算得到相应地哈希值。再用哈希值除以存储节点集群中的存储节点总数,并取余数值,该余数值对应的存储节点即为目标存储主节点。示例地,假设根据待存储账本数据的账本数据标识计算得到的哈希值为15,存储节点集群包括4个存储节点,且各存储节点的编号分别为0、1、2、3。那么哈希值15除以4取余数为3。如此可将编号为3的存储节点确定为目标存储主节点。采用这种方式,由于根据哈希值除以存储节点总数S后所得到的余数值不大于存储节点总数S,所以余数值的取值范围为[0,S-1],并且,在从0开始对存储节点集群中的各存储节点进行编码的情况下,存储节点的编码范围也为[0,S-1]。因此,这种方式能够针对任意哈希值(即无穷种哈希值中的任一种)计算并确定唯一一个对应的存储节点编号,而不用限制该任意哈希值的取值范围,即不用限制账本数据标识的取值范围,相应地,即不限制账本数据的数量。
此外,采用这种方式,还能将多个待存储账本数据较为均匀的分配到各个存储节点中进行存储,以使各存储节点负载均衡。例如,假设有三个存储节点0、1、2,三个待存储账本数据a、b、c,且该三个待存储账本数据对应的哈希值依次为1、2、3。那么,采用上述确定目标存储主节点的方式,可将存储节点1作为待存储账本数据a的目标存储主节点。将存储节点2作为待存储账本数据b的目标存储主节点。将存储节点0作为待存储账本数据c的目标存储主节点。
此处需要解释的是,哈希算法(又称摘要算法Digest),作用是对任意一组输入数据进行计算,得到一个固定长度的输出值。
在一些实施方式中,所述预设账本写入策略包括表征文件副本个数的预设数量,所述账本写入请求中包括目标存储从节点列表;
所述账本数据存储服务模块120还用于,从所述存储节点集群130中的除所述目标存储主节点之外的其他存储节点中确定磁盘占用率最低的所述预设数量的目标存储从节点,以得到所述目标存储从节点列表;
所述目标存储主节点还用于,基于所述目标存储从节点列表向每一所述目标存储从节点发送副本文件存储请求,以使各所述目标存储从节点存储所述待存储账本数据的副本文件。
举例来说,假设预设数量的值为2,并假设存储节点集群为由存储节点A、存储节点B、存储节点C、存储节点D、存储节点E、存储节点F组成的集群。若账本数据存储服务模块120将存储节点B确定为目标存储主节点。那么,除目标存储主节点B之外的其他存储节点包括存储节点A、存储节点C、存储节点D、存储节点E、存储节点F。
若存储节点A、存储节点C、存储节点D、存储节点E、存储节点F的磁盘占用率依次降低,那么从存储节点A、存储节点C、存储节点D、存储节点E、存储节点F中确定磁盘占用率最低的2个目标存储从节点分别为存储节点E和存储节点F。即目标存储从节点列表包括存储节点E和存储节点F。
目标存储主节点(如存储节点B)向每一目标存储从节点(如存储节点E、存储节点F)发送副本文件存储请求,副本文件存储请求包括待存储账本数据的副本文件。目标存储从节点(存储节点E、存储节点F)接收副本文件存储请求,并存储待存储账本数据的副本文件。其中,需说明的是副本文件是指对源文件进行复制粘贴后所得到的文本文件。
采用这种账本数据分布式备份存储的方式,可保障账本数据的数据安全,避免账本数据丢失。例如,可以避免目标存储主节点因故障或掉线而导致的无法读取到目标存储主节点中存储的账本数据的问题。
在一些实施方式中,账本写入请求中还可以包括主本文件与副本文件的写入方式,写入方式为可以为同步写入或异步写入方式中的一种。相应地,副本文件存储请求中也可以包括主本文件与副本文件的写入方式。写入方式可在预设账本写入策略中(基于不同场景)预先设置。值得说明的是,主本文件是指存储在主节点的账本数据,副本文件为存储在从节点的账本数据。
在主本文件与副本文件的写入方式为同步写入方式的情况下,需要在目标存储主节点和目标存储从节点均完成数据写入后,向区块链节点反馈存储成功的状态信息。如此可实现强事务一致性。其中,强事务一致性是指多个事务(如主本文件存储事务和副本文件存储事务)必须是使数据库从一个一致性状态(如未存储状态)变到另一个一致性状态(如存储成功状态)。
在主本文件与副本文件的写入方式为异步写入方式的情况下,在目标存储主节点成功写入数据后,即可向区块链节点反馈存储成功的状态信息,无需等待目标存储从节点完成存储副本文件的过程。
在一些实施方式中,所述账本数据存储服务模块120还用于,监控各所述存储节点的磁盘占用率,以基于各所述存储节点之间的磁盘占用率的大小关系从所述存储节点集群中确定所述目标存储从节点列表。
在一些实施方式中,账本数据存储服务模块120可以周期性向各个存储节点发送“心跳”信号,“心跳”信号用于询问存储节点当前的磁盘占用率。存储节点接收到“心跳”信号后,可向账本数据存储服务模块120反馈自身当前的磁盘占用率。如此可实现账本数据存储服务模块120监控各存储节点的磁盘占用率的目的。
在一些实施方式中,所述目标存储从节点用于,在存储所述待存储账本数据的副本文件之后,向所述目标存储主节点反馈存储所述待存储账本数据的副本文件的第二物理地址,以使所述目标存储主节点将所述第二物理地址反馈给所述账本数据存储服务模块120;所述账本数据存储服务模块还120用于,存储所述账本数据标识与所述第二物理地址之间的映射关系。
基于前述实施例中存储节点B为目标存储主节点、存储节点E为目标存储从节点来举例说明,存储节点E存储待存储账本数据的副本文件之后,可将存储待存储账本数据的副本文件的第二物理地址反馈给存储节点B,第二物理地址可以包括存储节点E的主机名称、存储副本文件的文件存储地址以及偏移量等。存储节点B接收到存储节点E反馈的第二物理地址之后,将第二物理地址反馈给账本数据存储服务模块120。以便于账本数据存储服务模块120存储账本数据标识与第二物理地址之间的映射关系。
如此,账本数据存储服务模块120既可以存储待存储账本数据的账本数据标识与第一物理地址的映射关系,又可以存储该账本数据标识和第二物理地址的映射关系。通过存储的映射关系,可在账本数据查询场景下,基于账本数据标识查询到与该账本数据标识对应的第一物理地址和/或第二物理地址,从而根据第一物理地址或第二物理地址均可以查询与该账本数据标识对应的账本数据。
在一些实施方式中,所述账本访问服务模块110还用于,接收所述区块链节点发起的用于查询目标账本数据的第一账本数据查询请求,在根据所述第一账本数据查询请求中携带的目标账本数据标识确定所述存储节点集群中存储有所述目标账本数据的情况下,将所述第一账本数据查询请求发送给所述账本数据存储服务模块;所述账本数据存储服务模块120还用于,响应于接收到所述第一账本数据查询请求,根据所述目标账本数据标识获取对应的目标物理地址,以基于所述目标物理地址获取到所述存储节点集群中存储的所述目标账本数据,并将所述目标账本数据反馈给所述区块链节点。
举例来说,在账本数据查询/读取场景下,区块链节点可向账本访问服务模块110发起用于查询/读取目标账本数据的第一账本数据查询请求,该第一账本数据查询请求中可携带目标账本数据标识。
账本访问服务模块110响应于接收到区块链节点发起的第一账本数据查询请求,根据第一账本数据查询请求中携带的目标账本数据标识、以及所有已存储账本数据的账本元信息确定存储节点集群中是否存储有目标账本数据。并在确定存储节点集群中存储有目标账本数据的情况下,将第一账本数据查询请求发送给账本数据存储服务模块120。在确定存储节点集群中未存储有目标账本数据的情况下,向区块链节点反馈没有对应账本数据的结果。
账本数据存储服务模块120在接收到第一账本数据查询请求的情况下,根据第一账本数据查询请求中携带的目标账本数据标识、各账本数据标识与第一物理地址和第二物理地址之间的映射关系获取对应的目标物理地址,以从目标物理地址对应的存储节点中获取到目标账本数据,从而将目标账本数据通过账本访问服务模块110反馈给区块链节点。
采用这种方式,在读取账本数据的场景下,根据目标账本数据标识先确定存储节点集群中是否存储有目标账本数据。若不存在,则直接向区块链节点反馈不存在相应账本数据的信息。若存在,则进一步从账本数据存储服务模块120中获取存储该目标账本数据的目标物理地址,并基于目标物理地址读取到目标账本数据。
由于账本数据存储服务模块120中可以存储每一账本数据的账本数据标识与第一物理地址和第二物理地址的映射关系。因此,在读取账本数据的场景中,从账本数据存储服务模块120获取到的目标物理地址可能为存储该账本数据的存储主节点所对应的第一物理地址,也可能为存储该账本数据的副本文件的存储从节点所对应的第二物理地址。
因此,在一些实施方式中,所述目标物理地址包括多个物理地址,所述账本数据存储服务模块120还用于根据预设账本读取策略从所述多个物理地址中确定目标查询物理地址,并向所述目标查询物理地址对应的目标查询存储节点发送第二账本数据查询请求,以从所述目标查询存储节点查询到所述目标账本数据。
其中,预设账本读取策略可以包括多个不同优先级的用于筛选查询地址的选择条件。根据优先级从高到低方向,依次对照相应的选择条件进行选择,以从多个目标物理地址中筛选得到一个目标查询物理地址。
例如,假设存储目标账本数据的多个目标物理地址分别对应存储节点B、存储节点E和存储节点F。若第一优先级的选择条件为cpu占用率最低。那么在存储节点B、存储节点E和存储节点F的cpu占用率依次降低的情况下,可确定存储节点F所对应的目标物理地址为目标查询物理地址。
而在存储节点B、存储节点E和存储节点F的cpu占用率均相同的情况下,需进一步根据第二优先级的选择条件进行筛选。若第二优先级的选择条件为磁盘IO占用率(可理解为磁盘的繁忙程度)最低。那么在存储节点B、存储节点E和存储节点F的磁盘IO占用率依次降低的情况下,可将存储节点F对应的目标物理地址确定为目标查询物理地址。
而在存储节点E和存储节点F的磁盘IO占用率相同且最小的情况下,需再进一步根据第三优先级的选择条件进行筛选。若第三优先级的选择条件为内存剩余空间容量最大,那么在存储节点E和存储节点F的内存剩余空间容量依次降低的情况下,可将存储节点E对应的目标物理地址确定为目标查询物理地址。
应当说明的是,用于筛选查询地址的选择条件的数量、优先级高低、条件内容可根据实际需求进行设置,而不应限制于上述举例。
在一些实施方式中,所述账本数据存储服务模块120还用于:
监控各所述存储节点的磁盘剩余容量、总账本数据量、以及热点数据占比率;针对任一所述存储节点,根据所述存储节点的所述磁盘剩余容量、所述磁盘占用率、所述总账本数据量、以及所述热点数据占比率确定是否对所述存储节点上存储的至少部分账本数据进行文件迁移。
一般情况下,在存储节点上存储的总账本数据量大于根据所有存储节点的总账本数据量计算的总账本数据量均值的情况下,说明该存储节点上存储的数据量与分布式存储系统中的一些存储节点存储的数据量不均衡。在该存储节点上存储的数据量与分布式存储系统中的一些存储节点存储的数据量不均衡的情况下,访问该存储节点上存储的账本数据的负载与访问其他存储节点上存储的账本数据的负载也可能不均衡。当然,在该存储节点上存储的数据量与分布式存储系统中的一些存储节点存储的数据量不均衡的情况下,访问该存储节点上存储的账本数据的负载与访问其他存储节点上存储的账本数据的负载也可能是均衡的,因为各账本数据被访问、查询的次数是可以不一样的,所以因访问各账本数据而对存储节点造成的负载可以是不一样的。
因此,可以针对任一存储节点,在存储节点上存储的总账本数据量大于多个存储节点的总账本数据量均值的情况下,进一步根据存储节点的磁盘剩余内存、磁盘占用率、总账本数据量、以及热点数据占比率中的至少一种信息判断是否需要对存储节点上存储的至少部分账本数据进行文件迁移。
值得解释的是,任一存储节点的总账本数据量是指该存储节点已经存储的所有账本数据的数据总量。
热点数据(redis)是指被引用(即访问/读取/查询)的次数大于预设次数的数据。
热点数据占比率是指热点数据的数据总量与总账本数据量的比值。
在一些实施方式中,可通过如下方式确定各个账本数据是否为热点账本数据:
为每一账本数据设置热点变量参数,若该账本数据在前一单位时长(如60秒)内被引用,则该账本数据的热点变量参数增大第一预设值(如第一预设值为10、5、或者1等),若该账本数据在前一单位时长内未被引用,则该账本数据的热点变量参数减小第二预设值(如第二预设值为10、5、或者1等)。第一预设值和第二预设值可以相同,亦可以不相同。在该账本数据的热点变量参数大于预设阈值(如预设阈值为50)的情况下,该账本数据可被确定为热点数据。
在一些实施方式中,所述根据所述存储节点的所述磁盘剩余容量、所述磁盘占用率、所述总账本数据量、以及所述热点数据占比率确定是否对所述存储节点上存储的至少部分账本数据进行文件迁移,包括:
将所述磁盘剩余容量、所述磁盘占用率、所述总账本数据量、以及所述热点数据占比率输入训练完成的支持向量机,得到所述支持向量机输出的表征是否进行文件迁移的结果。
其中,支持向量机(Support Vector Machine,SVM)是一种按监督学习方式训练得到的分类器。训练样本包括输入样本和输出样本,输入样本包括磁盘剩余容量样本、磁盘占用率样本、总账本数据量样本、以及热点数据占比率样本。输出样本为与输入样本对应的表征是否进行文件迁移的样本。
为了便于本领域普通技术人员更加容易理解支持向量机的作用,下面对支持向量机的原理进行简单解释:
由于支持向量机是对数据进行二元分类的广义线性分类器,所以其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)。因此,首先可定义决策边界0=wTX+b=w1x1+w2x2+w3x3+w4x4+b,其中,1表征磁盘剩余容量,2表征磁盘占用率、x3表征总账本数据量、x4表征热点数据占比率,w1、w2、w3、w4、b为训练支持向量机的过程中需要求解的参数。训练支持向量机的目的即是为了求得最优的一组w1、w2、w3、w4、b。
值得解释的是,决策边界可理解为空间问题中的区域,用于将支持向量机的输出标签划分为两个集合,一个集合表征进行文件迁移,另一个集合表征不进行文件迁移。即表征进行文件迁移时:wTX+b>0,yi>0。表征不进行文件迁移时wTX+b<0,yi<0。yi为输出标签。进一步地,将wTX+b>0和yi>0相乘,或者将wTX+b<0和yi<0相乘,均可得到y(wTX+b)>0。
为了找到输出标签到决策边界的最远垂直距离,即为了求解变量X=(x1、x2、x3、x4)到决策边界的最远距离
Figure BDA0003389604250000171
其中,
Figure BDA0003389604250000172
可基于导数法求最大值原理,将对
Figure BDA0003389604250000173
求最大值问题转换为对
Figure BDA0003389604250000181
求最小导数值的问题即:
Figure BDA0003389604250000182
进一步的,采用拉格朗日乘子法(又称为拉格朗日乘数法)求该公式的最小值,构造拉格朗日公式如下:
Figure BDA0003389604250000183
其中,
Figure BDA0003389604250000184
μi是拉格朗日乘子,用于将约束条件函数与原函数联系到一起。值得解释的是,拉格朗日乘子法是一种求原函数f(x1,x2,...)在约束条件函数g(x1,x2,...)=0的约束下的极值的方法。
进一步地,使用高斯核函数替换(xixj),即
Figure BDA0003389604250000185
δ表征标准差,在本公开的实施例中δ=2,n=4。
Figure BDA0003389604250000186
带入公式
Figure BDA0003389604250000187
得到
Figure BDA0003389604250000188
进一步地,采用SMO算法(Sequential Minmal Optimization,一种序列最小化算法)求μ1、μ2、μ3、μ4的最优解如下:
Figure BDA0003389604250000189
Figure BDA00033896042500001810
Figure BDA00033896042500001811
Figure BDA00033896042500001812
带入|yi|=1、x1、x2、x3、x4的值、
Figure BDA00033896042500001813
后,计算出μ1、μ2、μ3、μ4、y1、y2、y3、y4的值。再使用KKT条件(Karush–Kuhn–Tucker conditions,一种解决最优化问题的方法,与拉格朗日乘子相关),确定各需要求解的参数为:
w1=μ1x1y1
w2=μ2x2y2
w3=μ3x3y3
w4=μ4x4y4
Figure BDA0003389604250000191
在求得最优的一组w1、w2、w3、w4之后,得到的训练完成的支持向量机的函数可以表征为:
Figure BDA0003389604250000192
此处需说明的是,在一些场景中,存储节点集群中可能存在某个存储节点的负载小、而另一个存储节点的负载大的现象,例如某个存储节点中的账本数据被频繁引用,而另一个存储节点中的账本数据被引用的次数较少的现象,这种现象表征该两个存储节点的负载不均衡。因此,为了使存储节点集群中各个存储节点之间的负载相对均衡,需平衡各个存储节点的负载。
而在平衡各个存储节点的负载之前,需判断存储节点的负载高低。采用本公开的上述方式,针对任一存储节点,根据该存储节点的磁盘剩余容量、磁盘占用率、总账本数据量、以及热点数据占比率可以判断该存储节点的负载高低。在确定该存储节点的负载大的情况下,可对该存储节点进行文件迁移处理,以降低该存储节点的负载。由此,采用本公开的上述方式能够使存储节点集群中的各个存储节点之间更加的负载均衡。
可选地,所述账本数据存储服务模块120还用于执行以下步骤:
在确定对所述存储节点上存储的至少部分账本数据进行文件迁移的情况下,将所述存储节点确定为待迁移存储节点,并计算所述待迁移存储节点上待迁移账本数据的数据总量;根据所述数据总量以及单个账本数据的数据量确定所述待迁移账本数据的个数;从所述待迁移存储节点中确定对应所述个数的所述待迁移账本数据,以对所述待迁移账本数据进行文件迁移。
一种实施方式,所述账本数据存储服务模块120用于通过如下公式计算所述待迁移存储节点上待迁移账本数据的数据总量:
Figure BDA0003389604250000193
其中,β表征所述待迁移账本数据的数据总量,γ表征所述待迁移存储节点上的总账本数据量,n表征所述存储节点集群中的存储节点总数,γi表征第i个存储节点的总账本数据量,μ表征影响因子。
可选地,μ=1.68。
示例地,假设存储节点集群为由存储节点A、存储节点B、以及存储节点C组成的集群。存储节点A存储有40GB的账本数据,存储节点B存储有20GB的账本数据,存储节点C存储有120GB的账本数据。在确定存储节点C为待迁移存储节点的情况下,通过公式
Figure BDA0003389604250000201
计算得到待迁移账本数据的数据总量为19.2GB(即19.2×1024×1024×1024字节)。
在计算得到待迁移存储节点上待迁移账本数据的数据总量之后,可以根据数据总量以及单个账本数据的数据量确定待迁移账本数据的个数。应当说明的是,单个账本数据的数据量是预先设定的,可以为64M、128M等。
举例来说,假设单个账本数据的数据量为64M(即64×1024×1024字节),那么可通过如下公式计算得到待迁移账本数据的个数k:
Figure BDA0003389604250000202
应当说明的是,在一些实施方式中,还可以根据数据总量、单个账本数据的数据量、以及控制参数确定待迁移账本数据的个数,控制参数为正整数。例如,假设单个账本数据的数据量为64M(即64×1024×1024字节)、控制参数为2,那么可通过如下公式计算得到待迁移账本数据的个数k:
Figure BDA0003389604250000203
或者,
Figure BDA0003389604250000204
[]为取整运算符。
在确定待迁移账本数据的个数之后,可从待迁移存储节点中确定对应个数的待迁移账本数据,并对待迁移账本数据进行文件迁移。
在一些实施方式中,从待迁移存储节点中确定对应个数的待迁移账本数据的方式可以包括:从待迁移存储节点中随机确定对应个数的待迁移账本数据。
在一些实施方式中,所述账本数据存储服务模块120从所述待迁移存储节点中确定对应所述个数的所述待迁移账本数据,可以包括以下步骤:
获取所述待迁移存储节点上各所述账本数据的被查询次数;根据所述待迁移存储节点上各所述账本数据的被查询次数,计算平均查询次数;针对所述待迁移存储节点上的每一所述账本数据,在确定所述账本数据对应的被查询次数少于所述平均查询次数的情况下,将所述账本数据确定为候选待迁移账本数据,以得到候选待迁移账本数据池;从所述候选待迁移账本数据池中随机选择对应所述个数的所述待迁移账本数据。
示例地,假设待迁移存储节点上有账本数据a、账本数据b、账本数据c、账本数据d。账本数据a的历史被查询次数为10次,账本数据b的历史被查询次数为15次,账本数据c的历史被查询次数为20次,账本数据d的历史被查询次数为25次。那么平均查询次数为(10+15+20+25)/4=17.5。由于账本数据a、账本数据b的被查询次数均小于17.5,因此可将账本数据a、账本数据b确定为候选待迁移账本数据,得到候选待迁移账本数据池包括账本数据a、账本数据b。
进一步地,在确定候选待迁移账本数据池包括账本数据a、账本数据b的情况下,可从候选待迁移账本数据池中随机选择对应个数的待迁移账本数据。示例地,假设个数为1,那么可将账本数据a或者账本数据b确定为待迁移账本数据。
在一些实施方式中,可基于各个候选待迁移账本数据的被查询次数的大小,从候选待迁移账本数据池中选择对应个数的被查询次数最小的待迁移账本数据。示例地,假设个数为1,在候选待迁移账本数据a的被查询次数为10,且候选待迁移账本数据b的被查询次数为15的情况下,由于10小于15,所以可将候选待迁移账本数据a确定为待迁移账本数据。
采用这种方式,将被查询次数小于平均查询次数的账本数据确定为候选待迁移账本数据,可尽量保证热点数据不被迁移,以避免热点数据在被迁移时导致的数据访问故障。例如热点数据在被迁移时存在的暂时无法访问的故障。
可选地,所述账本数据存储服务模块120还用于执行以下步骤:
针对每一所述待迁移账本数据,从除所述待迁移存储节点之外的其他存储节点中选择目标迁移存储节点,并向所述目标迁移存储节点发送文件迁移请求;所述目标迁移存储节点用于,存储所述文件迁移请求中携带的所述待迁移账本数据,并将存储所述待迁移账本数据的第三物理地址反馈给所述账本数据存储服务模块,以使所述账本数据存储服务模块更新所述待迁移账本数据的第一物理地址或第二物理地址。
示例地,假设存储节点集群为由存储节点A、存储节点B、存储节点C、存储节点D、存储节点E、存储节点F组成的集群。若账本数据存储服务模块120将存储节点B确定为待迁移存储节点。那么,除待迁移存储节点B之外的其他存储节点包括存储节点A、存储节点C、存储节点D、存储节点E、存储节点F。针对每一待迁移账本数据,可从存储节点A、存储节点C、存储节点D、存储节点E、存储节点F中选择一个目标迁移存储节点。
由于待迁移账本数据可能为主本文件亦可能为副本文件,因此,在对该待迁移账本数据进行文件迁移之后,需将存储该待迁移账本数据的第三物理地址反馈给账本数据存储服务模块120,以使账本数据存储服务模块120相应更新该待迁移账本数据的第一物理地址或第二物理地址。
在一些实施方式中,所述账本数据存储服务模块120针对每一所述待迁移账本数据,从除所述待迁移存储节点之外的其他存储节点中选择目标迁移存储节点的方式,可以包括以下步骤:
根据所述待迁移账本数据的账本数据标识查询对应的目标第一物理地址和目标第二物理地址;排除所述目标第一物理地址和目标第二物理地址对应的存储节点,得到第一候选存储节点池;从所述第一候选存储节点池中选择符合预设条件的目标迁移存储节点。
应当说明的是,同一账本数据的主本文件和副本文件,或者同一账本数据的副本文件和副本文件不应存储在同一存储节点。若同一账本数据的主本文件和副本文件,或者同一账本数据的副本文件和副本文件存储在一个存储节点,则不仅浪费该存储节点的存储资源,还在该存储节点宕机后该账本数据的主本文件和/或副本文件无法被引用。
针对每一待迁移账本数据,为了避免将相同账本数据(即同一账本数据的主本文件和副本文件,或者同一账本数据的副本文件和副本文件)存储在同一存储节点。可根据该待迁移账本数据的账本数据标识从账本数据存储服务模块120中存储的账本数据标识与第一物理地址、账本数据标识与第二物理地址的映射关系中查询对应的目标第一物理地址和目标第二物理地址。通过排除目标第一物理地址和目标第二物理地址对应的存储节点,可得到第一候选存储节点池。
在确定第一候选存储节点池之后,可从第一候选存储节点池中选择符合预设条件的目标迁移存储节点。
在一些实施方式中,所述预设条件包括磁盘剩余内存大于预设内存、磁盘占用率小于预设占用率、热点数据占比率小于预设占比率、响应时间小于预设时长中的至少一者。
示例地,预设内存可以为10G,预设占用率可以为65%,预设占比率可以为50%,预设时长可以为5秒。针对第一候选存储节点池中的每一候选存储节点,在该候选存储节点的磁盘剩余内存大于10G、磁盘占用率小于65%、热点数据占比率小于50%、响应时间小于5秒的情况下,可将该候选存储节点确定为目标迁移存储节点。
值得说明的是,响应时间是指存储节点接收到需求方的请求信息的时间与该存储节点将请求的目标信息反馈给需求方的时间的差值。响应时间用于评估存储节点的性能高低。
为了避免将待迁移账本数据迁移到其他待迁移存储节点,所述账本数据存储服务模块120针对每一所述待迁移账本数据,从除所述待迁移存储节点之外的其他存储节点中选择目标迁移存储节点的方式,可以包括:
根据所述待迁移账本数据的账本数据标识查询对应的目标第一物理地址和目标第二物理地址;
排除所述目标第一物理地址和所述目标第二物理地址对应的存储节点,得到第一候选存储节点池;
从所述第一候选存储节点池中排除其他待迁移存储节点,得到第二候选存储节点池;
从所述第二候选存储节点池中选择符合预设条件的目标迁移存储节点。
示例地,假设存储节点集群为由存储节点A、存储节点B、存储节点C、存储节点D、存储节点E、存储节点F组成的集群。若账本数据存储服务模块120将存储节点B和E确定为待迁移存储节点。在针对待迁移存储节点B上的待迁移账本数据a进行文件迁移时,根据待迁移账本数据a的账本元信息查询对应的目标第一物理地址和目标第二物理地址。假设目标第一物理地址对应存储节点B、且目标第二物理地址对应存储节点F。那么排除存储节点B和存储节点F之后,得到的第一候选存储节点池包括存储节点A、存储节点C、存储节点D、存储节点E。进一步地,从第一候选存储节点池中排除其他待迁移存储节点E,得到第二候选存储节点池包括存储节点A、存储节点C、存储节点D。进而可从存储节点A、存储节点C、存储节点D中选择符合预设条件的目标迁移存储节点来存储待迁移账本数据a。
基于同一发明构思,本公开实施例还提供一种区块链账本数据存储方法,所述方法应用于前述实施例中任一项所述的区块链账本数据存储系统,如图3所示,所述方法包括:
S11、所述账本访问服务模块响应于接收到区块链节点发起的账本数据存储请求,存储待存储账本数据的账本元信息,并将所述待存储账本数据以及账本数据标识发送至所述账本数据存储服务模块,所述账本数据存储请求中携带所述待存储账本数据以及所述账本元信息,所述账本元信息包括所述账本数据标识,所述待存储账本数据是所述区块链节点中的第一区块对应的账本数据,所述账本元信息还包括用于表征所述第一区块与第二区块之间的链式关系的数据,所述第二区块是所述区块链节点中所述第一区块的上一区块;
S12、所述账本数据存储服务模块响应于接收到所述待存储账本数据以及所述账本数据标识,根据预设账本写入策略以及所述待存储账本数据生成账本写入请求,并将所述账本写入请求发送至所述存储节点集群中的目标存储主节点;
S13、所述目标存储主节点根据所述账本写入请求存储所述待存储账本数据,并在存储所述待存储账本数据之后向所述账本数据存储服务模块反馈存储所述待存储账本数据的第一物理地址,以使所述账本数据存储服务模块存储所述账本数据标识与所述第一物理地址之间的映射关系。
采用这种方法,在存储待存储账本数据的过程中,通过存储表征第一区块与第二区块之间的链式关系的数据,可以在逻辑上保障区块链账本数据的链式存储结构。通过存储账本数据标识与第一物理地址之间的映射关系,可在保障区块链账本数据的链式存储结构的基础上,实现将待存储账本数据存储在存储节点集群中的任一存储节点上的目的。因此,采用本公开的这种通过存储节点集群存储区块链账本数据的分布式存储方法,既可以保障区块链账本数据链式存储结构,又能够应对区块链账本数据膨胀的问题,达到存储海量的区块链账本数据的目的。而且还因可在存储节点集群中动态新增存储节点而使得存储系统具备动态扩容的能力。
可选地,所述用于表征所述第一区块与第二区块之间的链式关系的数据,包括:
所述第一区块的哈希值和所述第二区块的哈希值。
可选地,所述方法还包括:
账本数据存储服务模块根据所述待存储账本数据的所述账本数据标识计算哈希值,并根据所述哈希值从所述存储节点集群中确定所述目标存储主节点。
可选地,所述预设账本写入策略包括表征文件副本个数的预设数量,所述账本写入请求中包括目标存储从节点列表;
所述方法还包括:
所述账本数据存储服务模块从所述存储节点集群中的除所述目标存储主节点之外的其他存储节点中确定磁盘占用率最低的所述预设数量的目标存储从节点,以得到所述目标存储从节点列表;
所述目标存储主节点基于所述目标存储从节点列表向每一所述目标存储从节点发送副本文件存储请求,以使各所述目标存储从节点存储所述待存储账本数据的副本文件。
可选地,所述方法还包括:
所述目标存储从节点在存储所述待存储账本数据的副本文件之后,向所述目标存储主节点反馈存储所述待存储账本数据的副本文件的第二物理地址,以使所述目标存储主节点将所述第二物理地址反馈给所述账本数据存储服务模块;
所述账本数据存储服务模块存储所述账本数据标识与所述第二物理地址之间的映射关系。
可选地,所述方法还包括:
所述账本数据存储服务模块监控各所述存储节点的磁盘占用率,以基于各所述存储节点的磁盘占用率的大小从所述存储节点集群中确定所述目标存储从节点列表。
可选地,所述方法还包括:
所述账本访问服务模块接收所述区块链节点发起的用于查询目标账本数据的第一账本数据查询请求,在根据所述第一账本数据查询请求中携带的目标账本数据标识确定所述存储节点集群中存储有所述目标账本数据的情况下,将所述第一账本数据查询请求发送给所述账本数据存储服务模块;
所述账本数据存储服务模块响应于接收到所述第一账本数据查询请求,根据所述目标账本数据标识获取对应的目标物理地址,以基于所述目标物理地址获取到所述存储节点集群中存储的所述目标账本数据,并将所述目标账本数据反馈给所述区块链节点。
可选地,所述目标物理地址包括多个物理地址,所述方法还包括:
所述账本数据存储服务模块根据预设账本读取策略从所述多个物理地址中确定目标查询物理地址,并向所述目标查询物理地址对应的目标查询存储节点发送第二账本数据查询请求,以从所述目标查询存储节点查询到所述目标账本数据。
可选地,所述方法还包括:
所述账本数据存储服务模块监控各所述存储节点的磁盘剩余容量、总账本数据量、以及热点数据占比率;并针对任一所述存储节点,根据所述存储节点的所述磁盘剩余容量、所述磁盘占用率、所述总账本数据量、以及所述热点数据占比率确定是否对所述存储节点上存储的至少部分账本数据进行文件迁移。
可选地,所述方法还包括:所述账本数据存储服务模块在确定对所述存储节点上存储的至少部分账本数据进行文件迁移的情况下,将所述存储节点确定为待迁移存储节点,并计算所述待迁移存储节点上待迁移账本数据的数据总量;根据所述数据总量以及单个账本数据的数据量确定所述待迁移账本数据的个数;从所述待迁移存储节点中确定对应所述个数的所述待迁移账本数据,以对所述待迁移账本数据进行文件迁移。
可选地,所述账本数据存储服务模块从所述待迁移存储节点中确定对应所述个数的所述待迁移账本数据,包括:
获取所述待迁移存储节点上各所述账本数据的被查询次数;
根据所述待迁移存储节点上各所述账本数据的被查询次数,计算平均查询次数;
针对所述待迁移存储节点上的每一所述账本数据,在确定所述账本数据对应的被查询次数少于所述平均查询次数的情况下,将所述账本数据确定为候选待迁移账本数据,以得到候选待迁移账本数据池;
从所述候选待迁移账本数据池中随机选择对应所述个数的所述待迁移账本数据。
可选地,所述方法还包括:
所述账本数据存储服务模块针对每一所述待迁移账本数据,从除所述待迁移存储节点之外的其他存储节点中选择目标迁移存储节点,并向所述目标迁移存储节点发送文件迁移请求;
所述目标迁移存储节点存储所述文件迁移请求中携带的所述待迁移账本数据,并将存储所述待迁移账本数据的第三物理地址反馈给所述账本数据存储服务模块,以使所述账本数据存储服务模块更新所述待迁移账本数据的第一物理地址或第二物理地址。
可选地,所述账本数据存储服务模块针对每一所述待迁移账本数据,从除所述待迁移存储节点之外的其他存储节点中选择目标迁移存储节点的方式,包括:
根据所述待迁移账本数据的账本数据标识查询对应的目标第一物理地址和目标第二物理地址;
排除所述目标第一物理地址和目标第二物理地址对应的存储节点,得到第一候选存储节点池;
从所述第一候选存储节点池中选择符合预设条件的目标迁移存储节点。
可选地,所述账本数据存储服务模块针对每一所述待迁移账本数据,从除所述待迁移存储节点之外的其他存储节点中选择目标迁移存储节点的方式,包括:
根据所述待迁移账本数据的账本数据标识查询对应的目标第一物理地址和目标第二物理地址;
排除所述目标第一物理地址和所述目标第二物理地址对应的存储节点,得到第一候选存储节点池;
从所述第一候选存储节点池中排除其他待迁移存储节点,得到第二候选存储节点池;
从所述第二候选存储节点池中选择符合预设条件的目标迁移存储节点。
可选地,所述预设条件包括磁盘剩余内存大于预设内存、磁盘占用率小于预设占用率、热点数据占比率小于预设占比率、响应时间小于预设时长中的至少一者。
可选地,所述账本数据存储服务模块通过如下公式计算所述待迁移存储节点上待迁移账本数据的数据总量:
Figure BDA0003389604250000271
其中,β表征所述待迁移账本数据的数据总量,γ表征所述待迁移存储节点上的总账本数据量,n表征所述存储节点集群中的存储节点总数,γi表征第i个存储节点的总账本数据量,μ表征影响因子。
关于上述实施例中的方法,其中各个步骤的具体实施方式已经在有关该方法的系统实施例中进行了详细描述,此处将不做详细阐述说明。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的区块链账本数据存储方法的步骤。

Claims (10)

1.一种区块链账本数据存储系统,其特征在于,所述系统包括账本访问服务模块、账本数据存储服务模块、以及存储节点集群;
所述账本访问服务模块用于,响应于接收到区块链节点发起的账本数据存储请求,存储待存储账本数据的账本元信息,并将所述待存储账本数据以及账本数据标识发送至所述账本数据存储服务模块,所述账本数据存储请求中携带所述待存储账本数据以及所述账本元信息,所述账本元信息包括所述账本数据标识,所述待存储账本数据是所述区块链节点中的第一区块对应的账本数据,所述账本元信息还包括用于表征所述第一区块与第二区块之间的链式关系的数据,所述第二区块是所述区块链节点中所述第一区块的上一区块;
所述账本数据存储服务模块用于,响应于接收到所述待存储账本数据以及所述账本数据标识,根据预设账本写入策略以及所述待存储账本数据生成账本写入请求,并将所述账本写入请求发送至所述存储节点集群中的目标存储主节点;
所述目标存储主节点用于,根据所述账本写入请求存储所述待存储账本数据,并在存储所述待存储账本数据之后向所述账本数据存储服务模块反馈存储所述待存储账本数据的第一物理地址,以使所述账本数据存储服务模块存储所述账本数据标识与所述第一物理地址之间的映射关系。
2.根据权利要求1所述的系统,其特征在于,所述用于表征所述第一区块与第二区块之间的链式关系的数据,包括:
所述第一区块的哈希值和所述第二区块的哈希值。
3.根据权利要求1所述的系统,其特征在于,所述预设账本写入策略包括表征文件副本个数的预设数量,所述账本写入请求中包括目标存储从节点列表;
所述账本数据存储服务模块还用于,从所述存储节点集群中的除所述目标存储主节点之外的其他存储节点中确定磁盘占用率最低的所述预设数量的目标存储从节点,以得到所述目标存储从节点列表;
所述目标存储主节点还用于,基于所述目标存储从节点列表向每一所述目标存储从节点发送副本文件存储请求,以使各所述目标存储从节点存储所述待存储账本数据的副本文件。
4.根据权利要求3所述的系统,其特征在于,所述目标存储从节点用于,在存储所述待存储账本数据的副本文件之后,向所述目标存储主节点反馈存储所述待存储账本数据的副本文件的第二物理地址,以使所述目标存储主节点将所述第二物理地址反馈给所述账本数据存储服务模块;
所述账本数据存储服务模块还用于,存储所述账本数据标识与所述第二物理地址之间的映射关系。
5.根据权利要求3或4所述的系统,其特征在于,所述账本数据存储服务模块还用于,监控各所述存储节点的磁盘占用率,以基于各所述存储节点的磁盘占用率的大小从所述存储节点集群中确定所述目标存储从节点列表。
6.根据权利要求1-4中任一项所述的系统,其特征在于,所述账本访问服务模块还用于,接收所述区块链节点发起的用于查询目标账本数据的第一账本数据查询请求,在根据所述第一账本数据查询请求中携带的目标账本数据标识确定所述存储节点集群中存储有所述目标账本数据的情况下,将所述第一账本数据查询请求发送给所述账本数据存储服务模块;
所述账本数据存储服务模块还用于,响应于接收到所述第一账本数据查询请求,根据所述目标账本数据标识获取对应的目标物理地址,以基于所述目标物理地址获取到所述存储节点集群中存储的所述目标账本数据,并将所述目标账本数据反馈给所述区块链节点。
7.根据权利要求6所述的系统,其特征在于,所述目标物理地址包括多个物理地址,所述账本数据存储服务模块还用于根据预设账本读取策略从所述多个物理地址中确定目标查询物理地址,并向所述目标查询物理地址对应的目标查询存储节点发送第二账本数据查询请求,以从所述目标查询存储节点查询到所述目标账本数据。
8.根据权利要求5所述的系统,其特征在于,所述账本数据存储服务模块还用于:
监控各所述存储节点的磁盘剩余容量、总账本数据量、以及热点数据占比率;
针对任一所述存储节点,根据所述存储节点的所述磁盘剩余容量、所述磁盘占用率、所述总账本数据量、以及所述热点数据占比率确定是否对所述存储节点上存储的至少部分账本数据进行文件迁移。
9.根据权利要求8所述的系统,其特征在于,所述账本数据存储服务模块还用于:
在确定对所述存储节点上存储的至少部分账本数据进行文件迁移的情况下,将所述存储节点确定为待迁移存储节点,并计算所述待迁移存储节点上待迁移账本数据的数据总量;
根据所述数据总量以及单个账本数据的数据量确定所述待迁移账本数据的个数;
从所述待迁移存储节点中确定对应所述个数的所述待迁移账本数据,以对所述待迁移账本数据进行文件迁移。
10.一种区块链账本数据存储方法,其特征在于,所述方法应用于权利要求1-9中任一项所述的区块链账本数据存储系统,所述方法包括:
所述账本访问服务模块响应于接收到区块链节点发起的账本数据存储请求,存储待存储账本数据的账本元信息,并将所述待存储账本数据以及账本数据标识发送至所述账本数据存储服务模块,所述账本数据存储请求中携带所述待存储账本数据以及所述账本元信息,所述账本元信息包括所述账本数据标识,所述待存储账本数据是所述区块链节点中的第一区块对应的账本数据,所述账本元信息还包括用于表征所述第一区块与第二区块之间的链式关系的数据,所述第二区块是所述区块链节点中所述第一区块的上一区块;
所述账本数据存储服务模块响应于接收到所述待存储账本数据以及所述账本数据标识,根据预设账本写入策略以及所述待存储账本数据生成账本写入请求,并将所述账本写入请求发送至所述存储节点集群中的目标存储主节点;
所述目标存储主节点根据所述账本写入请求存储所述待存储账本数据,并在存储所述待存储账本数据之后向所述账本数据存储服务模块反馈存储所述待存储账本数据的第一物理地址,以使所述账本数据存储服务模块存储所述账本数据标识与所述第一物理地址之间的映射关系。
CN202111460149.4A 2021-12-02 2021-12-02 区块链账本数据存储系统及方法 Pending CN114089924A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111460149.4A CN114089924A (zh) 2021-12-02 2021-12-02 区块链账本数据存储系统及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111460149.4A CN114089924A (zh) 2021-12-02 2021-12-02 区块链账本数据存储系统及方法

Publications (1)

Publication Number Publication Date
CN114089924A true CN114089924A (zh) 2022-02-25

Family

ID=80306255

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111460149.4A Pending CN114089924A (zh) 2021-12-02 2021-12-02 区块链账本数据存储系统及方法

Country Status (1)

Country Link
CN (1) CN114089924A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116226138A (zh) * 2023-05-08 2023-06-06 湖南三湘银行股份有限公司 一种基于区块链的信息漏洞处理方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110322352A (zh) * 2019-07-09 2019-10-11 深圳市炳德区块链技术有限公司 一种基于区块链的账本建立及查询方法、电子设备
EP3779732A1 (en) * 2018-09-30 2021-02-17 Tencent Technology (Shenzhen) Company Limited Data backup method, storage medium, and computing device
CN112925479A (zh) * 2021-02-20 2021-06-08 京东数字科技控股股份有限公司 区块链数据管理方法及装置、电子设备及介质
CN113328997A (zh) * 2021-05-10 2021-08-31 东软集团股份有限公司 联盟链跨链系统及方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3779732A1 (en) * 2018-09-30 2021-02-17 Tencent Technology (Shenzhen) Company Limited Data backup method, storage medium, and computing device
CN110322352A (zh) * 2019-07-09 2019-10-11 深圳市炳德区块链技术有限公司 一种基于区块链的账本建立及查询方法、电子设备
CN112925479A (zh) * 2021-02-20 2021-06-08 京东数字科技控股股份有限公司 区块链数据管理方法及装置、电子设备及介质
CN113328997A (zh) * 2021-05-10 2021-08-31 东软集团股份有限公司 联盟链跨链系统及方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116226138A (zh) * 2023-05-08 2023-06-06 湖南三湘银行股份有限公司 一种基于区块链的信息漏洞处理方法及装置

Similar Documents

Publication Publication Date Title
US9542404B2 (en) Subpartitioning of a namespace region
EP3163446B1 (en) Data storage method and data storage management server
WO2017049764A1 (zh) 数据读写方法及分布式存储系统
US8135918B1 (en) Data de-duplication for iSCSI
US20100161657A1 (en) Metadata server and metadata management method
US8566555B2 (en) Data insertion system, data control device, storage device, data insertion method, data control method, data storing method
US20190140902A1 (en) Centralized configuration data in a distributed file system
US11526494B2 (en) Blockchain-based computing system and method for managing transaction thereof
US20150234846A1 (en) Partitioning file system namespace
KR20120018178A (ko) 객체 저장부들의 네트워크상의 스웜-기반의 동기화
CN105324765A (zh) 选择用于去重复数据的存储区
CN111580963B (zh) 存储集群的负载均衡方法、装置、计算机设备及存储介质
KR20200048440A (ko) 블록체인 기반 조회 서비스 제공 시스템 및 그 방법
CN108920100B (zh) 基于Ceph的读写模型优化和异构副本组合方法
CN104735110A (zh) 元数据管理方法和系统
CN107391761B (zh) 一种基于重复数据删除技术的数据管理方法及装置
CN110019048A (zh) 基于MongoDB的文件处理方法、装置、系统及服务器
CN113742135A (zh) 数据备份方法、装置及计算机可读存储介质
US10133757B2 (en) Method for managing data using in-memory database and apparatus thereof
CN114385561A (zh) 文件管理方法和装置及hdfs系统
CN114089924A (zh) 区块链账本数据存储系统及方法
US10142415B2 (en) Data migration
JP2021033854A (ja) 情報処理装置、情報処理システム、及び情報処理プログラム
CN114020218B (zh) 混合重复数据删除调度方法及系统
CN116578410A (zh) 资源管理方法、装置、计算机设备和存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination