# TiKV 数据写入流程

![`left`](./student-guide/diagram/08-Data-writing-process-01-01.png)
-------------------------------------------------------------
TiKV 数据写入流程

首先，scheduler Pool 模块负责协调事务并发写入冲突，并将收到的修改操作向下写入，当有 key value 写入冲突（例如：锁冲突、版本冲突等）时 scheduler 使用 latch 来进行协调，获得 latch 的线程会将写入请求发送给 raftstore 模块，没有获得 latch 的线程会处于等待状态。

其次，raftstore thread 模块收到写请求后，将写请求转化为 raft log 后，写入到 rockdb raft 中，rockdb raft 负责持久化这些 Raft log。同时，raftstore 模块会将 raft log 复制到其他 TiKV （包含写入 region 的副本）上的 rockdb raft 中，准备写入到其他 region 副本上。

最后，由于 rockdb raft 中存储的为 Raft log，所以 apply 模块会将这些 raft log 应用到 rocksdb kv 中，这个时候，写入操作则被持久化到 rockdb kv 中了。
