首页 > 其他分享 >ShardingSphere水平分表策略配置和测试实战

ShardingSphere水平分表策略配置和测试实战

时间:2023-07-21 17:24:16浏览次数:38  
标签:实战 取模 jdbc ShardingSphere 数据库 ds0 分表 数据

  • 概念

    • 水平分表

      • 把一个表的数据分到一个数据库的多张表中,每个表只有这个表的部分数据

      • 核心是把一个大表,分割N个小表,每个表的结构是一样的,数据不一样,全部表的数据合起来就是全部数据

      • 针对数据量巨大的单张表(比如订单表),按照某种规则(RANGE,HASH取模等),切分到多张表里面去

      • 但是这些表还是在同一个库中,所以单数据库操作还是有IO瓶颈,主要是解决单表数据量过大的问题

      • 减少锁表时间,没分表前,如果是DDL(create/alter/add等)语句,当需要添加一列的时候mysql会锁表,期间所有的读写操作只能等待

    • 水平分表的适用场景

      • 当一张表的数据达到几千万时,查询一次所花的时间长,需要进行优化,缩短查询时间
        • 微博发送记录、微信消息记录、日志记录。以id增长或时间划分
        • 网站签到等活动流水数据。以时间划分
实战样板
  • 依赖引入

        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
            <version>4.1.1</version>
        </dependency>
    
  • application

    # 数据源 ds0 第一个数据库  --- 版本:mysql8
      shardingsphere:
        datasource:
          ds0:
            connectionTimeoutMilliseconds: 30000
            driver-class-name: com.mysql.cj.jdbc.Driver
            idleTimeoutMilliseconds: 60000
            jdbc-url: jdbc:mysql://[ip]:3306/[数据库]?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
            maintenanceIntervalMilliseconds: 30000
            maxLifetimeMilliseconds: 1800000
            maxPoolSize: 50
            minPoolSize: 50
            password: [密码]
            type: com.zaxxer.hikari.HikariDataSource
            username: [用户名]
          names: ds0
    
        props:
          # 打印执行的数据库以及语句
          sql:
            show: true
    
        sharding:
          tables:
            [表名]:
              # 指定表的数据分布情况,配置数据节点,行表达式标识符使用 ${...} 或 $->{...},但前者与 Spring 本身的文件占位符冲突,所以在 Spring 环境中建议使用 $->{...}
              actual-data-nodes: ds0.[表名_]$->{0..1}
              # 水平分表策略+行表达式分片
              table-strategy:
                inline:
                  algorithm-expression: [表名_]$->{[取模字段] % 2}
                  sharding-column: [取模字段]
    
    
  • 测试

        @Test
        public void  testSaveTraffic(){
            Random random = new Random();
            for(int i=0;i<10;i++){
                TrafficDO trafficDO = new TrafficDO();
                // 设置取模字段的值  Int
                trafficDO.setAccountNo(Long.valueOf(random.nextInt(1000)));
                trafficMapper.insert(trafficDO);
            }
        }
    
  • 结果分析

    • 取模字段accountNo为偶数的对象,存储到traffic_0表
    • 取模字段accountNo为奇数的对象,存储到traffic_1表
    • 实现水平分表
    • 缺陷: 主键id重复

标签:实战,取模,jdbc,ShardingSphere,数据库,ds0,分表,数据
From: https://www.cnblogs.com/xietingwei/p/17571979.html

相关文章

  • abp-vnext-pro 实战(一,如何增加菜单项)
    1.在前端的vbenadmin目录新增菜单直接在src/router/routes/modules内新增一个模块文件即可。不需要手动引入,放在src/router/routes/modules内的文件会自动被加载。importtype{AppRouteModule}from'/@/router/types';import{LAYOUT}from'/@/router/constant';......
  • prometheus实战:
    一:安装部分:https://prometheus.io/download/###下载源码解压即可https://grafana.com/grafana/dashboards###搜索数据源为prometheus的这里下载了:prometheus、node_exporter、alertmanager、pushgateway同时机器需要安装dockeryuminstalldocker-ysystemctlstartdock......
  • quarkus实战之一:准备工作
    欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos关于《quarkus实战》系列《quarkus实战》系列是欣宸在2022年春季推出的又一个精品原创系列,作者将自己对java的热爱渗透到每段文字和每行代码中,全系列秉承欣宸一贯的知识+......
  • R语言隐马尔可夫模型(HMM)识别不断变化的股市状况股票指数预测实战|附代码数据
    全文下载链接: http://tecdat.cn/?p=1557最近我们被客户要求撰写关于隐马尔可夫模型(HMM)的研究报告,包括一些图形和统计输出。“了解不同的股市状况,改变交易策略,对股市收益有很大的影响。弄清楚何时开始或何时止损,调整风险和资金管理技巧,都取决于股市的当前状况 ( 点击文末“阅......
  • 软硬结合——写给硬件开发工程师的全栈入门实战
    特别注意: 教程已经迁移到:www.scaugreen.cn  软硬结合——写给硬件开发工程师的全栈入门实战作者水平读者水平要求整个项目简单介绍教程特点为什么使用nodejs开始提问提问之前提问规范教程目录与安排Part1Part2Part3Part4Part5Part6题外话声明正式开始软硬结合——......
  • 业界常见分库分表中间件
    Cobar(已经被淘汰没使用了)TDDL淘宝根据自己的业务特点开发了TDDL(TaobaoDistributedDataLayer)基于JDBC规范,没有server,以client-jar的形式存在,引入项目即可使用开源功能比较少,阿里内部使用为主Mycat地址http://www.mycat.org.cn/Java语言编写的MySQL数据库网......
  • 【项目实战】Kafka 生产者幂等性和事务
    ......
  • 【项目实战】Kafka 生产者写入分区的策略
    ......
  • 【项目实战】Kafka 重平衡 Consumer Group Rebalance 机制
    ......
  • 成都站|阿里云 Serverless 技术实战营邀你来玩!
    活动简介“Serverless技术实战与创新沙龙”是一场以Serverless为主题的开发者活动,活动受众以关注Serverless技术的开发者、企业决策人、云原生领域创业者为主,活动形式为演讲、动手实操,让开发者通过一个下午的时间增进对Serverless技术的理解,快速上手Serverless,拥抱云......