Sharding JDBC 實現水平分庫分表

2022-08-13 14:33:16 字數 3252 閱讀 6562

1、需求分析

`cid` bigint(20) not null,

`cname` varchar(50) null,

`user_id` bigint(20) null,

`cstatus` varchar(10) null,

primary key (`cid`)

);create table `edu_db_1`.`course_2` (

`cid` bigint(20) not null,

`cname` varchar(50) null,

`user_id` bigint(20) null,

`cstatus` varchar(10) null,

primary key (`cid`)

);create table `edu_db_2`.`course_1` (

`cid` bigint(20) not null,

`cname` varchar(50) null,

`user_id` bigint(20) null,

`cstatus` varchar(10) null,

primary key (`cid`)

);create table `edu_db_2`.`course_2` (

`cid` bigint(20) not null,

`cname` varchar(50) null,

`user_id` bigint(20) null,

`cstatus` varchar(10) null,

primary key (`cid`)

);

3、在 springboot 配置檔案配置資料庫分片規則

# 水平分庫,配置兩個資料來源

spring.shardingsphere.datasource.names=m1,m2

## 乙個實體類對應兩張表,覆蓋

spring.main.allow-bean-definition-overriding=true

##配置第乙個資料來源具體內容,包含連線池,驅動,位址,使用者名稱和密碼

spring.shardingsphere.datasource.m1.type=com.alibaba.druid.pool.druiddatasource

spring.shardingsphere.datasource.m1.driver-class-name=com.mysql.cj.jdbc.driver

spring.shardingsphere.datasource.m1.url=jdbc:mysql://localhost:3306/edu_db_1?servertimezone=gmt%2b8

spring.shardingsphere.datasource.m1.username=root

spring.shardingsphere.datasource.m1.password=root

##配置第二個資料來源具體內容,包含連線池,驅動,位址,使用者名稱和密碼

spring.shardingsphere.datasource.m2.type=com.alibaba.druid.pool.druiddatasource

spring.shardingsphere.datasource.m2.driver-class-name=com.mysql.cj.jdbc.driver

spring.shardingsphere.datasource.m2.url=jdbc:mysql://localhost:3306/edu_db_2?servertimezone=gmt%2b8

spring.shardingsphere.datasource.m2.username=root

spring.shardingsphere.datasource.m2.password=root

#指定資料庫分布情況,資料庫裡面表分布情況

# m1 m2 course_1 course_2

spring.shardingsphere.sharding.tables.course.actual-data-nodes=m$->.course_$->

# 指定 course 表裡面主鍵 cid 生成策略 snowflake

spring.shardingsphere.sharding.tables.course.key-generator.column=cid

spring.shardingsphere.sharding.tables.course.key-generator.type=snowflake

# 指定資料庫分片策略 約定 user_id 是偶數新增 m1,是奇數新增 m2

#spring.shardingsphere.sharding.default-database-strategy.inline.shardingcolumn=user_id

#spring.shardingsphere.sharding.default-database-strategy.inline.algorithmexpression=m$->

spring.shardingsphere.sharding.tables.course.database-strategy.inline..sharding-column=user_id

spring.shardingsphere.sharding.tables.course.database-strategy.inline.algorithm-expression=m$->

# 指定表分片策略 約定 cid 值偶數新增到 course_1 表,如果 cid 是奇數新增到 course_2表

spring.shardingsphere.sharding.tables.course.table-strategy.inline.sharding-column=cid

spring.shardingsphere.sharding.tables.course.table-strategy.inline.algorithm-expression=course_$->

# 開啟 sql 輸出日誌

spring.shardingsphere.props.sql.show=true

4、編寫測試方法

@test

public void addcoursedb()

}//查詢操作

@test

public void findcoursedb()

Sharding JDBC 實現垂直分庫水平分表

1 需求分析 2 建立資料庫和表 user id bigint 20 not null,username varchar 50 null,ustatus varchar 50 null,primary key user id create table user db t user 1 user id...

sharding jdbc分表分庫實現和配置

1.註冊sharding管理的資料庫名稱 sharding.jdbc.datasource.names ds0 2.配置資料庫 sharding.jdbc.datasource.ds0.type org.apache.commons.dbcp.basicdatasource sharding.jdb...

Sharding JDBC 核心概念

即使你的真實表的表名變化了也能自動根據邏輯表的名字去生成真實表的名字,比如說你是根據月份分片的,你的真實錶帶個日期,我們應用在使用的時候依然只需要邏輯表的原名就行,sharing jdbc會自動組裝出來真實表的表名.水平拆分的資料庫 表 的相同邏輯和資料結構表的總稱。例 訂單資料根據主鍵尾數拆分為1...