2021年618京享红包 - 618大促主会场
九阳 Joyoung电磁炉 电陶炉 2200W大功率 家用火锅套装 旋转控温 红外光波加热 H22-x3 赠烤盘
凯迪仕电子锁618狂欢购
有健康 更热爱
美丽雅品牌会员周

区块链存储子系统设计

楠木青城° 1年前   阅读数 54 0

一、概念

区块链存储是指在区块链网络中各个节点上安置持久化数据的方式。通常我们指代的是Key/Value数据库。假设数据库名称为DB

存储域:针对物理数据来说,存储域就是对应的文件或者磁盘数据块。针对账户来说,存储域就是Merkle Patricia Trie(MPT树)
存储操作:针对各自存储域的操作。

存储域包括:
bare域(FB),指底层数据库,比如RocksDB数据库及其抽象。
account域(FA),指每个账户对应的MPT树。
state域(FS),指global state对应的MPT树。

二、基本操作

添加:也实现为insert,往存储域添加(K, V)。
删除:也实现为remove,从存储域中删除(K, V)。
查找:get,从存储域中获得K对应的值V。
修改:也实现为put或者insert,修改存储域中K对应的值V。

三、存储缓存

3.1 域缓存

指针对某一个域实现的缓存数据结构,命名为C[x],显然每个域的缓存内容和该域内容同类。
C[FB],存储有(K1, V1)的内存数据库。
C[FA],存储有(K2, V2)的内存结构。
C[FS],存储有(Address, Account)的内存结构。

3.2 域缓存层级

FA -> FS -> FB

FB Cache
bare域提供一个内存模拟的K/V数据库,用来缓存物理数据库内容,减少IO负载。每当flush或者db commit的时候,写入到磁盘。

FA提供两层缓冲
storage changes
表示在当前执行环境下的dirty cache。随着storage被commit而消失。
storage cache
考虑到局部性原理,表示当前帐号最新的storage内容,dirty cache最终被commit到此处。

FS Cache
用来存储当前state下的账户信息。可感知到分叉的存在,因此需要额外的同步操作来保证缓存一致性。同步操作定义为,用C[FA]复写C[FS]相关item。
由于state随着block走,每当block commit的时候就是该层缓存的刷新时机。

四、基本操作实现

4.1 FB

RocksDB数据库的操作

4.2 FA和FS

MPT树操作,参看MPT相关内容。

发布了146 篇原创文章 · 获赞 78 · 访问量 53万+

注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: