大家好,又见面了,我是你们的朋友全栈君。
TiKV架构
TiKV作用、
- 数据持久化
- 分布式一致性
- MVCC
- 分布式事物
- Coprocessor
数据持久化
写入操作
WAL: Write Ahead Log预写日志,数据线通过WAL写入日志(直接落盘sync_log=true),然后再写入缓存;可以防止掉电丢数;一般默认2个WAL文件,数据落盘成功后即可清理;
数据将先写入内存的MemTable,当数据量超过write_buffer_size大小后,数据将会转存到immutable中,将immutable刷盘后即SST文件,从而防止写阻塞;MemTable同时服务于读和写;
如果immutable达到5个会触发流控,限制写入速度,write stall;记录于日志中;可以优化存储或者调高immutable数量来提高写入速度;
Level 0 和immutable中文件的复刻;
Level0 达到4个的时候会向Level 1合并-compaction;会做压缩和排序;形成一个压缩的有序文件
当Level 1达到256M的时候会继续向Level2进行合并;
每一层都会切分成多个SST文件,每个SST文件都是键值对文件;对于每个文件使用二分法进行查找键值信息;
删除和更新的时候直接操作MemTable中即可,待查询的时候MemTable会直接返回;
RocksDB查询操作
Block Cache: 最近,高频访问的数据存储在Block Cache中;
其次依次按照写入最新时间查找MemTable;
再其次按从磁盘中的Level 0依次往后查找到SST文件;
根据查找的KEY 判断是否在SST的min_key和max_key中间; 布隆过滤器判断如果KEY不在,则查找下一个SST文件,如果数据在该SST文件,则二分法查找;
Column Families–CF 列簇
CF属于RocksDb的数据分片技术,可以将数据的键值对按照不同的属性分配给不同的CF,可以让某些内存和SST文件中存的都是相同类型的数据,可以极大地增加读写的效率、提升数据压缩率;
落数的时候会自带CF1、CF2、default 来决定落入哪个分片中;
内存和SST文件都按照CF分了,但是WAL没有按照CF区分;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/190104.html原文链接:https://javaforall.cn