DRDS分庫分表學習-如何高效掃描 DRDS 數據


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

常見的掃描場景如下:

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

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

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

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

 

 

執行 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)
  1. 非分庫分表的表默認存儲在第0個分庫。

  2. 針對 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 獲取最新的表拓撲結構。

若為分表,則 SQL 中的表名為分表名。

比如:

DRDS>SHOW TOPOLOGY FROM c_schedule
+--------------+-----------------------------------------------+----------------------+
| ID           | GROUP_NAME                                    | TABLE_NAME           |
+--------------+-----------------------------------------------+----------------------+
|            0 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0000 | c_schedule      |
+--------------+-----------------------------------------------+----------------------+
返回行數: 1 耗時: 6.00 ms.
DRDS>SHOW TOPOLOGY FROM cs_fb
+--------------+-----------------------------------------------+----------------------+
| ID           | GROUP_NAME                                    | TABLE_NAME           |
+--------------+-----------------------------------------------+----------------------+
|            0 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0000 | cs_fb_ojR3_00        |
|            1 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0000 | cs_fb_ojR3_01        |
|            2 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0000 | cs_fb_ojR3_02        |
|            3 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0001 | cs_fb_ojR3_03        |
|            4 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0001 | cs_fb_ojR3_04        |
|            5 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0001 | cs_fb_ojR3_05        |
|            6 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0002 | cs_fb_ojR3_06        |
|            7 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0002 | cs_fb_ojR3_07        |
|            8 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0002 | cs_fb_ojR3_08        |
|            9 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0003 | cs_fb_ojR3_09        |
|           10 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0003 | cs_fb_ojR3_10        |
|           11 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0003 | cs_fb_ojR3_11        |
|           12 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0004 | cs_fb_ojR3_12        |
|           13 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0004 | cs_fb_ojR3_13        |
|           14 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0004 | cs_fb_ojR3_14        |
|           15 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0005 | cs_fb_ojR3_15        |
|           16 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0005 | cs_fb_ojR3_16        |
|           17 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0005 | cs_fb_ojR3_17        |
|           18 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0006 | cs_fb_ojR3_18        |
|           19 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0006 | cs_fb_ojR3_19        |
|           20 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0006 | cs_fb_ojR3_20        |
|           21 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0007 | cs_fb_ojR3_21        |
|           22 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0007 | cs_fb_ojR3_22        |
|           23 | ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0007 | cs_fb_ojR3_23        |
+--------------+-----------------------------------------------+----------------------+
返回行數: 24 耗時: 18.00 ms.

查詢:

/!TDDL:node='ONE_www_ZyiZ_1586333425057BUHJ_VA8S_0006'*/ SELECT * FROM cs_fb_ojR3_19 ;

計算表的方法:比如:

select (2020*12+3)%8

2020為年,年*12,加上月份3,再除以物理庫8個。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM