IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> [Mysql]使用ShardingSphere实现分库分表操作 -> 正文阅读

[大数据][Mysql]使用ShardingSphere实现分库分表操作

下载ShardingSphere

二进制发布包:下载地址
Docker镜像:docker pull apache/shardingsphere-proxy

配置

Server配置

使用ShardingShphere后,应用程序通过ShardingSphere代理操作数据库,也就是程序中原本的数据源连接(JDBC、Druid)更换为连接ShardingShphere。需要在ShardingSphere的server端进行配置或权限管理
在这里插入图片描述取消server.yml这块区域的注释使用默认配置即可,需要权限管理的同学可以参考:
官方文档

分库分表配置

数据源

dataSources:
  ds_0:
    url: jdbc:mysql://192.168.31.200:3306/demo_ds_0?serverTimezone=UTC&useSSL=false
    username: root
    password: w2740201
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
  ds_1:
    url: jdbc:mysql://192.168.31.200:3306/demo_ds_1?serverTimezone=UTC&useSSL=false
    username: root
    password: w2740201
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1

配置两个测试数据库,demo_ds_0和demo_ds_1

分库分表策略

rules:
- !SHARDING
  tables:  # tables下可对单表配置分表策略 需要全局分表策略可在defaultTableStrategy中进行配置
    t_order:
      actualDataNodes: ds_${0..1}.t_order_${0..1}
      tableStrategy:
        standard:
          shardingColumn: order_id
          shardingAlgorithmName: t_order_inline # 分表策略 声明在shardingAlgorithms中
      keyGenerateStrategy:
        column: order_id
        keyGeneratorName: snowflake # id生成策略 声明在keyGenerators中
    t_order_item:
      actualDataNodes: ds_${0..1}.t_order_item_${0..1}
      tableStrategy:
        standard:
          shardingColumn: order_id
          shardingAlgorithmName: t_order_item_inline
      keyGenerateStrategy:
        column: order_item_id
        keyGeneratorName: snowflake
  bindingTables:  # 绑定表后,ShardingSphere会认为order表和order_item表中相关记录都在同一节点,避免ShardingSphere跨节点联查
    - t_order,t_order_item
  defaultDatabaseStrategy: # 默认分库策略
    standard:
      shardingColumn: user_id
      shardingAlgorithmName: database_inline
  defaultTableStrategy:  # 默认分表策略
    none:

  shardingAlgorithms:
    database_inline:
      type: INLINE
      props:
        algorithm-expression: ds_${user_id % 2}
    t_order_inline:
      type: INLINE
      props:
        algorithm-expression: t_order_${order_id % 2}
  keyGenerators:
    snowflake:
      type: SNOWFLAKE
      props:
        worker-id: 123

如果不使用默认分库策略也可以像下图一样对每个表配置分库策略
在这里插入图片描述

读写分离

######################################################################################################
#
# If you want to connect to MySQL, you should manually copy MySQL driver to lib directory.
#
######################################################################################################

schemaName: sharding_db

dataSources:
  write_ds_0:
    url: jdbc:mysql://192.168.31.200:3306/demo_ds_0?serverTimezone=UTC&useSSL=false
    username: root
    password: w2740201
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
  read_ds_0:
    url: jdbc:mysql://192.168.31.200:3307/demo_ds_0?serverTimezone=UTC&useSSL=false
    username: root
    password: w2740201
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
  write_ds_1:
    url: jdbc:mysql://192.168.31.200:3306/demo_ds_1?serverTimezone=UTC&useSSL=false
    username: root
    password: w2740201
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
  read_ds_1:
    url: jdbc:mysql://192.168.31.200:3307/demo_ds_1?serverTimezone=UTC&useSSL=false
    username: root
    password: w2740201
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
rules:
- !READWRITE_SPLITTING
  dataSources:
    pr_ds_0:
      writeDataSourceName: write_ds_0
      readDataSourceNames:
        - read_ds_0
    pr_ds_1:
      writeDataSourceName: write_ds_1
      readDataSourceNames:
        - read_ds_1

此处仅作配置演示,主从配置和读写分离效果请参考另一篇博客:Mysql主从配置

创建测试数据库

CREATE TABLE `t_order` (
`order_id` bigint(20) NOT NULL,
`user_id` int(11) NOT NULL,
`status` varchar(50) COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;


CREATE TABLE `t_order_item` ( `order_item_id` bigint(20) NOT NULL, `order_id` bigint(20) NOT NULL, `user_id` int(11) NOT NULL,
`content` varchar(255) COLLATE utf8_bin DEFAULT NULL, `status` varchar(50) COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`order_item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

主库
在这里插入图片描述
从库
在这里插入图片描述

查看分库分表效果

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-05 21:48:17  更:2022-02-05 21:50:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 14:09:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码