TiKV数据持久化和读取

 

rocksdb采用的lsm tree的数据结构来存储key value数据。

所有修改保存在内存中,达到一定量后,批量写入到磁盘中,写入前会做个合并,不排序。

1.将key value预写入到磁盘的日志中(wal动作)(以防断电,内存中丢失)(有个sync_log参数,如果true,那会直接写入磁盘中,不经过操作系统缓存,防止宕机导致操作系统的缓存被清空)(如果2个,当数据落盘sst后,wal文件就可以覆盖了)

2.将key value写入到memtable中。(write buffer_size,当量达到改参数后,被转存到immutable memtable,然后会重新开辟一个memtable给后面的数据使用。)(读也是从memtable中读)

3.当immutable memtable有一个时,就会刷到磁盘中,生成sst文件(ssd table)(write stall=5,表示有5个immutable memtable时,数据库认为你生成immutable memtable太快了,开始对memtable写入限速。日志中会记录write stall。也是一个参数。)

 

数据写入到wal磁盘日志中,然后写入到memtable中,这时一次写入结束了,1次磁盘io,1次内存io。后面的由后台进程继续。

Level 0就是immutable memtable的复刻。达到4个,向下一个走(动作叫compaction)。

按照key排好序,二分查找法找key(因为是排好序的),找key如果在,返回,不在,找另外文件。

在level 0达到4个,做压缩、key排序的动作(compaction),压成1个sst文件。

Level 1达到256m,做压缩、key排序的动作,压缩成level2的sst。以此类推。

Level 0  4个

Level 1  256m

Level 2  2.5g

Level 3  25g

Level 4  250g

删除了的话,在读取的时候,memtable这边看到key=xxxx没有。

插入操作:

Block cache中缓存着最近最常读的数据

Block cache——memtable——immutable memtable——level0——level1.。。。。。。。。

如果key1 开始是张三,在level3,后面改了叫李四,在level2中,那他读到level2就出结果了。

某个sst的读取就是上一层所有文件的集合。

找key数据的时候,每个sst文件会给出最大值和最小值如果key在次中,就二分法继续找,不在就下一个文件。

 

每个文件都有bloom filter(过滤器),如果它说这个key不在这个文件里,那key肯定不在里面,如果说在,那不一定在里面。

 

Column familycf、列簇)(数据分片技术)

每个cf有自己的block cache、memtable、immutable memtable、sst。多个cf共享几个wal(默认3个)

不同的cf存不同的一张表或者几张表。

 

写的时候可以指定某个cf

Write (cf1,id,name,………)

Write (cf2,id,adree……….)

 

不指定cf,就是默认到default列簇中。

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪灵骅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值