# TiKV

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

![right](./student-guide/diagram/01-TiKV-01-01.png)
-------------------------------------------------------------
- 数据持久化
  - 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）进行清理。

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