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

資訊專欄INFORMATION COLUMN

Sharding-JDBC介紹及應(yīng)用總結(jié)

IT那活兒 / 1788人閱讀
Sharding-JDBC介紹及應(yīng)用總結(jié)
初識(shí)Sharding-JDBC

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


Sharding-JDBC 分庫分表操作


Sharding-JDBC水平分表

搭建環(huán)境

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

(2)創(chuàng)建 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>


按照水平分表的方式,創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)庫表

1)創(chuàng)建數(shù)據(jù)庫 course_db

(2)在數(shù)據(jù)庫創(chuàng)建兩張表 course_1 和 course_2

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

配置Sharding-JDBC分片策略

在項(xiàng)目 application.properties 配置文件中進(jìn)行配置

# shardingjdbc 分片策略
# 配置數(shù)據(jù)源,給數(shù)據(jù)源起名稱
spring.shardingsphere.datasource.names=m1
# 一個(gè)實(shí)體類對(duì)應(yīng)兩張表,覆蓋
spring.main.allow-bean-definition-overriding=true
#配置數(shù)據(jù)源具體內(nèi)容,包含連接池,驅(qū)動(dòng),地址,用戶名和密碼
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 表分布情況,配置表在哪個(gè)數(shù)據(jù)庫里面,表名稱都是什么 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 值偶數(shù)添加到 course_1 表,如果 cid 是奇數(shù)添加到 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

編寫測(cè)試代碼

@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)上面測(cè)試代碼執(zhí)行,報(bào)錯(cuò)了

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

# 一個(gè)實(shí)體類對(duì)應(yīng)兩張表,覆蓋

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




Sharding-JDBC實(shí)現(xiàn)水平分庫


數(shù)據(jù)庫搭建

創(chuàng)建兩個(gè)數(shù)據(jù)庫db1和db2,每個(gè)數(shù)據(jù)庫創(chuàng)建兩張表tab1和tab2,每個(gè)表中包括兩個(gè)字段cid和userId。

數(shù)據(jù)庫規(guī)則:userId為偶數(shù)則添加到db1數(shù)據(jù)庫,為奇數(shù)列則添加到db2數(shù)據(jù)庫。
表規(guī)則:cid為偶數(shù)列則添加到tab1,為奇數(shù)則添加到表tab2。

在Spring boot配置文件配置數(shù)據(jù)庫分片規(guī)則


# shardingjdbc 分片策略# 配置數(shù)據(jù)源,給數(shù)據(jù)源起名稱,
# 水平分庫,配置兩個(gè)數(shù)據(jù)源
spring.shardingsphere.datasource.names=m1,m2
# 一個(gè)實(shí)體類對(duì)應(yīng)兩張表,覆蓋
spring.main.allow-bean-definition-overriding=true
#配置第一個(gè)數(shù)據(jù)源具體內(nèi)容,包含連接池,驅(qū)動(dòng),地址,用戶名和密碼
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

#配置第二個(gè)數(shù)據(jù)源具體內(nèi)容,包含連接池,驅(qū)動(dòng),地址,用戶名和密碼

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

#指定數(shù)據(jù)庫分布情況,數(shù)據(jù)庫里面表分布情況

# 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 值偶數(shù)添加到 course_1 表,如果 cid 是奇數(shù)添加到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}

# 指定數(shù)據(jù)庫分片策略 約定 user_id 是偶數(shù)添加 m1,是奇數(shù)添加 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

編寫測(cè)試方法

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



Sharding-JDBC實(shí)現(xiàn)讀寫分離


Sharding-JDBC 通過 sql 語句語義分析,實(shí)現(xiàn)讀寫分離過程,不會(huì)做數(shù)據(jù)同步

Sharding-JDBC 操作

配置讀寫分離策略

# user_db 從服務(wù)器
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

# 主庫從庫邏輯數(shù)據(jù)源定義 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 數(shù)據(jù)庫里面 t_user 專庫專表
#spring.shardingsphere.sharding.tables.t_user.actual-data-nodes=m$->{0}.t_user
# t_user 分表策略,固定分配至 ds0 的 t_user 真實(shí)表
spring.shardingsphere.sharding.tables.t_user.actual-data-nodes=ds0.t_user


編寫測(cè)試代碼

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



END


更多精彩干貨分享

點(diǎn)擊下方名片關(guān)注

IT那活兒

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/129943.html

相關(guān)文章

  • database

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

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

    摘要:第二部分介紹當(dāng)當(dāng)?shù)膹椥曰虚g件。第三部分當(dāng)當(dāng)?shù)脑苹贰O旅娌糠质菫楫?dāng)當(dāng)運(yùn)營(yíng)人員與合作伙伴提供的系統(tǒng),如商品價(jià)格庫存等。下圖是當(dāng)當(dāng)?shù)谋O(jiān)控系統(tǒng)以及限流系統(tǒng)的。當(dāng)當(dāng)采用的作業(yè)中間件是自研的,它可以將一個(gè)完整的作業(yè)拆分為多個(gè)相互獨(dú)立的任務(wù)。 showImg(https://segmentfault.com/img/remote/1460000009999152); 6月24日,雙態(tài)運(yùn)維·烏鎮(zhèn)...

    王陸寬 評(píng)論0 收藏0
  • java篇

    摘要:多線程編程這篇文章分析了多線程的優(yōu)缺點(diǎn),如何創(chuàng)建多線程,分享了線程安全和線程通信線程池等等一些知識(shí)。 中間件技術(shù)入門教程 中間件技術(shù)入門教程,本博客介紹了 ESB、MQ、JMS 的一些知識(shí)... SpringBoot 多數(shù)據(jù)源 SpringBoot 使用主從數(shù)據(jù)源 簡(jiǎn)易的后臺(tái)管理權(quán)限設(shè)計(jì) 從零開始搭建自己權(quán)限管理框架 Docker 多步構(gòu)建更小的 Java 鏡像 Docker Jav...

    honhon 評(píng)論0 收藏0
  • Sharding-Jdbc實(shí)現(xiàn)mysql分庫分表

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

    go4it 評(píng)論0 收藏0
  • springboot實(shí)踐筆記之一:springboot+sharding-jdbc+mybatis全

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

    Snailclimb 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<