zoukankan      html  css  js  c++  java
  • Sharding-Sphere 水平分表

    逻辑表

    水平拆分数据表的总称,如果真实表是t_order_1,t_order_2,....t_order_5,在进行表操作的时候并不能使用真实表名称,必须使用逻辑表名称t_order

    真实表

    • 数据库中真实的表

    数据节点

    • 数据分片的最小物理单元,有数据源名称和数据表组成

    绑定表

    • t_product(product_id),t_product_descrition(product_id),

    • 指定分片规则一致的主表和从表

    非绑定表:进行联表查询的时候会出现笛卡尔积 3 x 3 = 9

    绑定表: 进行联表查询的时候不会出现笛卡尔积 3 x 3 = 3

    新建一个springboot 项目

    配置application.properties 文件

    server.port=43210
    spring.application.name = sharding-jdbc-quickstart-demo
    server.servlet.context-path = /sharding-jdbc-quickstart-demo
    spring.http.encoding.enabled = true
    spring.http.encoding.charset = UTF-8
    spring.http.encoding.force = true
    mybatis.configuration.map-underscore-to-camel-case = true
    #spring.profiles.active=masterslave
    
    
    
    
    # 自定义数据源
    spring.shardingsphere.datasource.names = m1
    spring.shardingsphere.datasource.m1.type = com.alibaba.druid.pool.DruidDataSource
    spring.shardingsphere.datasource.m1.driver-class-name = com.mysql.jdbc.Driver
    spring.shardingsphere.datasource.m1.url = jdbc:mysql://localhost:3306/user_db?useUnicode=true&useSSL=false
    spring.shardingsphere.datasource.m1username = root
    spring.shardingsphere.datasource.m1.password = root
    
    # 以下是分片规则配置
    # 指定t_order表的数据分布情况,配置数据节点
    # t_order 逻辑表名
    # insert into t_order () values ()
    # $->{1..2} => 1, 2 => t_order_1,t_order_2
    spring.shardingsphere.sharding.tables.t_order.actual-data-nodes = m1.t_order_$->{1..2}
    #spring.shardingsphere.sharding.tables.t_user.actual-data-nodes =ds0.t_user
    
    # 指定t_order表的主键生成策略为SNOWFLAKE
    spring.shardingsphere.sharding.tables.t_order.key-generator.column=order_id
    #雪花片算法,另一种
    spring.shardingsphere.sharding.tables.t_order.key-generator.type=SNOWFLAKE
    
    # 指定t_order表的分片策略,分片策略包括分片键和分片算法
    spring.shardingsphere.sharding.tables.t_order.table-strategy.inline.sharding-column = order_id
    spring.shardingsphere.sharding.tables.t_order.table-strategy.inline.algorithm-expression = t_order_$->{order_id % 2 + 1}
    
    
    # 打开sql输出日志
    spring.shardingsphere.props.sql.show = true
    logging.level.root = info
    #logging.level.org.springframework.web=info
    #logging.level.com.itheima.dbsharding=debug
    #logging.level.druid.sql=debug

    mapper 文件

        @Insert("insert into t_order(price,user_id,status)values(#{price},#{userId},#{status})")
        int insertOrderInfo(@Param("price") BigDecimal price, @Param("userId")Long userId, @Param("status")String status);

    test 测试类

     @Autowired
        public OrderMapper orderMapper;
    
        @Test
        public void testInsertOrder(){
            for (int i = 0 ; i<10; i++){
                orderMapper.insertOrderInfo(new BigDecimal((i+1)*4),1L,"Success");
            }
        }

    成功界面:

     

    数据库中含有t_order_1 和 t_order_1  两张表

     

    DROP TABLE IF EXISTS `t_order_1`;
    CREATE TABLE `t_order_1`  (
      `order_id` bigint(20) NOT NULL COMMENT '订单id',
      `price` decimal(10, 2) NOT NULL COMMENT '订单价格',
      `user_id` bigint(20) NOT NULL COMMENT '下单用户id',
      `status` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '订单状态',
      PRIMARY KEY (`order_id`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Table structure for t_order_2
    -- ----------------------------
    DROP TABLE IF EXISTS `t_order_2`;
    CREATE TABLE `t_order_2`  (
      `order_id` bigint(20) NOT NULL COMMENT '订单id',
      `price` decimal(10, 2) NOT NULL COMMENT '订单价格',
      `user_id` bigint(20) NOT NULL COMMENT '下单用户id',
      `status` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '订单状态',
      PRIMARY KEY (`order_id`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

     

     

     

     

     

  • 相关阅读:
    部署时,出现用户代码未处理 System.Security.Cryptography.CryptographicException 错误解决方法
    sqlserver学习笔记(三)—— 为数据库添加新的用户
    [.Net MVC] Win7下IIS部署
    CSS的4种引入方式及优先级
    阿里巴巴图标库全部下载
    div的默认position值是静态的static
    阿里巴巴图标库iconfont上传svg后,显示不了图片
    ext.net单元格内容换行显示
    WEB内容换行
    SQL修改日期类型字段为字符串类型
  • 原文地址:https://www.cnblogs.com/alomsc/p/13530515.html
Copyright © 2011-2022 走看看