# TiKV

__*TiKV 功能*__

+ 数据持久化
+ 分布式事务支持
+ 副本的强一致性和高可用性
+ `MVCC`（多版本并发控制）
+ `coprocessor`（算子下推）

![`smart`](./student-guide/diagram/TiKV_aa_001_20220506.png)
-------------------------------------------------------------
在接下来的课程中我们将会详细为大家介绍 TiKV 的主要功能以及实现原理, 这里我们先简要了解下它的各项功能。

数据持久化
- TiKV 选择了基于 `LSM-tree` 数据结构的 `RocksDB` 引擎作为数据的持久化存储引擎, 而 `RocksDB` 引擎通过 `WAL` 等机制来保证了数据的不丢失, 即持久化。

分布式事务支持
- 在 TiDB 基于 `Percolator` 事务模型的两阶段提交过程中, 每个 TiKV 上会单独分配存储锁的空间, 叫做 `CF Lock`(列簇), 这样配合 `TiDB server` 和 `PD` 的全局 `TSO` 授时就实现了去中心化的两阶段提交。另外, TiDB 也支持乐观锁和悲观锁两种锁模式, 并且在 `TiDB 5.0` 版本后, 实现了两阶段提交中第二阶段的异步提交功能. 对于在 `OLTP` 场景里, 显著降低了高并发的小 SQL 语句写入延迟, 我们在优化相关的课程中将会详细为大家介绍。

多副本的强一致性和高可用性
- TiKV 集群采用 `Multi-Raft` 机制实现了多副本的强一致性和高可用性, 同时 TiKV 中存储的 `Region` 会自动进行分裂和合并, 实现了动态的扩展. 最后, 借助 PD 节点使得 TiKV 中的 Region 可以灵活调度,避免了热点等分布式数据库的常见问题。

`MVCC`（多版本并发控制）
- 对于数据库高并发读写的需求,`MVCC`（多版本并发控制）是必不可少的,它是实现并发控制、`SI` 隔离级别、分布式事务、数据快速恢复等功能的基础。 TiKV 的 `MVCC` 实现是通过在 Key 后面添加版本号来完成,并在历史版本数据达到一定时间期限后由 TiDB Server 进行垃圾回收（GC）进行清理。

1. `coprocessor`（算子下推）
`coprocessor` 功能可以使得 TiKV 在本地节点完成数据过滤,部分聚合等工作,这样实现了将 SQL 计算下推到分布式的存储节点来完成,这种机制不仅减少了网络交互成本,TiDB Server 的计算资源（CPU、缓存和内存）,还能充分利用分布式存储节点的并行处理能力。






