日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Springboot2.x +JPA 集成 Apache ShardingSphere 分库分表

發布時間:2024/9/27 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Springboot2.x +JPA 集成 Apache ShardingSphere 分库分表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

分庫分表背景:
數據庫性能瓶頸:主要分為按照業務來劃分或者按照數據量來劃分
拆分方式:
水平拆分(每個表的結構都一樣):訂單表數據量大,我們可以水平拆分 ,分成order表1、order表2、order表3 。。。
垂直拆分:一個多字段的表拆分成多個表
例如:order訂單表和oderItem訂單詳情表
一個訂單會購買多件商品,因此,訂單order表中會只有一條數據,orderItem訂單項表會對應這個訂單購買的多件商品

文章目錄

            • 技術選型
            • 1. 引入 Maven 依賴
            • 2. 規則配置
            • 3. 實體
            • 4. 接口
            • 5. 表結構
            • 6. 測試類
            • 7. 完整pom

技術選型
組件/框架版本
spring-boot2.4.3
jpa2.4.3
shardingsphere5.0.0-alpha
mysql5.7.3
hikari3.4.5

分庫分表

官網文檔:
https://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-jdbc/usage/sharding/spring-boot-starter/

1. 引入 Maven 依賴
<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.0.0-alpha</version></dependency>
2. 規則配置
#分庫分表 場景:一個客戶多個訂單 按照user_id分庫 按照order_id 分表# 配置真實數據源 spring.shardingsphere.datasource.names=ds0,ds1############################################################################## # 1.連接池 2.驅動 3.用戶名 4.密碼 5.連接url SpringBoot2.x寫法 ############################################################################# spring.shardingsphere.datasource.common.type=com.zaxxer.hikari.HikariDataSource spring.shardingsphere.datasource.common.driver-class-name=com.mysql.jdbc.Driver spring.shardingsphere.datasource.common.username=root spring.shardingsphere.datasource.common.password=root spring.shardingsphere.datasource.ds_0.jdbc-url=jdbc:mysql://localhost:3306/ds0?serverTimezone=UTC&useSSL=false spring.shardingsphere.datasource.ds_1.jdbc-url=jdbc:mysql://localhost:3306/ds1?serverTimezone=UTC&useSSL=false# 配置 t_order 表規則 #ds$->{0..1} 指的是ds0 ds1 2個數據庫 #t_order_$->{0..1} 指的是 t_order_0 t_order_1 2個表 #ds$->{0..1}.t_order_$->{0..1} 指的是ds0 ds1 2個數據庫下面的t_order_0和t_order_1 2個表 spring.shardingsphere.rules.sharding.tables.t_order.actual-data-nodes=ds$->{0..1}.t_order_$->{0..1}# 配置分庫策略 # user_id 指的是按照user_id進行分庫 # database-inline 自定義策略名稱 下面會用到 spring.shardingsphere.rules.sharding.tables.t_order.database-strategy.standard.sharding-column=user_id spring.shardingsphere.rules.sharding.tables.t_order.database-strategy.standard.sharding-algorithm-name=database-inline# 配置分表策略 #order_id 指的是按照user_id進行分表 #table-inline 自定義策略名稱 下面會用到 spring.shardingsphere.rules.sharding.tables.t_order.table-strategy.standard.sharding-column=order_id spring.shardingsphere.rules.sharding.tables.t_order.table-strategy.standard.sharding-algorithm-name=table-inline# 配置 分片算法 #分庫分片算法 取模算法 #ds$->{user_id % 2} 指的是user_id與2取模 spring.shardingsphere.rules.sharding.sharding-algorithms.database-inline.type=INLINE spring.shardingsphere.rules.sharding.sharding-algorithms.database-inline.props.algorithm-expression=ds$->{user_id % 2}#分表分片算法 取模算法 #ds$->{order_id % 2} 指的是order_id與2取模 spring.shardingsphere.rules.sharding.sharding-algorithms.table-inline.type=INLINE spring.shardingsphere.rules.sharding.sharding-algorithms.table-inline.props.algorithm-expression=t_order_$->{order_id % 2}# 分片算法配置 #order_id 生成規則 #snowflake 雪花算法 spring.shardingsphere.rules.sharding.tables.t_order.key-generate-strategy.column=order_id spring.shardingsphere.rules.sharding.tables.t_order.key-generate-strategy.key-generator-name=snowflake# 分布式序列算法配置 spring.shardingsphere.rules.sharding.key-generators.snowflake.type=SNOWFLAKE spring.shardingsphere.rules.sharding.key-generators.snowflake.props.worker-id=123# 具體的屬性配置 spring.shardingsphere.props.sql-show=true
3. 實體
package com.gblfy.distributedsharding.entity;import lombok.Data;import javax.persistence.*;@Data @Entity @Table(name = "t_order") public class OrderEntity {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long orderId;private Integer userId; }
4. 接口
package com.gblfy.distributedsharding.mapper;import com.gblfy.distributedsharding.entity.OrderEntity; import org.springframework.data.jpa.repository.JpaRepository;import java.util.List;public interface OrderMapper extends JpaRepository<OrderEntity, Long> {OrderEntity findByOrderId(Long orderId);List<OrderEntity> findByUserId(Integer userId); }
5. 表結構
CREATE DATABASE ds0; use ds0; CREATE TABLE `t_order_0` (`order_id` bigint(20) unsigned NOT NULL,`user_id` int(11) DEFAULT NULL,PRIMARY KEY (`order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `t_order_1` (`order_id` bigint(20) unsigned NOT NULL,`user_id` int(11) DEFAULT NULL,PRIMARY KEY (`order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE DATABASE ds1; use ds1; CREATE TABLE `t_order_0` (`order_id` bigint(20) unsigned NOT NULL,`user_id` int(11) DEFAULT NULL,PRIMARY KEY (`order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `t_order_1` (`order_id` bigint(20) unsigned NOT NULL,`user_id` int(11) DEFAULT NULL,PRIMARY KEY (`order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
6. 測試類
package com.gblfy.distributedsharding;import com.gblfy.distributedsharding.entity.OrderEntity; import com.gblfy.distributedsharding.mapper.OrderMapper; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest;import java.util.Random;@SpringBootTest class DistributedShardingApplicationTests {@Autowiredprivate OrderMapper orderMapper;@Testvoid insert() {OrderEntity entity = new OrderEntity();entity.setUserId(new Random().nextInt(999));orderMapper.save(entity);}@Testvoid findByOrderId() {//按照order_id分表 ,會查詢2次,通過order_id分表,但是不知道哪個庫orderMapper.findByOrderId(570271967295811584L);}@Testvoid findByUserId() {//按照user_id分庫 ,會查詢2次,通過user_id分庫,但是不知道哪個表orderMapper.findByUserId(556);}@Testvoid updateByOrderId() {OrderEntity byOrderId = orderMapper.findByOrderId(570279923689172992L);byOrderId.setUserId(1000);orderMapper.save(byOrderId);} }
7. 完整pom
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.0.0-alpha</version></dependency>

總結

以上是生活随笔為你收集整理的Springboot2.x +JPA 集成 Apache ShardingSphere 分库分表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 少妇一晚三次一区二区三区 | 亚洲红桃视频 | 天天碰视频 | 国产5区 | 奶罩不戴乳罩邻居hd播放 | 99精品视频网站 | 日韩欧美中文字幕在线观看 | 国产精品久久午夜夜伦鲁鲁 | 福利在线免费视频 | 国产只有精品 | 麻豆黄色一级片 | 欧美精品系列 | 亚洲欧美一区二区三区情侣bbw | 韩国av一区 | 国产色播 | 国产999精品 | 丰满的女人性猛交 | 日韩精品1| 在线观看国产黄色 | 1000部啪啪未满十八勿入 | 亚洲熟女乱色一区二区三区 | 欧美日本一区二区三区 | 污视频网站免费看 | 日本一区二区免费视频 | 关之琳三级做爰 | 色av性av丰满av | 中文资源在线观看 | 三级伦理视频 | 日韩av电影在线播放 | 黄色特级片 | 四虎影视免费在线观看 | 国产成人8x视频一区二区 | 成人欧美一区二区三区在线播放 | 九七影院在线观看免费观看电视 | 美女网站免费视频 | 黄色网免费 | 99热国产精品 | 亚洲精品乱码久久久久久自慰 | r级无码视频在线观看 | av资源首页 | 一级做a爱片久久毛片 | 国产午夜精品福利视频 | 国产欧美综合一区二区三区 | 日韩欧美一区二区在线 | 狠狠操影视| 台湾三级伦理片 | 亚洲玖玖爱 | 在线xxxx | 久久人人妻人人人人妻性色av | 欧美日韩你懂的 | 亚洲福利视频一区二区三区 | 青娱乐97 | 亚洲高清免费观看 | 三级视频在线 | 在线电影一区二区 | 欧美一区二区三区公司 | 五月婷婷综合在线观看 | 成人免费a视频 | 丁香花高清在线 | 相亲对象是问题学生在线观看 | 国内精品视频在线播放 | 免费欧美一级视频 | 国产sm调教一区二区 | 一区二区三区四区人妻 | 国产资源站 | 99在线观看视频 | 伊人五月婷婷 | 久一区二区三区 | 羞羞漫画在线播放 | 中文字幕第五页 | 风流老熟女一区二区三区 | 在线日韩免费 | 日日日操| 男受被做哭激烈娇喘gv视频 | 国产欧美激情在线观看 | a级性生活视频 | 色老太hd老太色hd | 精品亚洲一区二区三区四区五区高 | 午夜小视频网站 | 亚洲AV无码国产精品播放在线 | 香蕉尹人| 国产中文字幕在线免费观看 | 亚洲首页 | 中文字幕人妻色偷偷久久 | 欧美成人aa | 欧美高清大白屁股ass18 | 伊人视频在线观看 | 小日子的在线观看免费第8集 | 巨乳xxx | 裸体美女免费视频网站 | av网站免费看 | www.国产一区二区三区 | 国产色一区二区 | 免费人成网 | 国产农村妇女精品一区二区 | 草草影院在线播放 | 精品久久久久久久久久久久久久久久久久 | 亚洲三级在线免费观看 | 久久国产劲爆∧v内射 |