一、存储层业务需求 每种类型的数据都有自己特殊的业务场景,相应的会有自己特有的读写需求: 1. 交易:每个交易对应一个AccountBlock,在Vite中可以通过交易的哈希值或地址来查询交易,还可以根据关联关系查询SendTx和ReceiveTx之间的关联。 2. 快照:快照链中的SnapshotBlock记录了该块快照的全部交易的快照信息,可以通过快照块和交易之间的关联来查询。 3. 账户状态和虚拟机状态:这两类数据都是绑定在地址上的存储结构,区别是账户状态关联一个普通地址,而虚拟机状态关联的是合约地址。由于状态可能会被修改,需要支持多版本来满足更新、回溯和回滚操作,同时还要支持状态变化的trace输出。
二、总体设计 根据不同类型数据的读写需求,存储层设计的原则是在底层通用方案的基础上进行了一些定制,并对下游模块提供友好的接口。
1、通用方案设计 为了提供支撑和提高系统的可靠性,我们设计了以下几个通用方案: a、小文件存储:使用固定大小的小文件对两种类型的块进行暂存和永久性存储,适合区块链这样基于海量交易的数据结构。 b、索引:通过levelDB实现索引存储,适合追加写入多、更新少的场景。 c、缓存:利用内存性能来加速读取,采用一定的策略存储热点数据。 d、异步flush:通过异步方式提高IO性能,并保证数据的一致性。 e、数据压缩:为减少存储量,可以选择压缩后再进行持久化。
2、具体实现 根据具体业务需求,存储分为以下三个模块的实现: a、blockDB:用于存储AccountBlock和SnapshotBlock,在小文件中存储多个块,减少碎片并方便索引。 b、indexDB:用于levelDB索引blockDB中块的位置,同时存储块之间的关联关系。 c、stateDB:用于存储账户状态和虚拟机状态,通过levelDB的key来支持多版本数据。
三、总结 通过以上介绍,我们了解到Vite存储层根据业务需求进行了模块拆分,并建构在几个通用方案上。后续的文章将详细介绍每个子模块的设计细节,敬请期待。
原文作者:0x Loki一、平台币的二阶段增长模型之前的推文提到交易所平台币一个大坑是不要迷信 PE,这一点的背后是股利增长模型,我们把回购、分红、打新权益、手续费抵扣统一看作股利,那么理论上交易所平台币的估值就应该和股...
稳定币发行商Paxos因BUSD相关问题将面临美国证券交易委员会(SEC)的诉讼;随后,纽约州金融服务部命令Paxos停止发行BUSD,受此影响,BUSD流通量锐减,加密市场恐慌情绪再度蔓延。你手中的BUSD是Paxos...
近期,一些 bot 项目进入大家视线内。比如前段时间涨幅较高的 Unibot;比如,近一天内涨幅最高达 4 倍的 LootBot(LOOT),可能有些人昨天冲过 LOOT,且获得了翻倍的收益。所以这类 bot 项目都什么...
Huobi易主尘埃落定,此前传闻中的买家、波场创始人孙宇晨最终出任Huobi Global全球顾问委员会委员。任职后,孙宇晨在推特上连续多日重申了Huobi的HT战略,不仅表示目前已经增持数千万枚HT,并将继续增持,还提...