全国服务热线 4001334566
语言
关于我们

Company Profile

[行业动态]区块链存储技术现状与展望

01-26

随着区块链技术的蓬勃发展,其在金融、政务、能源、双碳以及元宇宙、Web3.0等多个领域的应用逐渐深化,区块链存储技术作为一项关键基础设施技术显得越发重要,它不仅支撑着区块链的稳定运作,而且在数据管理和性能优化等方面起着至关重要的作用。本文旨在提供一个全面的视角,深入探讨区块链存储技术体系,包含区块链存储的数据类型、技术发展历程与面临挑战,同时展示实际应用案例,以期对区块链存储技术与未来发展趋势有一个清晰的阐述。

区块链存储技术概述

1、区块链存储数据类型

在目前的主流区块链系统中,区块链存储数据主要分为两类,分别是块链式数据(Blockchain Data)和状态数据(State Data)。块链式数据是区块链数据中最为核心的数据,包括按区块维度进行组织和使用的各类数据元素。

区块数据:每个区块中包括一系列的交易记录;

交易数据:反映资产转移或智能合约交互的具体信息;

回执数据:交易执行后生成的确认信息,通常包含执行结果及相关日志。

标准化的块链式数据结构模型中,区块头(Block Header)通常包含对应的世界状态快照、前一区块哈希值(Parent Block Hash)以及严格递增的区块号(Block Number)。块链式数据的特点,如不可篡改性、增量写入、不可随机删除的链式结构,是其独特的存储技术基础。

状态数据则与区块链作为“复制状态机”(Replicated State Mach-ine)的理念紧密相关,它指的是随着交易执行而持续变化的数据。根据不同的区块链账本模型,主流的状态数据模型主要分为以下两类:

UTXO模型:以比特币为代表,状态数据可被视为交易执行后全系统内各地址关联余额的映射。UTXO(Unspent Transaction Output)模型作为早期区块链架构,主要应用于加密货币领域,但由于其结构限制,难以直接支持复杂的智能合约。

账户模型:以太坊等系统采用这一模型,能够较好地支持智能合约功能。在账户模型中,状态数据为所有账户的信息,包含与外部实体公私钥对绑定的账户以及与智能合约实例绑定的合约账户。管理智能合约的账户会包含大量键值对形式的状态数据,其内容取决于智能合约的业务逻辑。因此,在账户模型中状态数据可以被抽象为一笔交易执行后系统中所有账户的最新数据快照。

2 区块链存储技术的发展与挑战

区块链技术的发展起源于中本聪的论文《比特币:一种点对点的电子现金系统》,早期区块链的研究和实践主要集中在共识算法和区块链体系的架构设计上。在这个阶段,区块链存储的主要关注点在于数据的正确性和完整性,而性能和可扩展性方面的考量相对较少。通常情况下,区块链系统会选择如LevelDB、RocksDB这样的键值存储(key-value, KV)数据库作为其数据存储的基础设施。

然而,随着区块链技术应用的不断扩展,无论是在公链还是联盟链场景中,人们逐渐认识到区块链数据持续累积增长的特点将导致存储需求持续上升。单一KV数据库的吞吐能力存在限制,当数据量积累到一定程度时,存储模块可能会成为整个区块链系统的瓶颈。例如,在公链场景中的以太坊,截至某个时点,全节点需要存储近2TB的数据量。在联盟链场景,数据量则与业务系统密切相关,在金融、政务、医疗、教育等领域,TB级别的数据更是常见。传统单一KV存储模型在面对庞大的数据量时,会显著降低系统运行效率,高昂的存储成本也成为使用区块链技术的障碍。

总结来看,区块链存储主要面临着以下挑战

(1)吞吐能力限制:随着数据量的增加,依赖单一KV数据库的存储模型显露出吞吐能力瓶颈。此外,数据物理上的混杂会导致无法对不同数据类型实行有效的定向优化。

(2)单机存储容量限制:区块链系统作为去中心化的复制状态机,要求每个全节点存储全量链上数据。这导致存储容量的“木桶效应”,即最小容量的全节点限制了整个系统的数据上限。一旦超出限制,系统可能不得不牺牲部分去中心化特性,增加成为全节点的门槛。

(3)随机数据存储效率低:随着智能合约功能的引入,用户自定义的状态数据变得更加复杂和随机,区块链系统难以抽象出具体特征以优化存储。而上层业务系统的不同业务场景往往需要不同的数据访问和管理策略,单一的存储模型难以满足各种场景的高效性需求。

为了解决这些问题,目前业内正积极探索各种解决方案,其中包括借鉴传统数据存储方案研究新型存储架构,以及通过数据存储分离、区块链扩容、状态数据冷热分离等方法来优化存储架构,以期在保证数据正确性的同时,提高系统的性能和可扩展性。

