如何高效掃描 DRDS 數據

 

DRDS 支持高效的數據掃描方式,並支持在全表掃描時使用聚合函數進行統計彙總。

常見的掃描場景如下:

沒有分庫分表: DRDS 會把原 SQL 傳遞到後端 MySQL 執行。這種情況下 DRDS 支持任何聚合函數。

非全表掃描:SQL 經過 DRDS 路由後,發送到單個 MySQL 庫上執行。比如說拆分鍵在 WHERE 中是等於關係時,就會出現非全表掃描。此時同樣可以支持任何聚合函數。

全表掃描:目前支持的聚合函數有 COUNT、MAX、MIN、SUM。另外在全表掃描時同樣支持 LIKE、ORDER BY 、LIMIT 以及 GROUP BY 語法。

並行的全表掃描:如果需要從所有庫導出數據,可以通過 SHOW 指令查看錶拓撲結構,針對分表並行處理。詳見下文。

通過 HINT 來進行表遍歷

執行 SHOW TOPOLOGY FROM TABLE_NAME 指令獲取表拓撲結構。

mysql:> SHOW TOPOLOGY FROM DRDS_USERS;
+------+-------------------+--------------+
| ID   | GROUP_NAME        | TABLE_NAME   |
+------+-------------------+--------------+
|    0 | DRDS_00_RDS       | drds_users   |
|    1 | DRDS_01_RDS       | drds_users   |
+------+-------------------+--------------+
2 rows in set (0.06 sec)
非分庫分表的表默認存儲在第0個分庫。

針對 TOPOLOGY 進行單表遍歷。  

第0個分庫運行當前 SQL
/!TDDL:node='DRDS_00_RDS'*/ SELECT * FROM DRDS_USERS;

第1個分庫運行當前 SQL
/!TDDL:node='DRDS_01_RDS'*/ SELECT * FROM DRDS_USERS;

注意:推薦每次掃描前執行 SHOW TOPOLOGY FROM TABLE_NAME 獲取最新的表拓撲結構。

並行掃描

DRDS 支持 mysqldump 指令導出數據。但如果想要更快地掃描數據,可以針對每個分表開啓多個會話的方式並行加速掃描。

mysql> SHOW TOPOLOGY FROM LJLTEST;
+------+----------------+------------+
| ID   | GROUP_NAME     | TABLE_NAME |
+------+----------------+------------+
|    0 | TDDL5_00_GROUP | ljltest_00 |
|    1 | TDDL5_00_GROUP | ljltest_01 |
|    2 | TDDL5_00_GROUP | ljltest_02 |
|    3 | TDDL5_01_GROUP | ljltest_03 |
|    4 | TDDL5_01_GROUP | ljltest_04 |
|    5 | TDDL5_01_GROUP | ljltest_05 |
|    6 | TDDL5_02_GROUP | ljltest_06 |
|    7 | TDDL5_02_GROUP | ljltest_07 |
|    8 | TDDL5_02_GROUP | ljltest_08 |
|    9 | TDDL5_03_GROUP | ljltest_09 |
|   10 | TDDL5_03_GROUP | ljltest_10 |
|   11 | TDDL5_03_GROUP | ljltest_11 |
+------+----------------+------------+
12 rows in set (0.06 sec)
如上所示該表有四個分庫,每個分庫有三個分表。使用以下的 SQL 對 TDDL5_00_GROUP 庫上的分表進行操作:

/!TDDL:node='TDDL5_00_GROUP'*/ select * from ljltest_00;
注意: HINT 中的 TDDL5_00_GROUP 與 SHOW TOPOLOGY 指令結果中的 GROUP_NAME 列相對應。另外 SQL 中的表名爲分表名。

此時可開啓最多12個會話(分別對應12張分表)並行處理數據。

參考 : https://developer.aliyun.com/ask/202509?spm=a2c6h.13524658

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章