国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Sharding-JDBC介紹及應用總結

IT那活兒 / 1794人閱讀
Sharding-JDBC介紹及應用總結
初識Sharding-JDBC

  • Sharding Sphere是一套開源的分布式數據庫中間件解決方案。而   sharding-jdbc是ShardingSphere的其中一個模塊,它定位為輕量級Java框架, 在Java的JDBC層提供的額外服務。它使用客戶端直連數據庫,以jar包形式提供服務,無需額外部署和依賴,可理解為增強版的JDBC驅動,完全兼容JDBC和各種ORM框架。
  • Sharding-JDBC 主要作用:簡化對分庫分表之后數據相關操作


Sharding-JDBC 分庫分表操作


Sharding-JDBC水平分表

搭建環境

(1)技術:SpringBoot 2.2.1+ MyBatisPlus + Sharding-JDBC + Druid 連接池

(2)創建 SpringBoot 工程

(3)引入需要的依賴

<dependencies> 
<dependency> 
<groupId>org.springframework.bootgroupId
<artifactId>spring-boot-starterartifactId
dependency
<dependency> 
<groupId>org.springframework.bootgroupId
<artifactId>spring-boot-starter-testartifactId
dependency
<dependency> 
<groupId>com.alibabagroupId
<artifactId>druid-spring-boot-starterartifactId
<version>1.1.20version
dependency
<dependency> 
<groupId>mysqlgroupId
<artifactId>mysql-connector-javaartifactId
dependency
<dependency> 
<groupId>org.apache.shardingspheregroupId
<artifactId>sharding-jdbc-spring-boot-starterartifactId
<version>4.0.0-RC1version
dependency
<dependency> 
<groupId>com.baomidougroupId
<artifactId>mybatis-plus-boot-starterartifactId
<version>3.0.5version
dependency
<dependency> 
<groupId>org.projectlombokgroupId
<artifactId>lombokartifactId
dependency
dependencies>


按照水平分表的方式,創建數據庫和數據庫表

1)創建數據庫 course_db

(2)在數據庫創建兩張表 course_1 和 course_2

(3)約定規則:如果添加課程 id 是偶數把數據添加 course_1,如果奇數添加到 course_2

配置Sharding-JDBC分片策略

在項目 application.properties 配置文件中進行配置

# shardingjdbc 分片策略
# 配置數據源,給數據源起名稱
spring.shardingsphere.datasource.names=m1
# 一個實體類對應兩張表,覆蓋
spring.main.allow-bean-definition-overriding=true
#配置數據源具體內容,包含連接池,驅動,地址,用戶名和密碼
spring.shardingsphere.datasource.m1.type=com.alibaba.druid.pool.DruidDataSourc 
e 
spring.shardingsphere.datasource.m1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.m1.url=jdbc:mysql://localhost:3306/course_db?
serverTimezone=GMT%2B8
spring.shardingsphere.datasource.m1.username=root
spring.shardingsphere.datasource.m1.password=root
#指定 course 表分布情況,配置表在哪個數據庫里面,表名稱都是什么 m1.course_1 ,m1.course_2
spring.shardingsphere.sharding.tables.course.actual-data-nodes=m1.course_$-
>{1..2}
# 指定 course 表里面主鍵 cid 生成策略 SNOWFLAKE
spring.shardingsphere.sharding.tables.course.key-generator.column=cid
spring.shardingsphere.sharding.tables.course.key-generator.type=SNOWFLAKE
# 指定分片策略 約定 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_$->{cid % 2 + 1}

# 打開 sql 輸出日志

spring.shardingsphere.props.sql.show=true

編寫測試代碼

@RunWith(SpringRunner.class)
@SpringBootTest
public classShardingjdbcdemoApplicationTests {
//注入 mapper
@Autowired
privateCourseMappercourseMapper;
//添加課程的方法
@Test
public voidaddCourse() {
for(inti=1;i<=10;i++) {
Course course =newCourse();
course.setCname("java"+i);
course.setUserId(100L);
course.setCstatus("Normal"+i);
courseMapper.insert(course);
}
}
//查詢課程的方法
@Test
public voidfindCourse() {
QueryWrapper wrapper =newQueryWrapper<>();
wrapper.eq("cid",465114665106538497L);
Course course =courseMapper.selectOne(wrapper);
System.out.println(course);
}
}