区块链存储典型技术方案

1 数据类型拆分与面向数据特征的优化

针对区块链系统吞吐能力的限制问题,现有成熟区块链技术方案包括以太坊、趣链科技、蚂蚁链和长安链等,采取了以数据类型拆分为核心的策略。这种策略的关键在于识别并利用不同类型数据的固有特性,使得数据能够有针对性地进行优化处理。将数据按类型分散存储于不同的数据库或存储结构中,可以有效降低单个存储系统的数据负载,从而提高存储吞吐能力。

例如,链上数据根据其与区块的关联性进行分类,典型的区块链数据如交易、区块和回执等,可以从键值存储中分离出来,转而采用面向追加操作优化的文件存储系统。这利用了区块数据顺序写入和基于文件位置索引访问的天然特性,实现了高效的数据存取。相应技术方案包括趣链科技自研存储引擎filelog、长安链block binary log组件以及以太坊、蚂蚁链实现的区块数据的文件存储方案等。

2 消除全节点链上数据存储量限制

块链式数据归档:鉴于区块链数据(块链式数据)与区块之间的强关联性,一种应对数据量持续增长的策略是将部分历史数据迁移至链下的独立存储系统,并为之提供相应的访问机制。采取这种归档方法可以有效控制链上数据的空间占用,使其保持在一个可预测的阈值范围内。这一方案在联盟链的交易存证等场景中尤为适用,能显著提高系统的可扩展性和可维护性。然而,此类数据迁移策略主要针对与区块紧密相关的块链式数据,对于那些不与区块直接绑定的账本数据(如智能合约产生的状态数据)效果有限。在智能合约执行场景下,账本数据的复杂性和动态性意味着需要额外的存储解决方案来应对这些数据的增长。

为了解决账本数据增长所带来的挑战,区块链系统需要探索更为复杂的存储架构,如采用分布式存储引擎、状态数据的冷热分离策略,或者进一步的状态分片技术。通过这些技术,不仅可以优化链上数据的存取效率,还能在保持去中心化特性前提下,支持更高频率的智能合约操作和更大规模的区块链应用。

3 新型状态数据存储引擎

针对归档机制无法充分解决状态数据持续增长的问题,业界专家也逐步探索了专门针对状态数据的分布式存储解决方案。在区块链系统存储模块中,与状态数据相关的内容通常涵盖了两大类:一是状态数据本身,二是进行世界状态(World State)计算时所需的各类树形数据结构,例如以太坊的Merkle Patricia Tree(MPT)、Hyperledger Fabric 0.6的Bucket Tree,以及其他改进型Merkle树及其变体。基于这些树形结构的不同特性,不同的区块链技术方案针对其自身采用的数据结构设计了相应的分布式处理策略。这些策略大体上可以分为两类。

(1)存算分离模型下的分布式存储方案:以以太坊的MPT结构为例,状态数据存储的逻辑是将真实的key值用作索引路径,在MPT中导向存储真实值(value)的哈希值叶子节点。相应的数据库则存储从真实值(value)的哈希值到其实际值映射。由于在该数据结构中存储与状态计算是彻底分开的,因此其扩展性主要集中在存储层面。例如,蚂蚁链的Letus引擎通过集成MyGrid分布式存储框架来处理文件存储;Fisco-Bcos链和长安链等系统则允许使用TiKV作为状态数据的底层存储引擎,依靠TiKV的分布式扩展能力来解决单机存储容量的局限。

(2)存算融合模型下的分布式存储方案:以趣链科技的vidb存储引擎为实例,这一引擎本质上构建了一棵Merkle B+树。在这棵树中,叶子节点存储着实际的键值对,数据的插入会引发树形结构的修改,并在此过程中计算出世界状态根。在存算融合的模型中,状态数据的任何增删改操作都可能导致树结构的变动,因此分布式存储方案需要针对Merkle B+树的分布式扩展进行设计。其中一个有效的方案是根据B+树的索引节点和叶子节点的存储量及功能差异,将叶子节点层拆分到数台子设备上进行分布式管理和存储。因为叶子层包含了数据插入、删除、更新、分裂等基础逻辑操作,它们不仅需要在子设备上存储数据,而且还需要支持相应的数据管理协议。同时,主设备上原有的针对Merkle B+树的版本管理、存储页管理等核心逻辑也需要相应地扩展,以管理多设备上的数据。由此,整个存储引擎由单进程的Merkle B+树演变为一个分布式的数据管理体系。

通过这些分布式存储方案,区块链系统能更好地适应状态数据量的增长,同时能够保障数据可靠性与系统可伸缩性。与此同时,为了应对存储容量膨胀和拓展性问题,公链系统尤其是以以太坊为代表的平台也在探索新型的区块链架构。这些架构包括数据拆分存储和提供数据横向拓展的方法,以实现更有效的资源管理和性能优化。

