<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      ShardingSphere + Mysql,實現分庫分表、讀寫分離,并整合 SpringBoot

      軟件版本

      Docker:26.1.3

      Mysql:8.4.0

      ShardingSphere:5.5.0

       

      分庫分表

      1.Docker創建兩個Mysql

      services:
        mysql:
          image: mysql:8.4.0
          ports:
            - "3306:3306"
          environment:
            MYSQL_ROOT_PASSWORD: abc123
          volumes:
            - ./data:/var/lib/mysql
            - ./config:/etc/mysql/conf.d
          restart: always

      2.兩個Mysql創建測試庫 demo 并導入表

      -- demo.t_address definition
      
      CREATE TABLE `t_address` (
        `user_id` bigint NOT NULL AUTO_INCREMENT,
        `name` varchar(100) NOT NULL,
        PRIMARY KEY (`user_id`)
      ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
      
      
      -- demo.t_order_0 definition
      
      CREATE TABLE `t_order_0` (
        `order_id` bigint NOT NULL,
        `user_id` bigint NOT NULL,
        `name` varchar(100) NOT NULL,
        PRIMARY KEY (`order_id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
      
      
      -- demo.t_order_item_0 definition
      
      CREATE TABLE `t_order_item_0` (
        `order_item_id` bigint NOT NULL,
        `order_id` bigint NOT NULL,
        `user_id` bigint NOT NULL,
        `name` varchar(100) NOT NULL,
        PRIMARY KEY (`order_item_id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
      
      
      -- demo.t_order_1 definition
      
      CREATE TABLE `t_order_1` (
        `order_id` bigint NOT NULL,
        `user_id` bigint NOT NULL,
        `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
        PRIMARY KEY (`order_id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
      
      
      -- demo.t_order_item_1 definition
      
      CREATE TABLE `t_order_item_1` (
        `order_item_id` bigint NOT NULL,
        `order_id` bigint NOT NULL,
        `user_id` bigint NOT NULL,
        `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
        PRIMARY KEY (`order_item_id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

      3.Docker 編寫 docker-compose.yml 文件

      services:
        shardingsphere:
          image: apache/shardingsphere-proxy:5.5.0
          ports:
            - "3307:3307"
          volumes:
            - ./conf:/opt/shardingsphere-proxy/conf
            - ./ext-lib:/opt/shardingsphere-proxy/ext-lib
          restart: always

      4.導入Mysql驅動

      請下載 mysql-connector-java-5.1.49.jar 或者 mysql-connector-java-8.0.11.jar,并將其放入 ext-lib 目錄。

      5.導入分庫分表配置到 conf/database-sharding.yaml

      databaseName: demo
      
      dataSources:
        ds_0:
          url: jdbc:mysql://192.168.1.111:3306/demo?allowPublicKeyRetrieval=true
          username: root
          password: abc123
          connectionTimeoutMilliseconds: 30000
          idleTimeoutMilliseconds: 60000
          maxLifetimeMilliseconds: 1800000
          maxPoolSize: 50
          minPoolSize: 1
        ds_1:
          url: jdbc:mysql://192.168.1.112:3306/demo?allowPublicKeyRetrieval=true
          username: root
          password: abc123
          connectionTimeoutMilliseconds: 30000
          idleTimeoutMilliseconds: 60000
          maxLifetimeMilliseconds: 1800000
          maxPoolSize: 50
          minPoolSize: 1
      
      rules:
        - !SHARDING
          # 分片配置
          tables:
            # 邏輯表名
            t_order:
              # 數據源
              actualDataNodes: ds_${0..1}.t_order_${0..1}
              # 分庫策略,下面默認分庫策略替代
              # databaseStrategy:
              #   standard:
              #     shardingColumn: user_id
              #     shardingAlgorithmName: database_inline
              # 分表策略
              tableStrategy:
                standard:
                  # 分片列
                  shardingColumn: order_id
                  # 分片算法
                  shardingAlgorithmName: t_order_inline
              # 主鍵生成策略
              keyGenerateStrategy:
                # 主鍵列
                column: order_id
                # 主鍵生成算法
                keyGeneratorName: snowflake
            # 第二個邏輯表名,配置方式如上
            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:
            - 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}
                allow-range-query-with-inline-sharding: true
            t_order_inline:
              type: INLINE
              props:
                algorithm-expression: t_order_${order_id % 2}
                allow-range-query-with-inline-sharding: true
            t_order_item_inline:
              type: INLINE
              props:
                algorithm-expression: t_order_item_${order_id % 2}
                allow-range-query-with-inline-sharding: true
      
          # 定義主鍵生成算法
          keyGenerators:
            # 算法名
            snowflake:
              # 算法類型
              type: SNOWFLAKE
      
        - !BROADCAST
          # 廣播表配置
          tables:
            - t_address

      6.啟動 ShardingSphere-Proxy 即可完成

      默認URL:jdbc:mysql://127.0.0.1:3307/demo

      默認端口:3307

      默認賬號:root

      默認密碼:root

      可以直接像連接普通Mysql數據庫一樣使用了。

       

      讀寫分離

      1.先準備兩個Mysql服務器,并配好主從復制

      Mysql 8.4.0 結合 Docker 搭建GTID主從復制,以及傳統主從復制 - Yfeil - 博客園 (cnblogs.com)

      2.Docker 編寫 docker-compose.yml 文件

      services:
        shardingsphere:
          image: apache/shardingsphere-proxy:5.5.0
          ports:
            - "3307:3307"
          volumes:
            - ./conf:/opt/shardingsphere-proxy/conf
            - ./ext-lib:/opt/shardingsphere-proxy/ext-lib
          restart: always

      3.導入Mysql驅動

      請下載 mysql-connector-java-5.1.49.jar 或者 mysql-connector-java-8.0.11.jar,并將其放入 ext-lib 目錄。

      4.導入讀寫分離配置到 conf/database-readwrite-splitting.yaml

      databaseName: demo
      
      dataSources:
        write_ds:
          url: jdbc:mysql://192.168.1.113:3306/demo?allowPublicKeyRetrieval=true
          username: root
          password: abc123
          connectionTimeoutMilliseconds: 30000
          idleTimeoutMilliseconds: 60000
          maxLifetimeMilliseconds: 1800000
          maxPoolSize: 50
          minPoolSize: 1
        read_ds:
          url: jdbc:mysql://192.168.1.114:3306/demo?allowPublicKeyRetrieval=true
          username: root
          password: abc123
          connectionTimeoutMilliseconds: 30000
          idleTimeoutMilliseconds: 60000
          maxLifetimeMilliseconds: 1800000
          maxPoolSize: 50
          minPoolSize: 1
      
      rules:
        - !READWRITE_SPLITTING
          dataSources:
            # 邏輯數據源名
            readwrite_ds:
              # 寫庫數據源
              writeDataSourceName: write_ds
              # 讀庫數據源
              readDataSourceNames:
                - read_ds
              loadBalancerName: random
          
          # 定義負載均衡算法
          loadBalancers:
            # 算法名
            random:
              #算法類型
              type: RANDOM
      
        - !SINGLE
          # 單表規則
          tables:
            - readwrite_ds.*

      5.啟動 ShardingSphere-Proxy 即可完成

      默認URL:jdbc:mysql://127.0.0.1:3307/demo

      默認端口:3307

      默認賬號:root

      默認密碼:root

      可以直接像連接普通Mysql數據庫一樣使用了。

       

      JDBC 整合 SpringBoot 2.x

      ShardingSphere-JDBC 對 SpringBoot 3.x 支持的不好,硬要使用先去官網看看注意事項。

      這里只演示分庫分表的整合,讀寫分離同理。

      1.引入依賴

      <dependency>
          <groupId>org.apache.shardingsphere</groupId>
          <artifactId>shardingsphere-jdbc</artifactId>
          <version>5.5.0</version>
          <exclusions>
              <exclusion>
                  <groupId>org.apache.shardingsphere</groupId>
                  <artifactId>shardingsphere-test-util</artifactId>
              </exclusion>
          </exclusions>
      </dependency>
      <dependency>
          <groupId>org.yaml</groupId>
          <artifactId>snakeyaml</artifactId>
          <version>2.2</version>
      </dependency>
      <dependency>
          <groupId>com.mysql</groupId>
          <artifactId>mysql-connector-j</artifactId>
          <scope>runtime</scope>
      </dependency>

      2.添加配置

      # 配置 DataSource Driver
      spring.datasource.driver-class-name=org.apache.shardingsphere.driver.ShardingSphereDriver
      # 指定 YAML 配置文件
      spring.datasource.url=jdbc:shardingsphere:classpath:database-sharding.yaml

      3.創建 src/main/resources/database-sharding.yaml

      rules 配置和之前一樣,主要區別在于 dataSources 下的配置變了。

      dataSources:
        ds_0:
          dataSourceClassName: com.zaxxer.hikari.HikariDataSource
          driverClassName: com.mysql.jdbc.Driver
          jdbcUrl: jdbc:mysql://192.168.1.111:3306/demo?allowPublicKeyRetrieval=true
          username: root
          password: abc123
        ds_1:
          dataSourceClassName: com.zaxxer.hikari.HikariDataSource
          driverClassName: com.mysql.jdbc.Driver
          jdbcUrl: jdbc:mysql://192.168.1.112:3306/demo?allowPublicKeyRetrieval=true
          username: root
          password: abc123
      
      rules:
        - !SHARDING
          # 分片配置
          tables:
            # 邏輯表名
            t_order:
              # 數據源
              actualDataNodes: ds_${0..1}.t_order_${0..1}
              # 分庫策略,下面默認分庫策略替代
              # databaseStrategy:
              #   standard:
              #     shardingColumn: user_id
              #     shardingAlgorithmName: database_inline
              # 分表策略
              tableStrategy:
                standard:
                  # 分片列
                  shardingColumn: order_id
                  # 分片算法
                  shardingAlgorithmName: t_order_inline
              # 主鍵生成策略
              keyGenerateStrategy:
                # 主鍵列
                column: order_id
                # 主鍵生成算法
                keyGeneratorName: snowflake
            # 第二個邏輯表名,配置方式如上
            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:
            - 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}
                allow-range-query-with-inline-sharding: true
            t_order_inline:
              type: INLINE
              props:
                algorithm-expression: t_order_${order_id % 2}
                allow-range-query-with-inline-sharding: true
            t_order_item_inline:
              type: INLINE
              props:
                algorithm-expression: t_order_item_${order_id % 2}
                allow-range-query-with-inline-sharding: true
      
          # 定義主鍵生成算法
          keyGenerators:
            # 算法名
            snowflake:
              # 算法類型
              type: SNOWFLAKE
      
        - !BROADCAST
          # 廣播表配置
          tables:
            - t_address

      4.完成

      平時咋操作數據庫現在也一樣,也可以引入 Mybatis,可以無縫連接。

       

      參考

      數據分片 :: ShardingSphere (apache.org)

      讀寫分離 :: ShardingSphere (apache.org)

      分片算法 :: ShardingSphere (apache.org)

      負載均衡算法 :: ShardingSphere (apache.org)

      使用限制 :: ShardingSphere (apache.org)

      posted @ 2024-06-07 23:02  Yfeil  閱讀(1183)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 熟妇人妻一区二区三区四区| 亚洲成a人片在线观看中文| 中文毛片无遮挡高潮免费| 国产欧美日韩一区二区加勒比| 精品人妻午夜福利一区二区| 亚洲欧美国产日韩天堂区| 日本欧美大码a在线观看| 怡红院一区二区三区在线| 国产久免费热视频在线观看| 少女韩国在线观看完整版免费| 麻豆一区二区三区精品视频| 国产精品老熟女露脸视频| 欧美成人精品三级在线观看| 国产啪视频免费观看视频| 日产精品一区二区三区免费| 国产永久免费高清在线| 亚洲一级特黄大片一级特黄 | 日日麻批免费40分钟无码 | 日韩高清亚洲日韩精品一区二区| 蜜臀av入口一区二区三区| 国产乱码精品一区二区三| 国产日韩精品欧美一区灰| 午夜福利国产精品视频| 中文字幕丰满乱子无码视频| 国产h视频在线观看| 丹凤县| 在线无码免费的毛片视频| 国产综合久久久久久鬼色| www国产成人免费观看视频| 日韩人妻精品中文字幕| 宁都县| 香蕉亚洲欧洲在线一区| 在线人成免费视频69国产| 午夜DY888国产精品影院| 日韩深夜福利视频在线观看| 欧美精品一产区二产区| 亚洲国产大胸一区二区三区| 一道本AV免费不卡播放| 亚洲男人电影天堂无码| 人人澡人人妻人人爽人人蜜桃| 内射合集对白在线|