区块链数据是存在链上还是数据库里 (区块链数据是什么形式)

区块链数据是存在链上还是数据库里 (区块链数据是什么形式)

在回答这个问题之前,首先要理清“ 区块链数据 ”和“ 链上数据 ”的概念。

区块链数据

“区块链数据”广义上包括区块链的 区块数据 和区块链的 状态数据

无论区块数据还是状态数据,它们都是由区块链节点使用和存储的。区块链节点是一个程序,运行在我们的个人电脑、虚拟机或服务器上。多个分布在不同电脑或服务器上的区块链节点,通过网络互相连接,组成了完整的区块链网络。

区块链节点通常会把区块链数据存储在个人电脑、虚拟机或服务器上,存储区块链数据最常见的介质,就是磁盘。

区块链节点不会直接访问磁盘,它们会通过特定的数据库,如 LevelDB、RocksDB 或 MySQL 等单机或分布式数据库来操作数据。相比于直接操作磁盘,数据库抽象了特定的数据访问模型,对区块链节点更为友好。

因此,当我们说:“区块链数据保存在数据库”时,可以认为区块链节点将区块链数据保存在 MySQL(或其它数据库),MySQL 将区块链数据保存在磁盘。

数据库有 独立式 嵌入式 之分:

链上数据

区块链数据的区块数据和状态数据并不是凭空产生的。区块数据中的交易,是由区块链的用户生成,用户把交易发送到区块链节点,区块链节点将多个交易打包进区块,区块会在区块链网络上广播和共识,区块链网络对区块达成共识后,认同区块中的交易,将交易的执行结果保存到状态数据中。

假设区块链原本的状态数据是:小明当前的余额是 50 元、小王当前的余额是 100 元,那么执行了“小明给小王转账了 50 元”的交易后,状态数据会发生变化,小明当前的余额会变为 0 元,小王当前的余额变为 150 元。

区块需要进行区块链共识,状态数据是通过执行区块中的交易生成的,这两类数据都直接或间接跟区块链共识有关系,可以将其称为“链上数据”。

那么,“链上数据”的明确定义,就是:链上数据是直接或间接由区块链共识产生的数据。

回到最初的问题

很显然,“链上数据”和“数据库”不是同一个层面的概念,“区块链数据是存在链上还是存在数据库?”这个问题不成立,区块链数据无论是存储在 LevelDB、RocksDB、MySQL 数据库或直接存储在磁盘,只要是直接或间接由区块链共识产生,都可以视为链上数据。

FISCO BCOS 的链上数据

FISCO BCOS 的区块链数据,默认是通过 RocksDB 保存在磁盘中。如果希望把数据保存到 MySQL 数据库,可以先自行部署一个 MySQL 数据库,然后修改区块链节点下的群组配置文件,群组配置文件通常位于区块链节点的配置目录下:conf/group.1.ini

type=mysqldb_ip=127.0.0.1db_port=3306db_username=rootdb_name=db_Group1_Adb_passwd=******
复制代码

其中:

其它未提及的配置项,可保留默认值不修改,完成这些信息的填写以后,确保数据库运行正常,然后重启区块链节点,区块链节点就会将区块链数据保存到 MySQL 数据库中。

FISCO BCOS 的区块链,无论是保存在 RocksDB 还是 MySQL 中,都可视为链上数据。

使用 MySQL,可以方便地查看链上数据的大小、结构等信息,如区块的大小、账户的大小等等。

总 结

FISCO BCOS 提供了灵活的数据存储机制,对于追求便利与性能的场景,可以使用默认的 RocksDB;对于偏重审计和治理的场景,可以使用 MySQL,满足不同的需求。

声明:本文来自用户分享和网络收集,仅供学习与参考,测试请备份。