区块链存储子系统设计

一、概念

区块链存储是指在区块链网络中各个节点上安置持久化数据的方式。通常我们指代的是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相关内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶玄青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值