TiKV 简介--(上)

【是否原创】是
【首发渠道】TiDB 社区
【正文】

首先来看下TiKV的架构和作用

五大作用:
1、数据持久化
2、分布式一致性
3、MVCC
4、分布式事务
5、Coprocessor

首先看下RocksDB

一、RocksDB的介绍

二、RocksDB的写入流程(一)


工作原理:数据先写入WAL日志中,再写入内存(防止掉电丢失,通过日志恢复),当memtable写入磁盘后WAL日志就可以覆盖了,immutable Memtable有一个就写一个到磁盘。

注:当数据写入到内存的write_buffer_size的大小时,数据从MemTable转存到immutable MemTable(中间过渡层)中,然后再写入flush(目的是防止写阻塞)。

特殊情况:如果Mem Table写入过快,导致immutable MemTable大于5个时,这时触发write stull(流控),并限制写入速度,通过优化存储或者调整mmutable MemTable 参数值解决。

三、RocksDB的写入流程(二)


工作原理:memtable 写入level0写满4个后,向level 1的第一个压缩,当level 1达到256M时,继续在向下一层合并。

四、RocksDB的查询


1、优先到内存中查找数据
2、其次是到磁盘中查找数据

五、RocksDB–Column fa’mily(CF-列簇)

RockDB的分片技术
注:列簇技术提供数据分片,将一张表的数据打散再两个或者多个分片中,需要指定cf(列簇片),如果不指定则使用default。每个列簇有自己的memtable,有自己的ssd,但共享一份wal日志。

六、分布式事务
这里由CF引出分布式事务


一个事务修改3个column family

1是Default(保存修改数据,包括开始时间戳,时间戳由PD分配)
2是Lock(保存写锁信息/主键等业务信息/)(只给第一行数据加一把主锁,其他数据行依附在这个主锁上)
3是Write(保存提交信息,包括结束时间戳,开始时间戳,时间戳由PD分配)(删除锁信息时使用D加业务信息实现,表示已删除锁信息)。

场景举例:
一个会话想要读写另一个会话,顺序是先去Write CF中查找键值和时间戳的信息,如果能找到则去Default CF 和Lock CF中去验证,如果Write CF中没有,则代表该信息刚刚上锁。

场景举例:

分布式事务在TIDB中的实现,如果,除主锁外的其他事务数据在lock或write中丢失,重启后这些事务会根据主锁信息进行判断,如果主锁未丢失,则其他数据行将在其他TIKV节点中恢复出来,如果主锁信息丢失,则放弃。

七、MVCC
这里由CF引出MVCC的概念

注:早期tidb版本只有乐观事务/乐观锁

1 个赞

可以发到专栏去嘛

1 个赞