zoukankan      html  css  js  c++  java
  • ShardingSphere系列(二)——ShardingSphere-JDBC绑定表

    完整的项目示例地址:https://gitee.com/learnhow/shardingsphere/tree/v1.1/jdbc

    紧接上一篇文章,这次我们介绍绑定表的概念。

    绑定表指分片规则一致的主表和子表。绑定表之间的多表关联查询不会出现笛卡尔积关联,关联查询效率将大大提升。简而言之,在互为绑定表上进行的查询操作只会在一个库中进行。绑定表的关键是各表的分片算法一致,在插入数据的时候才能够保证讲相同策略的多表数据插入到同一个库中。

    1.分片配置

    spring.shardingsphere.rules.sharding.tables.t_order.actual-data-nodes=ds$->{0..1}.t_order
    spring.shardingsphere.rules.sharding.tables.t_order_item.actual-data-modes=ds$->{0..1}.t_order_item
    
    spring.shardingsphere.rules.sharding.tables.t_order.database-strategy.standard.sharding-column=order_id
    spring.shardingsphere.rules.sharding.tables.t_order.database-strategy.standard.sharding-algorithm-name=database-inline
    
    spring.shardingsphere.rules.sharding.tables.t_order_item.database-strategy.standard.sharding-column=order_id
    spring.shardingsphere.rules.sharding.tables.t_order_item.database-strategy.standard.sharding-algorithm-name=database-inline
    
    spring.shardingsphere.rules.sharding.sharding-algorithms.database-inline.type=INLINE
    spring.shardingsphere.rules.sharding.sharding-algorithms.database-inline.props.algorithm-expression=ds$->{order_id % 2}

    2.绑定表配置

    spring.shardingsphere.rules.sharding.binding-tables[0]=t_order,t_order_item

    如果采用snowflake作为主键生成策略并作为分片键,我们需要一个外部的算法依赖。

    package com.yet.shardingshere.jdbc.conf;
    
    import cn.hutool.core.lang.Snowflake;
    import cn.hutool.core.net.NetUtil;
    import cn.hutool.core.util.IdUtil;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    import javax.annotation.PostConstruct;
    
    @Component
    public class IdGenerator {
        /**
         * 1号机器  0-31
         */
        @Value("${customize.node-id}")
        private long nodeId = 1;
    
        private Snowflake snowflake;
    
        @PostConstruct
        public void init() {
            long workerId = 0;
            try {
                workerId = NetUtil.ipv4ToLong(NetUtil.getLocalhostStr()) % 32;
            } catch (Exception e) {
                e.printStackTrace();
                workerId = NetUtil.getLocalhostStr().hashCode() % 32;
            }
            snowflake = IdUtil.createSnowflake(workerId, nodeId);
        }
    
        public synchronized long snowflakeId() {
            return snowflake.nextId();
        }
    }

    附录1.配置项说明

    spring.shardingsphere.datasource.names= # 省略数据源配置,请参考使用手册
    
    # 标准分片表配置
    spring.shardingsphere.rules.sharding.tables.<table-name>.actual-data-nodes= # 由数据源名 + 表名组成,以小数点分隔。多个表以逗号分隔,支持inline表达式。缺省表示使用已知数据源与逻辑表名称生成数据节点,用于广播表(即每个库中都需要一个同样的表用于关联查询,多为字典表)或只分库不分表且所有库的表结构完全一致的情况
    
    # 分库策略,缺省表示使用默认分库策略,以下的分片策略只能选其一
    
    # 用于单分片键的标准分片场景
    spring.shardingsphere.rules.sharding.tables.<table-name>.database-strategy.standard.<sharding-algorithm-name>.sharding-column= # 分片列名称
    spring.shardingsphere.rules.sharding.tables.<table-name>.database-strategy.standard.<sharding-algorithm-name>.sharding-algorithm-name= # 分片算法名称
    
    # 用于多分片键的复合分片场景
    spring.shardingsphere.rules.sharding.tables.<table-name>.database-strategy.complex.<sharding-algorithm-name>.sharding-columns= # 分片列名称,多个列以逗号分隔
    spring.shardingsphere.rules.sharding.tables.<table-name>.database-strategy.complex.<sharding-algorithm-name>.sharding-algorithm-name= # 分片算法名称
    
    # 用于Hint 的分片策略
    spring.shardingsphere.rules.sharding.tables.<table-name>.database-strategy.hint.<sharding-algorithm-name>.sharding-algorithm-name= # 分片算法名称
    
    # 分表策略,同分库策略
    spring.shardingsphere.rules.sharding.tables.<table-name>.table-strategy.xxx= # 省略
    
    # 自动分片表配置
    spring.shardingsphere.rules.sharding.auto-tables.<auto-table-name>.actual-data-sources= # 数据源名
    
    spring.shardingsphere.rules.sharding.auto-tables.<auto-table-name>.sharding-strategy.standard.sharding-column= # 分片列名称
    spring.shardingsphere.rules.sharding.auto-tables.<auto-table-name>.sharding-strategy.standard.sharding-algorithm= # 自动分片算法名称
    
    # 分布式序列策略配置
    spring.shardingsphere.rules.sharding.tables.<table-name>.key-generate-strategy.column= # 分布式序列列名称
    spring.shardingsphere.rules.sharding.tables.<table-name>.key-generate-strategy.key-generator-name= # 分布式序列算法名称
    
    spring.shardingsphere.rules.sharding.binding-tables[0]= # 绑定表规则列表
    spring.shardingsphere.rules.sharding.binding-tables[1]= # 绑定表规则列表
    spring.shardingsphere.rules.sharding.binding-tables[x]= # 绑定表规则列表
    
    spring.shardingsphere.rules.sharding.broadcast-tables[0]= # 广播表规则列表
    spring.shardingsphere.rules.sharding.broadcast-tables[1]= # 广播表规则列表
    spring.shardingsphere.rules.sharding.broadcast-tables[x]= # 广播表规则列表
    
    spring.shardingsphere.sharding.default-database-strategy.xxx= # 默认数据库分片策略
    spring.shardingsphere.sharding.default-table-strategy.xxx= # 默认表分片策略
    spring.shardingsphere.sharding.default-key-generate-strategy.xxx= # 默认分布式序列策略
    
    # 分片算法配置
    spring.shardingsphere.rules.sharding.sharding-algorithms.<sharding-algorithm-name>.type= # 分片算法类型
    spring.shardingsphere.rules.sharding.sharding-algorithms.<sharding-algorithm-name>.props.xxx=# 分片算法属性配置
    
    # 分布式序列算法配置
    spring.shardingsphere.rules.sharding.key-generators.<key-generate-algorithm-name>.type= # 分布式序列算法类型
    spring.shardingsphere.rules.sharding.key-generators.<key-generate-algorithm-name>.props.xxx= # 分布式序列算法属性配置
  • 相关阅读:
    将IIS中网站日志批量导入到mysql【python】
    Python网站日志分析
    python 获取文件版本号和修改时间
    python将IIS日志导入到SQL
    python2.7 MySQLdb模块在win32下安装
    《python核心编程》课后题第二版第十五章463页
    python批量文件重命名
    python随机生成彩票号码
    python获取IP归属地
    百度收录批量查询【python版】
  • 原文地址:https://www.cnblogs.com/learnhow/p/14966644.html
Copyright © 2011-2022 走看看