分散型リレーショナルデータベースサービス (PolarDB-X 1.0) は、効率的なデータスキャンをサポートし、テーブル全体のスキャン中に統計的な集計に集計関数を使用します。
一般的なスキャンシナリオ
- データベースまたはテーブルシャードのないテーブルのスキャン: PolarDB-X 1.0は、元のSQL文をバックエンドのApsaraDB RDS for MySQLデータベースに送信して実行します。 この場合、PolarDB-X 1.0は任意の集約関数をサポートします。
- 非フルテーブルスキャン: PolarDB-X 1.0を通過したSQLは、元のSQLステートメントを各ApsaraDB RDS for MySQLデータベースに送信して実行します。 たとえば、WHERE句のシャードキーが "equal to" を示している場合、非フルテーブルスキャンが実行されます。 この場合、PolarDB-X 1.0はすべての集計関数もサポートします。
- フルテーブルスキャン: 現在サポートされている集計関数は、COUNT、MAX、MIN、およびSUMです。さらに、LIKE、ORDER BY、LIMIT、およびGROUP BYもフルテーブルスキャン中にサポートされます。
- すべてのテーブルシャードの並列スキャン: すべてのデータベースからデータをエクスポートする必要がある場合は、SHOWコマンドを実行してテーブルトポロジを表示し、すべてのテーブルシャードを並列にスキャンできます。 詳細については、以下をご参照ください。
ヒントを使用したトラバーステーブル
- 実行
TABLE_NAMEからTOPOLOGYを表示する
テーブルトポロジを取得します。mysql> DRDS_USERSからTOPOLOGYを表示します。------ ------------------- ---------------- | ID | GROUP_NAME | テーブル名 | ------ ------------------- ---------------- | 0 | DRDS_00_RDS | DRDS_USERS | | 1 | DRDS_01_RDS | DRDS_USERS | ------ ------------------- ---------------- セットの2列 (0.06秒)
説明- デフォルトでは、非シャーディングテーブルはデータベースシャード0に格納されます。
SHOW TOPOLOGY FROM TABLE_NAME
を実行して、各スキャン操作の前に最新のテーブルトポロジを取得することを推奨します。
- トポロジに基づいて各テーブルをトラバースします。
- データベースシャード0で現在のSQLステートメントを実行します。
/! TDDL:node='DRDS_00_RDS '*/ SELECT * FROM DRDS_USERS;
- データベースシャード1で現在のSQLステートメントを実行します。
/! TDDL:node='DRDS_01_RDS '*/ SELECT * FROM DRDS_USERS;
- データベースシャード0で現在のSQLステートメントを実行します。
並列スキャン
PolarDB-X 1.0を使用すると、mysqldumpを実行してデータをエクスポートできます。 ただし、データをより高速にスキャンしたい場合は、テーブルシャードごとに複数のセッションを有効にして、テーブルを並列にスキャンできます。
mysql> LJLTESTからTOPOLOGYを表示します。------ ---------------- -------------
| ID | GROUP_NAME | テーブル名 |
------ ---------------- -------------
| 0 | TDL5_00_GROUP | ljltest_00 |
| 1 | TDL5_00_GROUP | ljltest_01 |
| 2 | TDL5_00_GROUP | ljltest_02 |
| 3 | TDL5_01_GROUP | ljltest_03 |
| 4 | TDL5_01_GROUP | ljltest_04 |
| 5 | TDL5_01_GROUP | ljltest_05 |
| 6 | TDL5_02_GROUP | ljltest_06 |
| 7 | TDL5_02_GROUP | ljltest_07 |
| 8 | TDL5_02_GROUP | ljltest_08 |
| 9 | TDL5_03_GROUP | ljltest_09 |
| 10 | TDL5_03_GROUP | ljltest_10 |
| 11 | TDL5_03_GROUP | ljltest_11 |
------ ---------------- -------------
セットの12行 (0.06秒)
上記のように、テーブルには4つのデータベースシャードがあり、各データベースシャードには3つのテーブルシャードがあります。 TDDL5_00_GROUPデータベースのテーブルシャードで次のSQL文を実行します。
/! TDDL:node='TDDL5_00_GROUP '*/ select * from ljltest_00;
説明
- HINTのTDDL5_00_GROUPは、SHOW TOPOLOGYコマンドの出力のGROUP_NAME列に対応します。
- SQL文のテーブル名は、テーブルシャード名です。
- この時点で、最大12のセッション (それぞれ12のテーブルシャードに対応) を有効にして、データを並行して処理できます。