okx

云币网官网登录 | Vite存储层设计详解——indexDB索引系统设计

时间:2023-08-21|浏览:213

indexDB主要通过k-v数据库levelDB来存储账本的索引,索引对象包括账户(Account)、交易(Transaction/AccountBlock)、快照(SnapshotBlock)、SendBlock/ReceiveBlock映射,在levelDB之外还添加了hotcache、memorycache两种类型的缓存提升读取性能,系统整体架构如下。

1. 读写流程

数据写入时,数据会先写入memorycache,然后周期性(当snapshotblock插入时)地将部分数据从memorycache拷贝到pendingarea中,pendingarea存储的是待写入levelDB的数据集合,在下次”异步批量Flush“时,会将数据从pendingarea写入levelDB。

在数据读取时,数据可能存在于hotcache、memorycache、levelDB中,数据读取的效率是hotcache>memorycache>levelDB。

2. levelDb索引

levelDB简洁的实现对于固定类型的存储数据来说非常便于优化。通过预定义的key字节结构,有效的将同一类型的数据进行物理的排序,能够充分发挥底层硬件性能。

具体实现是通过定义不同的字节前缀将不同的数据类型进行物理的分段,需要的话每个类型的数据还可以在这个基础上定义自己的子前缀,从而实现不同子类型数据结构的有序聚簇存储。

3. hotcache与memorycache缓存

hotcache是一个高速读缓存,经常读取到的热数据会缓存于hotcache中,以提高整体的读性能。memorycache是一个写暂存区,会暂存最近写入的数据,因而在memorycache中的部分数据可能还未写入levelDB,而通过一定的设计,使得无论数据存储在memorycache还是levelDB中,插入、删除、读取、更新、迭代等操作都是一致的,因而对于上层模块而言,写入memorycache数据即是可读的。

4. pendingarea与redolog

pendingarea暂存准备写入levelDB的数据。”异步批量Flush“触发时,数据会从pendingarea写入levelDB,先写redolog再写入levelDB,redolog在逻辑上记录的是数据操作顺序,如"putk1v1;putk2v2;putk1v2;deletek3...",多次执行同一个redolog是幂等的。

5. 索引维度

通过分析每种类型的数据读写场景,并有针性的定义最适合的维度,在数据写入时多个维度的索引会分别写入,这样每个场景的的读取效率都会因为有了最优的索引而得到保证。

热点:云币网 币网 币网官网登录 数据 登录

欧易

欧易(OKX)

用戶喜愛的交易所

币安

币安(Binance)

已有账号登陆后会弹出下载

« 上一条| 下一条 »
区块链交流群
数藏交流群

合作伙伴

非小号交易所排名-专业的交易行情资讯门户网站,提供区块链比特币行情查询、比特币价格、比特币钱包、比特币智能合约、比特币量化交易策略分析,狗狗币以太坊以太币玩客币雷达币波场环保币柚子币莱特币瑞波币公信宝等虚拟加密电子数字货币价格查询汇率换算,币看比特儿火币网币安网欧易虎符抹茶XMEX合约交易所APP,比特币挖矿金色财经巴比特范非小号资讯平台。
非小号行情 yonghaoka.cn 飞鸟用好卡 ©2020-2024版权所有 桂ICP备18005582号-1