# TiKV 架构和作用

__*TiKV 架构*__
__*TiKV 作用*__

+ 数据持久化
+ 分布式一致性
+ MVCC
+ 分布式事务
+ Coprocessor

![`smart`](./student-guide/diagram/TiKVArchitectureAndRole_aa_001_20220511.png)
-------------------------------------------------------------
之前的课程中,我们了解了 TiDB server 作为 SQL 层,对外暴露 MySQL 协议的连接 endpoint,负责接受客户端的连接,执行 SQL 解析和优化,最终生成分布式执行计划,TiDB server 本身是无状态的。

下面我们会介绍 TiKV ,TiKV 的主要核心功能是负责 TiDB 数据库的数据持久化,这个功能是靠集成在 TiKV 中的 RocksDB 实现的,所以我们会着重介绍 TiKV 中 RocksDB 的数据写入（也就是持久化）与读取,另外介绍 RocksDB 中 Column Families 的功能,这个功能对后面事务和 MVCC 的支持有很大的影响。

TiKV 的另一个功能是支持分布式事务和 MVCC,所以我们会从 TiKV 层面来介绍它们的实现。

在 TiDB 数据库中,TiKV 是一个分布式的存储引擎,数据以 region 为单位分布式存储,所以我们就用到了 raft 共识算法来实现分布式环境下面数据的强一致性。每个 region 及其副本构成一个 raft group,多个 raft group 的组合就叫做 multi raft。我们会为大家介绍,raft 中的复制和 leader 选举,以及基于 raft 共识算法的数据写入、读取、split 和 merge。这里说的基于 raft 共识算法的写入和读取与之前提到的 RocksDB 的写入和读取有所不同,RocksDB 的写入和读取主要指的是在单个 TiKV 节点上的数据持久性和一致性读取的保证,是纵向的,而基于 raft 共识算法的写入和读取主要是对于多个 TiKV 节点组成的集群的操作,可以认为是横向的。

后面,我们介绍了 Coprocessor 功能组件,这个功能组件为 TiKV 提供了算子下推的能力,我们可以利用这个功能组件将一部分过滤、聚合和投影等 SQL 计算交给 TiKV 来完成,不需要将 TiKV 中的数据全部通过网络发送给 TiDB server,也没有必要将全部计算压力发送到 TiDB server 上。这样节省了网络带宽和 TiDB server 的 CPU 负载。