(1)上面測試代碼執行,報錯了

(2)解決方案,在配置文件中添加一行配置

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

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




Sharding-JDBC實現水平分庫


數據庫搭建

創建兩個數據庫db1和db2,每個數據庫創建兩張表tab1和tab2,每個表中包括兩個字段cid和userId。

數據庫規則:userId為偶數則添加到db1數據庫,為奇數列則添加到db2數據庫。
表規則:cid為偶數列則添加到tab1,為奇數則添加到表tab2。

在Spring boot配置文件配置數據庫分片規則


# shardingjdbc 分片策略# 配置數據源,給數據源起名稱,
# 水平分庫,配置兩個數據源
spring.shardingsphere.datasource.names=m1,m2
# 一個實體類對應兩張表,覆蓋
spring.main.allow-bean-definition-overriding=true
#配置第一個數據源具體內容,包含連接池,驅動,地址,用戶名和密碼
spring.shardingsphere.datasource.m1.type=com.alibaba.druid.pool.DruidDataSourc
e
spring.shardingsphere.datasource.m1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.m1.url=jdbc:mysql://localhost:3306/edu_db_1?s
erverTimezone=GMT%2B8
spring.shardingsphere.datasource.m1.username=root
spring.shardingsphere.datasource.m1.password=root

#配置第二個數據源具體內容,包含連接池,驅動,地址,用戶名和密碼

spring.shardingsphere.datasource.m2.type=com.alibaba.druid.pool.DruidDataSourc
e
spring.shardingsphere.datasource.m2.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.m2.url=jdbc:mysql://localhost:3306/edu_db_2?s
erverTimezone=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$-
>{1..2}.course_$->{1..2}

# 指定 course 表里面主鍵 cid 生成策略 SNOWFLAKE

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

# 指定表分片策略 約定 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_$->{cid % 2 + 1}

# 指定數據庫分片策略 約定 user_id 是偶數添加 m1,是奇數添加 m2

#spring.shardingsphere.sharding.default-database-strategy.inline.sharding
column=user_id
#spring.shardingsphere.sharding.default-database-strategy.inline.algorithm-
expression=m$->{user_id % 2 + 1}
spring.shardingsphere.sharding.tables.course.database
strategy.inline..sharding-column=user_id
spring.shardingsphere.sharding.tables.course.database
strategy.inline.algorithm-expression=m$->{user_id % 2 + 1}

# 打開 sql 輸出日志

spring.shardingsphere.props.sql.show=true

編寫測試方法

//======================測試水平分庫=====================
//添加操作
@Test
public voidaddCourseDb() {
Course course =newCourse();
course.setCname("javademo1");
//分庫根據 user_id
course.setUserId(111L);
course.setCstatus("Normal1");
courseMapper.insert(course);
}
//查詢操作
@Test
public voidfindCourseDb() {
QueryWrapper wrapper =newQueryWrapper<>();
//設置 userid 值
wrapper.eq("user_id",100L);
//設置 cid 值
wrapper.eq("cid",465162909769531393L);
Course course =courseMapper.selectOne(wrapper);
System.out.println(course);
}



Sharding-JDBC實現讀寫分離


Sharding-JDBC 通過 sql 語句語義分析,實現讀寫分離過程,不會做數據同步

Sharding-JDBC 操作

配置讀寫分離策略

# user_db 從服務器
spring.shardingsphere.datasource.s0.type=com.alibaba.druid.pool.DruidDataSourc
e 
spring.shardingsphere.datasource.s0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.s0.url=jdbc:mysql://localhost:3307/user_db?se 
rverTimezone=GMT%2B8
spring.shardingsphere.datasource.s0.username=root spring.shardingsphere.datasource.s0.password=root

