TiDBLightningの概要
TiDB Lightningは、大量のデータをTiDBクラスタに高速に完全にインポートするために使用されるツールです。 TiDBLightningはここからダウンロードできます。
現在、TiDB Lightningは、主に次の2つのシナリオで使用できます。
- 大量の新しいデータをすばやくインポートする
- すべてのバックアップデータを復元する
現在、TiDBLightningは以下をサポートしています。
- Dumpling 、CSVファイル、およびAmazonAuroraによって生成されたAuroraファイルでエクスポートされたファイルをインポートします。
- ローカルディスクまたはAmazonS3ストレージからのデータの読み取り。詳細については、 外部ストレージを参照してください。
TiDBLightningアーキテクチャ
完全なインポートプロセスは次のとおりです。
インポートする前に、
tidb-lightning
はTiKVクラスタを「インポートモード」に切り替えます。これにより、クラスタの書き込みが最適化され、自動圧縮が無効になります。tidb-lightning
は、データソースからすべてのテーブルのスケルトンを作成します。各テーブルは複数の連続したバッチに分割されるため、巨大なテーブル(200 GB以上)のデータを段階的かつ同時にインポートできます。
バッチごとに、
tidb-lightning
はKVペアを格納するためのエンジンファイルを作成します。次に、tidb-lightning
はデータソースを並列に読み取り、TiDBルールに従って各行をKVペアに変換し、これらのKVペアを一時ストレージ用のローカルファイルに書き込みます。完全なエンジンファイルが書き込まれると、
tidb-lightning
はこれらのデータを分割してスケジュールし、ターゲットTiKVクラスタにインポートします。エンジンファイルには、データエンジンとインデックスエンジンの2種類があり、それぞれが行データとセカンダリインデックスの2種類のKVペアに対応しています。通常、行データはデータソースで完全に並べ替えられますが、セカンダリインデックスは順序が狂っています。このため、データエンジンはバッチが完了するとすぐにアップロードされますが、インデックスエンジンは、テーブル全体のすべてのバッチがエンコードされた後にのみインポートされます。
テーブルに関連付けられているすべてのエンジンがインポートされた後、
tidb-lightning
は、ローカルデータソースとクラスタから計算されたエンジンとの間でチェックサム比較を実行し、プロセスでデータの破損がないことを確認します。最適なクエリプランニングの準備をするために、インポートされたすべてのテーブルをTiDBにANALYZE
指示します。将来の挿入で競合が発生しないように、AUTO_INCREMENT
の値を調整します。テーブルの自動インクリメントIDは、テーブルのデータファイルの合計ファイルサイズに比例する行数の推定上限によって計算されます。したがって、最終的な自動インクリメントIDは、実際の行数よりもはるかに大きいことがよくあります。 TiDBでは自動インクリメントが必ずしも順番に割り当てられるとは限りませんであるため、これは予想されます。
最後に、
tidb-lightning
はTiKVクラスタを「通常モード」に戻すため、クラスタは通常のサービスを再開します。
データインポートのターゲットクラスタがv3.x以前のバージョンの場合は、インポーターバックエンドを使用してデータをインポートする必要があります。このモードでは、 tidb-lightning
は解析されたKVペアをgRPC経由でtikv-importer
に送信し、 tikv-importer
はデータをインポートします。
TiDB Lightningは、データのインポートにTiDBバックエンドを使用することもサポートしています。このモードでは、 tidb-lightning
はデータをINSERT
のSQLステートメントに変換し、それらをターゲットクラスタで直接実行します。詳細については、 TiDBLightningバックエンドを参照してください。
制限
TiDB LightningをTiFlashと一緒に使用する場合:
テーブルにTiFlashレプリカがあるかどうかに関係なく、TiDBLightningを使用してそのテーブルにデータをインポートできます。これにより、TiDB Lightningの手順が遅くなる可能性があることに注意してください。これは、LightningホストのNIC帯域幅、TiFlashノードのCPUとディスクの負荷、およびTiFlashレプリカの数によって異なります。
TiDB LightningをTiDBと一緒に使用する場合:
TiDB Lightningは、v5.4.0より前のTiDBクラスターへの
charset=GBK
のテーブルのインポートをサポートしていません。Apache Parquetファイルの場合、TiDBLightningは現在Auroraファイルのみを受け入れます。