zoukankan      html  css  js  c++  java
  • DRDS分库分表学习-按月份拆分表

    使用要求

    • 拆分键的类型必须是 DATE / DATETIME / TIMESTAMP 其中之一。
    • DRDS 实例的版本必须是 5.1.28-1320920 及其以上的版本。DRDS 版本说明请参考文档版本说明。

    路由方式

    根据拆分键的时间值的年份月份进行计算哈希值,然后再按分库数去取余,完成路由计算。

    例如:YYYYMM(‘2012-12-31 12:12:12’) 等价于 (2012 * 12 + 12) % D, (D 是分库数目)。

    使用场景

    适合于需要按年份月份进行分库的场景,建议该函数会与 tbpartition YYYYMM(ShardKey) 联合使用。

    例如,假设用户的 DRDS 里已经分了 8 个物理库,现业务有如下的场景:

    1. 一个业务想按年月进行分库;
    2. 要求是同一个月的数据能落在同一张分表,并且两年以内的每个月都单独对应一张分表
    3. 查询时带上分库分表键后能直接将查询落在某个物理分库的某个物理分表。

    那么, 用户这时就可以使用 YYYYMM 的分库函数进行解决:业务要求两年以内的每个月都对应一张分表(就是一个月一张表),由于一年有 12 个月,所以至少需要创建 24 个物理分表才能满足用户的场景,而用户的 DRDS 有 8 个分库,所以每个分库应该建 3 张物理分表。因此,与用户业务场景应该对应的 DDL 应该是:

        create table test_yyyymm_tb (    
            id int, 
            name varchar(30) DEFAULT NULL,  
            create_time datetime DEFAULT NULL,
            primary key(id)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 
        dbpartition by YYYYMM(create_time)
        tbpartition by YYYYMM(create_time) tbpartitions 3;

    注意事项

    • YYYYMM 不支持对于每一个年月都独立对应一张分表,YYYYMM 的分库分表必须固定分表数目。
    • 当月份经过一个轮回(如 2013-03 是 2012-03 的一个轮回)后,同一个月份就有可能被路由到同一个分库分表,视实际的分表数目而定。
  • 相关阅读:
    golang 的几个入门资料
    docker 容器网络基础
    nginx 容器反向代理网址的设置
    【知乎Live】狼叔:如何正确的学习Node.js
    nginx资料汇总
    web 框架
    work behind corp proxy
    [转载] 历史上前端领域的重要技术革命
    前后端要不要分离以及如何做
    微电子工艺基础知识讲解(集成电路历史/厂商/产业链)
  • 原文地址:https://www.cnblogs.com/puzi0315/p/12666874.html
Copyright © 2011-2022 走看看