# TiKVデータ書き込みプロセス

![`smart`](WritingData_aa_003_2022051.png)

------------------------------------------------------------
TiKVのデータ書き込みプロセスは以下の通りです：

キー = 100、値 = Jack と書きたいと仮定します。

1. クライアント（通常はTiDBサーバー）は、key = 100 のRegionがどこにあるかPDに尋ねます。

2. PDがリージョンのリーダーにノードの位置（TiKVノード）を知らせます。

3. クライアント（通常はTiDBサーバー）は、リーダーが配置されているTiKVノードに書き込み操作の指示を送信します。

4. リーダーノードが書き込み指示を受け取った後、TiKVの書き込みプロセスを開始します。
- ここでは、持続的なストレージエンジン（RocksDB）への書き込みのための2つのコンポーネント、raftstore poolとapply poolを使用しています。
- TiKV において、ストレージ・エンジンである RocksDB インスタンスについては、2つの RocksDB インスタンスがあります。1つは Raft Log を永続化するもので、RocksDB Raft と呼ばれます。もう1つは実際のキー・バリュー・データを永続化するもので、RocksDB KV と呼ばれます。
- Leaderノードが書き込みコマンドを受け取ると、raftstoreプールはそれをRaft Logにシリアル化し、RocksDB Raftに永続化する（`Append`）。同時に、raftstoreプールはまた、フォロワーが配置されているTiKVノードにRaft Logを配布することも責任を持ちます（`Replicate`）。クラスタ内の多数のフォロワーがこのRaft Logを受け取ったとき、それをコミットしたとみなします。

次に、Apply Pool はコミットされたログ（Raft Log）を解析し、RocksDB KV に適用します。

5. リーダーは、キー=100、値=JackをKV RocksDBに適用し、その後クライアントに書き込み成功を返します。

6. その後、クライアントのコミットは成功とみなされ、他のセッションはデータを読み取ることができます。

TiKV でのデータ書き込みプロセスは上記の通りです。


