# TiKVサーバーのアーキテクチャー

+ 永続的なデータ
+ 一貫性
+ `MVCC`
+ 分散トランザクション
+ コプロセッサー

![`smart`](TiKVArchitectureAndRole_aa_001_20220511.png)

------------------------------------------------------------------------------
前の単元で、TiDBサーバーがSQLレイヤーとしてMySQLプロトコル接続エンドポイントをクライアントプログラムに公開することを学びました。それは、クライアント接続を受け入れ、SQLの解析と最適化を実行し、最終的に分散実行計画を生成するのに責任があります。TiDBサーバー自体はステートレスです。

TiKVの主な機能は、TiDBのデータの永続性を提供することです。これはRocksDBをTiKVに統合することによって達成されます。そのため、TiKV内のRocksDBのデータの書き込み（つまり、永続性）と読み取り、およびRocksDBカラムファミリーの機能の紹介に焦点を当てます。

TiKV の特徴の1つに、分散トランザクションとMVCC のサポートがあります。

TiDB では、TiKV は分散ストレージエンジンです。データは分散してリージョンに格納されるため、分散環境でのデータの強い一貫性を実現するために Raft分散合意アルゴリズムを使用します。

各リージョンとそのレプリカがRaftグループを構成し、複数のRaftグループの組み合わせをMulti-Raftと呼びます。Raftの冗長化とLeader選出、そしてRaft分散合意アルゴリズムに基づくデータの書き込み、読み取り、分割、およびマージを紹介します。ここでRaft分散合意アルゴリズムに基づく書き込みと読み取りは、先に述べたRocksDBの書き込みと読み取りとは異なります。

RocksDBの書き込みと読み込みは、単一のTiKVノード上のデータの永続性と一貫性を保証することを主に指していますが、Raft分散合意アルゴリズムに基づいた書き込みと読み込みは、複数のTiKVノードを主に担当しています。

TiKVのコプロセッサー機能により、オペレーターをプッシュダウンする能力が与えられます。この機能を使用して、フィルタリング、集計、投影などのいくつかのSQL計算ワークロードをTiKVインスタンスに渡すことができます。これにより、TiKVからTiDBサーバー（実行計画中の`root`ノード）への一部のデータの送信を不要にし、ネットワーク帯域幅とTiDBサーバーのCPU負荷を節約できます。コプロセッサーは並列で動作します。