西安网站建设市场,东莞网络推广运营平台,杭州做网站软件,企业网站开发协议背景
最近在使用flink的过程中#xff0c;由于要存储的状态很大#xff0c;所以使用到了rockdb作为flink的后端存储#xff0c;本文就来简单看下rockdb的架构设计
Rockdb设计
Rockdb采用了LSM的结构#xff0c;它和hbase很像#xff0c;不过严格的说#xff0c;基于LS…背景
最近在使用flink的过程中由于要存储的状态很大所以使用到了rockdb作为flink的后端存储本文就来简单看下rockdb的架构设计
Rockdb设计
Rockdb采用了LSM的结构它和hbase很像不过严格的说基于LSM结构的存储都差不多我们简单看一下它的架构图
写操作
1.写记录会先写入到WAL日志文件中由于是顺序写速度不会慢然后再把记录写入内存中的memtable中如果memtable达到阈值就把这个memtable变成一个不可变的Immutable-memtable此外会再创建出来一个新的memtable用于接收用户写入
2.Immutable-memtable内存表的数量达到上限后会把他们的数据刷新到SSTable磁盘文件中只保存固定数量的Immutable-memtable内存表
3.定期把低Level的sst文件合并成高Level的sst文件其目的是为了清理已经被删除的记录由于sstable文件是只Append所以删除操作只有在文件合并的时候才会实际发生,此外减少sst文件的个数也有助于读取操作的性能
读操作
1.读首先读取memtable内存表如果没有从索引(布隆过滤器索引BloomFilterIndex或者数据索引DataIndex)中查找到记录所在的sstable文件的块位置,注意索引布隆过滤器索引BloomFilterIndex或者数据索引DataIndex的数据最好是常驻内存的也就是对于flink来说state.backend.rocksdb.memory.high-prio-pool-ratio的配置值不要设置为0
2.获取到记录所在的sstable的对应数据块后优先从内存中的BlockCache查找数据块如果找到查询结束否则继续下一步
3.读取sstable文件中的指定数据块的数据返回记录后把对应的数据块放到BlockCache中以便下次查找