4 状态分片架构

以太坊等公链系统提出了“状态分片”架构,以解决单机数据存储容量的限制。在这种多层次的架构中,系统被划分为主链(通常称为beacon链)和多个扩展层。主链负责确认和结算全链的交易,而扩展层可以运行独立的共识机制和存储数据,最终将数据聚合到主链上。这样,数据分布在多个第二层子系统中,减轻了主链的存储负担。其中对数据量优化最明显的技术方案为zk-Rollup方案。

zk-Rollup采用零知识证明技术,这允许将智能合约的执行过程抽象为电路,并以此生成证明。在该方案中,第二层子链上的智能合约执行被编码为一系列电路计算,生成零知识证明,然后提交至主链。主链在此过程中无需重复执行智能合约,亦无需存储子链的状态数据,而是通过验证提交的证明来确认状态变更的正确性和完整性。因此,子链上的具体状态变更和交易细节不必在主链上重现,显著减轻了主链的存储负担。这有效地解决了主链因状态数据膨胀而导致的存储压力问题,同时确保了区块链系统整体的协议安全性和数据完整性。

5 模块化区块链

在现代区块链架构的发展中,模块化设计逐渐成为重要的趋势,其中以太坊的DankSharding方案是一个典型的实例。在这种架构中,数据可用性(Data Availability, DA)被设计为一个独立的服务层,从而将其职能从主链上分离出来。具体而言,主链主要职责是处理计算任务,而保证链上数据完整性和可用性则由专门的数据可用性服务层来负责。

为了确保数据的可靠性,数据可用性层采用了SPV(Simplified Payment Verification)轻节点执行的随机数据采样协议。这样的设计允许主链节点不必存储全部历史数据,而只需维护最近一段时间内的数据,从而有效减少了对存储资源的需求,同时也提高了数据处理的效率。数据可用性服务层可能实现为第二层区块链系统,专注于数据的存储和传播,而不承担智能合约执行和交易的结算功能。通过采用数据迁移或分布式文件存储解决方案,该层能够独立进行存储扩容,进一步增强整个系统的存储能力和可扩展性。

6 状态数据冷热分离提高数据访问效率

传统的状态数据存储模块与智能合约逻辑层之间的断层现象导致了状态数据访问效率的下降。为了克服这一挑战,以蚂蚁链的Letus为代表的存储引擎开始采用冷热数据分离的策略来优化状态数据的存储与管理。

Letus存储引擎采用了一种改进的存算分离模型,在世界状态的计算过程中引入了区块号作为一个关键的组织维度。内部结构上,Letus可以被视作一个类似LSM-Tree的庞大文件存储和管理系统,其中每个文件都包含了与特定区块号关联的状态数据更改集合。随着时间的推移,这些文件会以增量的方式写入存储设备,并通过后台运行的异步压缩逻辑来处理那些键值相同但区块号不一的状态数据,实现数据的压缩和去冗余。

Letus存储引擎的设计在多个方面都进行了创新,包括键格式的重新设计、键比较函数的优化,以及灵活的数据压缩策略。这些创新使得引擎能够满足以下技术目标:一是减少存储设备上冗余数据所占用的空间;二是实现数据在不同存储设备间的灵活迁移;三是利用附加的智能数据温控组件来分析状态数据的冷热特性,并指导数据的迁移。这确保了数据的存储位置与其访问频率之间的匹配。

由于Letus引擎能够确保热数据保留在更高效的存储设备上,因此极大提升了上层业务对状态数据的访问效率。这不仅优化了单次数据访问性能,也对整个区块链系统吞吐能力产生了积极影响。通过这种冷热数据分离的存储策略,区块链技术能更高效地支撑智能合约和其他高频数据交互场景,从而为区块链的商业化应用和长期发展提供坚实的技术基础。

区块存储技术未来展望

随着区块链技术在全球多个行业的快速融合以及智能合约的广泛采用,区块链存储技术正处于快速进化之中,未来将朝着提升存储效率、扩展性和成本效益的方向发展。预计区块链存储将继续深化数据结构的优化,例如Merkle Patricia Tree(MPT)及其变种,来应对日益增长的数据管理需求。冷热数据分离等智能数据管理策略,将根据数据的使用模式动态优化存储资源的分配。同时,模块化架构将为区块链提供更加灵活的存储服务,支持数据的水平扩展和有效资源管理。这些进步预示着未来的区块链存储技术不仅能够支撑更复杂的应用场景,而且将为区块链技术的长期发展和商业化提供坚实的基础。

本文刊登于IEEE Spectrum中文版《科技纵览》2023年12月刊。

Copyright © 2011-2023  北京天华中威科技有限公司 版权所有 京ICP备2023011416号-1 All Rights Reserved