一。数据存储对多链的支持
这个目录下面有两个目录:businesschannel和pocchannel。它们代表的是两个通道,也就是两个链的数据,每个链现在只有一个区块文件,blockfile_是文件名中固定的前缀,000000是固定的6位占位符,下一个文件名会依次递增。从这个目录结构可以看到,记账节点在底层账本数据存储的时候就对不同链的数据进行了隔离。
排序节点会存储所有链的账本数据,排序节点除了可以选择序列化区块文件的格式外,还支持JSON文件格式和内存数据结构的账本数据,后面两种都只在测试环境下使用。序列化区块文件和JSON文件格式区块文件的存储目录一般是/var/hyperledger/production/orderer/chains。其中,orderer/chain是固定的目录后缀。同样地,不同链的账本数据存储在以通道名称为目录名称的目录中,以实现不同链账本数据的物理隔离。内存数据的账本数据没有持久化的存储,不同链的账本数据存储在不同的数据结构中。
7.1.2索引数据
记账节点和排序节点都会给账本数据建立索引,不同的是排序节点只会建立以BlockNum为属性的索引。
索引文件存储的目录是/var/hyperledger/production/ledgersData/chains/index,其中,ldegersData/chains/index是记账节点上固定的目录后缀,排序节点上的目录后缀是orderer/index。
下面是一个记账节点上的索引数据的目录:
[email protected]:/var/hyperledger/production/ledgersData/chains/index# tree
|--000002.1db
|--000007.log
|--CURRENT
|--LOCK
|--LOG
--MANIFEST-000008
0 directories,6 files
索引数据是存储在LevelDB数据库里的,数据库的类型目前是不可选的。LevelDB是持久化的K-V数据库,在保存索引的时候会加上ledgerid作为前缀,当然生成的组合键在构造的时候是要先转换成[]byte数组的。由于索引数据存储在同一个数据库中,所以对于不同链的数据,索引数据的实现是逻辑隔离的,并非是物理隔离的。
7.1.3状态数据
7.1.4历史数据
二。链码对多链的支持
三。多通道对多链的支持
四。命令行和SDK对多链的支持
五。关于系统链
六。本章小结
原文地址:https://www.cnblogs.com/kaixinyufeng/p/9463621.html