http://www.7klian.com

Vite存储层设计详解之indexDB索引系统设计

数据写入时,数据会先写入memory cache,然后周期性(当snapshot block插入时)地将部门数据从memory cache拷贝到pending area中,pending area存储的是待写入levelDB的数据荟萃,在下次”异步批量Flush“时,会将数据从pending area写入levelDB。

indexDB主要通过k-v数据库levelDB来存储账本的索引,索引工具包罗账户(Account)、生意业务(Transaction/AccountBlock)、快照(SnapshotBlock)、SendBlock/ReceiveBlock映射,在levelDB之外还添加了hot cache、memory cache两种范例的缓存晋升读取机能,系统整体架构如下。

levelDB作为一个字节序的kv存储布局,简捷的实现对付牢靠范例的存储数据来说很是便于优化。通过预界说的key字节布局,有效的将同一范例的数据举办物理的排序,可以或许充实发挥底层硬件机能。
通过阐明每种范例的数据读写场景,并有针性的界说最适合的维度,在数据写入时多个维度的索引会别离写入,这样每个场景的的读取效率城市因为有了最优的索引而获得担保。

pending area暂存筹备写入levelDB的数据。”异步批量Flush“触发时,数据会从pending area写入levelDB,先写redo log再写入levelDB,redo log在逻辑上记录的是数据操纵顺序,如”put k1 v1; put k2 v2; put k1 v2; delete k3…”,多次执行同一个redo log是幂等的。

详细实现是通过界说差异的字节前缀将差异的数据范例举办物理的分段,需要的话每个范例的数据还可以在这个基本上界说本身的子前缀,从而实现差异子范例数据布局的有序聚簇存储。
hot cache是一个高速读缓存,常常读取到的热数据会缓存于hot cache中,以提高整体的读机能。memory cache是一个写暂存区,会暂存最近写入的数据,因而在memory cache中的部门数据大概还未写入levelDB,而通过必然的设计,使得无论数据存储在memory cache照旧levelDB中,插入、删除、读取、更新、迭代等操纵都是一致的,因而对付上层模块而言,写入memory cache数据等于可读的。
4.pending area与redo log

1.读写流程
3.hot cache与memory cache缓存
2.levelDb索引
在数据读取时,数据大概存在于hot cache、memory cache、levelDB中,,数据读取的效率是hot cache > memory cache > levelDB。
5.索引维度

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读