# 主庫從庫邏輯數據源定義 ds0 為 user_db

spring.shardingsphere.sharding.master-slave-rules.ds0.master-data-source
name=m0
spring.shardingsphere.sharding.master-slave-rules.ds0.slave-data-source
names=s0
# 配置 user_db 數據庫里面 t_user 專庫專表
#spring.shardingsphere.sharding.tables.t_user.actual-data-nodes=m$->{0}.t_user
# t_user 分表策略,固定分配至 ds0 的 t_user 真實表
spring.shardingsphere.sharding.tables.t_user.actual-data-nodes=ds0.t_user


編寫測試代碼

//添加操作
@Test
public voidaddUserDb() {
User user =newUser();
user.setUsername("lucymary");
user.setUstatus("a");
userMapper.insert(user);
}
//查詢操作
@Test
public voidfindUserDb() {
QueryWrapper wrapper =newQueryWrapper<>();
//設置 userid 值
wrapper.eq("user_id",465508031619137537L);
User user =userMapper.selectOne(wrapper);
System.out.println(user);
}



END


更多精彩干貨分享

點擊下方名片關注

IT那活兒

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/129943.html

相關文章

  • database

    摘要:它是第一個把數據分布在全球范圍內的系統,并且支持外部一致性的分布式事務。目的是使得開發者閱讀之后,能對項目有一個初步了解,更好的參與進入的開發中。深度探索數據庫并發控制技術并發控制技術是數據庫事務處理的核心技術。 存儲過程高級篇 講解了一些存儲過程的高級特性,包括 cursor、schema、控制語句、事務等。 數據庫索引與事務管理 本篇文章為對數據庫知識的查缺補漏,從索引,事務管理,...

    csRyan 評論0 收藏0
  • 當當彈性化中間件云化之路(據說讀完可以少踩坑)

    摘要:第二部分介紹當當的彈性化中間件。第三部分當當的云化之路。下面部分是為當當運營人員與合作伙伴提供的系統,如商品價格庫存等。下圖是當當的監控系統以及限流系統的。當當采用的作業中間件是自研的,它可以將一個完整的作業拆分為多個相互獨立的任務。 showImg(https://segmentfault.com/img/remote/1460000009999152); 6月24日,雙態運維·烏鎮...

    王陸寬 評論0 收藏0
  • java篇

    摘要:多線程編程這篇文章分析了多線程的優缺點,如何創建多線程,分享了線程安全和線程通信線程池等等一些知識。 中間件技術入門教程 中間件技術入門教程,本博客介紹了 ESB、MQ、JMS 的一些知識... SpringBoot 多數據源 SpringBoot 使用主從數據源 簡易的后臺管理權限設計 從零開始搭建自己權限管理框架 Docker 多步構建更小的 Java 鏡像 Docker Jav...

    honhon 評論0 收藏0
  • Sharding-Jdbc實現mysql分庫分表

    摘要:實現數據庫分庫分表可以自己實現,也可以使用和實現。分布式數據庫的自增不是自增的。分布式數據庫分頁查詢需要使用插入時間實現。包含分庫分片和讀寫分離功能。 Sharding-Jdbc實現mysql分庫分表 簡單介紹 數據庫分庫分表和讀寫分離區別,分庫分表是在多個庫建相同的表和同一個庫建不同的表,根據隨機或者哈希等方式查找實現。讀寫分離是為了解決數據庫的讀寫性能不足,使用主庫master進行...

    go4it 評論0 收藏0
  • springboot實踐筆記之一:springboot+sharding-jdbc+mybatis全

    摘要:現在的分片策略是上海深圳分別建庫,每個庫都存各自交易所的兩支股票的,且按照月分表。五配置分片策略數據庫分片策略在這個實例中,數據庫的分庫就是根據上海和深圳來分的,在中是單鍵分片。 由于當當發布了最新的Sharding-Sphere,所以本文已經過時,不日將推出新的版本 項目中遇到了分庫分表的問題,找到了shrding-jdbc,于是就搞了一個springboot+sharding-jd...

    Snailclimb 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<