TiDB グローバルソート
注記:
この機能はTiDB Cloudサーバーレスクラスターでは使用できません。
概要
TiDB グローバル ソート機能は、データ インポートおよび DDL (データ定義言語) 操作の安定性と効率性を高めます。1 TiDB 分散実行フレームワーク (DXF)汎用演算子として機能し、クラウド上でグローバル ソート サービスを提供します。
グローバルソート機能は現在、クラウドstorageとして Amazon S3 の使用のみをサポートしています。将来のリリースでは、POSIX などの複数の共有storageインターフェースをサポートするように拡張され、さまざまなstorageシステムとのシームレスな統合が可能になります。この柔軟性により、さまざまなユースケースで効率的かつ適応性の高いデータソートが可能になります。
ユースケース
グローバルソート機能は、 IMPORT INTO
とCREATE INDEX
の安定性と効率性を高めます。タスクによって処理されるデータをグローバルにソートすることで、TiKV へのデータ書き込みの安定性、制御性、スケーラビリティが向上します。これにより、データインポートおよび DDL タスクのユーザーエクスペリエンスが向上し、サービスの品質が向上します。
グローバル ソート機能は、統合された DXF 内でタスクを実行し、グローバル規模でデータの効率的かつ並列的なソートを保証します。
制限事項
現在、グローバル ソート機能は、クエリ結果のソートを担当するクエリ実行プロセスのコンポーネントとして使用されていません。
使用法
グローバルソートを有効にするには、次の手順に従います。
値を
tidb_enable_dist_task
からON
に設定して DXF を有効にします。SET GLOBAL tidb_enable_dist_task = ON;
tidb_cloud_storage_uri
正しいクラウドstorageパスに設定します。3 例参照してください。SET GLOBAL tidb_cloud_storage_uri = 's3://my-bucket/test-data?role-arn=arn:aws:iam::888888888888:role/my-role'
注記:
IMPORT INTO
の場合、CLOUD_STORAGE_URI
オプションを使用してクラウドstorageパスを指定することもできます。tidb_cloud_storage_uri
とCLOUD_STORAGE_URI
両方に有効なクラウドstorageパスが設定されている場合、CLOUD_STORAGE_URI
の設定がIMPORT INTO
に有効になります。
実施原則
グローバル ソート機能のアルゴリズムは次のとおりです。
詳細な実装原則は次のとおりです。
ステップ1: データをスキャンして準備する
TiDB ノードが特定の範囲のデータをスキャンした後 (データ ソースは CSV データまたは TiKV のテーブル データのいずれかになります)、次のようになります。
- TiDB ノードはそれらをキーと値のペアにエンコードします。
- TiDB ノードは、キーと値のペアを複数のブロック データ セグメントに分類します (データ セグメントはローカルに分類されます)。各セグメントは 1 つのファイルであり、クラウドstorageにアップロードされます。
TiDB ノードは、各セグメントの実際のキーと値の範囲 (統計ファイルと呼ばれる) も連続して記録します。これは、スケーラブルなソートの実装に不可欠な準備です。これらのファイルは、実際のデータとともにクラウドstorageにアップロードされます。
ステップ2: データを分類して分配する
ステップ 1 から、グローバル ソート プログラムは、ソートされたブロックのリストとそれに対応する統計ファイルを取得します。これにより、ローカルにソートされたブロックの数が得られます。プログラムには、PD が分割および分散に使用できる実際のデータ スコープもあります。次の手順が実行されます。
- 統計ファイル内のレコードを並べ替えて、ほぼ等しいサイズの範囲に分割します。これは、並列で実行されるサブタスクです。
- サブタスクを TiDB ノードに分散して実行します。
- 各 TiDB ノードは、サブタスクのデータを範囲ごとに独立して分類し、重複することなく TiKV に取り込みます。