zoukankan      html  css  js  c++  java
  • 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个。

  • 相关阅读:
    SpringMVC中静态获取request对象 Spring中获取 HttpServletRequest对象【转载】
    springcloud 的loadbalancer 轮询算法切换方法 2021.4.3
    springboot项目启动增加图标
    rabbitmq 端口作用以及修改方法
    centos8 安装rabbitmq
    springcloud config client Value获取不到信息的问题的处理方法
    springcloud config配置git作为数据源然后启动报错 If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
    Sublime Text的列模式如何操作
    centos8 安装redis
    jQuery简单的Ajax调用
  • 原文地址:https://www.cnblogs.com/puzi0315/p/12667205.html
Copyright © 2011-2022 走看看