# TiKV

__*TiKV 功能*__

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

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

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

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

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

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

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