TiFlashの概要
TiFlashは、TiDBを本質的にハイブリッドトランザクション/分析処理(HTAP)データベースにする重要なコンポーネントです。 TiKVの列型ストレージ拡張として、TiFlashは優れた分離レベルと強力な一貫性の保証の両方を提供します。
TiFlashでは、柱状レプリカはRaftLearnerコンセンサスアルゴリズムに従って非同期に複製されます。これらのレプリカが読み取られると、スナップショット分離レベルの整合性は、Raftインデックスとマルチバージョン同時実行制御(MVCC)を検証することによって達成されます。
建築
上の図は、TiFlashノードを含むHTAP形式のTiDBのアーキテクチャです。
TiFlashは、ClickHouseによって効率的に実装されたコプロセッサーのレイヤーを備えた列型ストレージを提供します。 TiKVと同様に、TiFlashにもマルチラフトシステムがあり、リージョン単位でのデータの複製と配信をサポートします(詳細についてはデータストレージを参照)。
TiFlashは、TiKVでの書き込みをブロックしない低コストで、TiKVノードのデータのリアルタイムレプリケーションを実行します。一方、TiKVと同じ読み取り整合性を提供し、最新のデータが確実に読み取られるようにします。 TiFlashのRegionレプリカは、TiKVのRegionレプリカと論理的に同一であり、TiKVのLeaderレプリカと同時に分割およびマージされます。
TiFlashはTiDBとTiSparkの両方と互換性があり、これら2つのコンピューティングエンジンから自由に選択できます。
ワークロードを確実に分離するために、TiKVとは異なるノードにTiFlashを展開することをお勧めします。ビジネスの分離が必要ない場合は、TiFlashとTiKVを同じノードに展開することもできます。
現在、TiFlashに直接データを書き込むことはできません。学習者の役割としてTiDBクラスタに接続するため、TiKVでデータを書き込んでから、それをTiFlashに複製する必要があります。 TiFlashは、テーブル単位でのデータレプリケーションをサポートしていますが、展開後、デフォルトではデータはレプリケートされません。
指定されたテーブルのデータを複製するには、 テーブルのTiFlashレプリカを作成するを参照してください。
TiFlashには、列型ストレージモジュール、 tiflash proxy
、およびpd buddy
の3つのコンポーネントがあります。 tiflash proxy
は、マルチラフトコンセンサスアルゴリズムを使用した通信を担当します。 pd buddy
はPDと連携して、テーブル単位でTiKVからTiFlashにデータを複製します。
TiDBがDDLコマンドを受信してTiFlashにレプリカを作成すると、 pd buddy
コンポーネントは、TiDBのステータスポートを介して複製されるテーブルの情報を取得し、その情報をPDに送信します。次に、PDは、 pd buddy
によって提供される情報に従って、対応するデータスケジューリングを実行します。
主な機能
TiFlashには次の主要な機能があります。
非同期レプリケーション
TiFlashのレプリカは、特別な役割であるRaftLearnerとして非同期に複製されます。これは、TiFlashノードがダウンしている場合、またはネットワーク遅延が大きい場合でも、TiKVのアプリケーションは正常に続行できることを意味します。
このレプリケーションメカニズムは、自動負荷分散と高可用性というTiKVの2つの利点を継承しています。
- TiFlashは、追加のレプリケーションチャネルに依存しませんが、多対多の方法でTiKVからデータを直接受信します。
- TiKVでデータが失われない限り、いつでもTiFlashでレプリカを復元できます。
一貫性
TiFlashは、TiKVと同じスナップショット分離レベルの整合性を提供し、最新のデータが確実に読み取られるようにします。つまり、以前にTiKVで書き込まれたデータを読み取ることができます。このような一貫性は、データ複製の進行状況を検証することによって実現されます。
TiFlashが読み取り要求を受信するたびに、リージョンレプリカは進行状況検証要求(軽量RPC要求)をリーダーレプリカに送信します。 TiFlashは、現在のレプリケーションの進行状況に読み取り要求のタイムスタンプでカバーされるデータが含まれた後にのみ、読み取り操作を実行します。
インテリジェントな選択
TiDBは、TiFlash(列単位)またはTiKV(行単位)の使用を自動的に選択するか、1つのクエリで両方を使用して最高のパフォーマンスを確保することができます。
この選択メカニズムは、クエリを実行するために異なるインデックスを選択するTiDBのメカニズムに似ています。 TiDBオプティマイザーは、読み取りコストの統計に基づいて適切な選択を行います。
加速の計算
TiFlashは、次の2つの方法でTiDBのコンピューティングを高速化します。
- 列指向ストレージエンジンは、読み取り操作の実行においてより効率的です。
- TiFlashは、TiDBのコンピューティングワークロードの一部を共有します。
TiFlashは、TiKVコプロセッサーと同じ方法でコンピューティングワークロードを共有します。TiDBは、ストレージレイヤーで完了できるコンピューティングをプッシュダウンします。コンピューティングをプッシュダウンできるかどうかは、TiFlashのサポートに依存します。
詳細については、 サポートされているプッシュダウン計算を参照してください。
も参照してください
- TiFlashノードを使用して新しいクラスタをデプロイするには、 TiUPを使用してTiDBクラスタをデプロイするを参照してください。
- デプロイされたクラスタにTiFlashノードを追加するには、 TiFlashクラスタをスケールアウトするを参照してください。
- TiFlashを使用する 。
- TiFlashクラスタを管理する 。
- TiFlashのパフォーマンスを調整する 。
- TiFlashを構成する 。
- TiFlashクラスタを監視する 。
- 学ぶTiFlashアラートルール 。
- TiFlashクラスタのトラブルシューティング 。