zoukankan      html  css  js  c++  java
  • sharding-jdbc—分片策略:Inline行表达式分片策略InlineShardingStrategy(2)

    一、Inline行表达式分片策略InlineShardingStrategy

    • 使用Groovy的Inline表达式,提供对SQL语句中的=和IN的分片操作支持。
    • InlineShardingStrategy只支持单分片键
    • 对于简单的分片算法,可以通过简单的配置使用,从而避免繁琐的Java代码开发,如: tuser${user_id % 8} 表示t_user表按照user_id按8取模分成8个表,表名称为t_user_0到t_user_7

    二、StandardShardingStrategy配置实现

    Sharding -jdbc 在使用分片策略的时候,与分片算法是成对出现的,每种策略都对应一到两种分片算法(不分片策略NoneShardingStrategy除外)

    分库分表最核心的两点SQL 路由  、 SQL 改写 

    SQL 路由:解析原生SQL,确定需要使用哪些数据库,哪些数据表

    SQL 改写:将SQL 按照一定规则,重写FROM 的数据库和表名(Route 返回路由决定需要去哪些库表中执行SQL)

    application.properties 配置

       配置主要分为三个部分

      1. 配置数据源
      2. 分库配置  
      3. 分表配置
    #数据源配置,有多少个数据库,就配置多少个数据源(库多的时候比较繁琐,可以采用数据治理),相比于Mycat 配置还是简单很多
    #数据源名字随意,但是配置数据源时必须名字能对应
    sharding.jdbc.datasource.names=ds0,ds1
     
    sharding.jdbc.datasource.ds0.type=com.alibaba.druid.pool.DruidDataSource
    sharding.jdbc.datasource.ds0.driver-class-name=com.mysql.jdbc.Driver
    sharding.jdbc.datasource.ds0.url=jdbc:mysql://192.168.8.162:3306/test1?useUnicode=yes&characterEncoding=utf8
    sharding.jdbc.datasource.ds0.username=root
    sharding.jdbc.datasource.ds0.password=root
     
    sharding.jdbc.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource
    sharding.jdbc.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver
    sharding.jdbc.datasource.ds1.url=jdbc:mysql://192.168.8.162:3306/test2?useUnicode=yes&characterEncoding=utf8
    sharding.jdbc.datasource.ds1.username=root
    sharding.jdbc.datasource.ds1.password=root
     
    #  ----------------------分库配置--------------------------
    # database-strategy.inline 库分片策略   +   指定分库的分片键
    sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=id
    # database-strategy.inline.algorithm-expression 分片算法表达式
    sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=ds$->{id % 2}
    #  设置绑定表 t_user
    sharding.jdbc.config.sharding.binding-tables=t_user
     
     
    # ---------------------- t_user分表配置----------------------
    # t_user 分库分表后真实的数据节点(逻辑表 -> 真实表)
    sharding.jdbc.config.sharding.tables.t_user.actual-data-nodes=ds$->{0..1}.t_user_$->{0..3}
    #   分片键设置
    sharding.jdbc.config.sharding.tables.t_user.table-strategy.inline.sharding-column=id
    sharding.jdbc.config.sharding.tables.t_user.table-strategy.inline.algorithm-expression=t_user_$->{id % 2}
     
     
    sharding.jdbc.config.props.sql.show=true
  • 相关阅读:
    JAVA中的注解小结
    终结任务
    共享资源访问
    基本线程机制
    HashSet、LinkedHashSet、TreeSet
    EnumMap
    LinkedHashMap及其源码分析
    集合迭代器快速失败行为及CopyOnWriteArrayList
    LinkedList
    比特币中的Base58 编码
  • 原文地址:https://www.cnblogs.com/h-z-y/p/14298330.html
Copyright © 2011-2022 走看看