Java基于ShardingSphere實(shí)現(xiàn)分庫分表的實(shí)例詳解
一、簡介
Apache ShardingSphere 是一套開源的分布式數(shù)據(jù)庫解決方案組成的生態(tài)圈,它由 JDBC、Proxy 和 Sidecar(規(guī)劃中)這 3 款既能夠獨(dú)立部署,又支持混合部署配合使用的產(chǎn)品組成。 它們均提供標(biāo)準(zhǔn)化的數(shù)據(jù)水平擴(kuò)展、分布式事務(wù)和分布式治理等功能,可適用于如 Java 同構(gòu)、異構(gòu)語言、云原生等各種多樣化的應(yīng)用場景。
Apache ShardingSphere 旨在充分合理地在分布式的場景下利用關(guān)系型數(shù)據(jù)庫的計(jì)算和存儲(chǔ)能力,而并非實(shí)現(xiàn)一個(gè)全新的關(guān)系型數(shù)據(jù)庫。 關(guān)系型數(shù)據(jù)庫當(dāng)今依然占有巨大市場份額,是企業(yè)核心系統(tǒng)的基石,未來也難于撼動(dòng),我們更加注重在原有基礎(chǔ)上提供增量,而非顛覆。
Apache ShardingSphere 5.x 版本開始致力于可插拔架構(gòu),項(xiàng)目的功能組件能夠靈活的以可插拔的方式進(jìn)行擴(kuò)展。 目前,數(shù)據(jù)分片、讀寫分離、數(shù)據(jù)加密、影子庫壓測等功能,以及 MySQL、PostgreSQL、SQLServer、Oracle 等 SQL 與協(xié)議的支持,均通過插件的方式織入項(xiàng)目。 開發(fā)者能夠像使用積木一樣定制屬于自己的獨(dú)特系統(tǒng)。Apache ShardingSphere 目前已提供數(shù)十個(gè) SPI 作為系統(tǒng)的擴(kuò)展點(diǎn),仍在不斷增加中。
ShardingSphere 已于2020年4月16日成為 Apache 軟件基金會(huì)的頂級項(xiàng)目。
二、項(xiàng)目使用
1、引入依賴
<dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>4.0.0-RC2</version> </dependency>
2、數(shù)據(jù)庫
3、實(shí)體類
@Data public class User { private Integer id; private String name; private Integer age; }
4、mapper
這里用的Mybatis-plus 3.4版本。
@Mapper public interface UserMapper extends BaseMapper<User> { }
5、yml配置
spring: shardingsphere: datasource: #數(shù)據(jù)庫分庫名 names: ds0,ds1 ds0: #type為數(shù)據(jù)源,如果是Druid數(shù)據(jù)庫連接池,可以去改 type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/test0?characterEncoding=utf-8&serverTimezone=UTC username: root password: root ds1: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/test1?characterEncoding=utf-8&serverTimezone=UTC username: root password: root # 分片規(guī)則 sharding: default-database-strategy: inline: algorithm-expression: ds$->{id%2} sharding-column: id tables: user: actual-data-nodes: ds${0..1}.user_${0..2} table-strategy: inline: algorithm-expression: user_${age%2} sharding-column: age # 在日志中SQL語句 props: sql: show: true
6、測試類
@SpringBootTest class DemoApplicationTests { @Resource private UserMapper userMapper; @Test void contextLoads() { User user = new User(); user.setId(1); user.setName("666"); user.setAge(16); userMapper.insert(user); } @Test void contextLoads2() { User user = new User(); user.setId(2); user.setName("666"); user.setAge(17); userMapper.insert(user); } }
7、數(shù)據(jù)
到此這篇關(guān)于ShardingSphere實(shí)現(xiàn)分庫分表的文章就介紹到這了,更多相關(guān)ShardingSphere分庫分表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何使用Jenkins構(gòu)建GIT+Maven項(xiàng)目
這篇文章主要介紹了如何使用Jenkins構(gòu)建GIT+Maven項(xiàng)目,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09java使用common-fileupload實(shí)現(xiàn)文件上傳
這篇文章主要為大家詳細(xì)介紹了java使用common-fileupload實(shí)現(xiàn)文件上傳的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10@Scheduled fixedDelayString 加載properties配置方式
這篇文章主要介紹了@Scheduled fixedDelayString 加載properties配置方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10Java實(shí)現(xiàn)手寫一個(gè)線程池的示例代碼
線程池技術(shù)想必大家都不陌生把,相信在平時(shí)的工作中沒有少用,而且這也是面試頻率非常高的一個(gè)知識點(diǎn),那么大家知道它的實(shí)現(xiàn)原理和細(xì)節(jié)嗎?本文就來通過手寫一個(gè)簡單的線程池框架,去掌握線程池的基本原理,感興趣的可以學(xué)習(xí)一下2022-10-10基于java實(shí)現(xiàn)停車場管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了基于java實(shí)現(xiàn)停車場管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11mybatis中oracle實(shí)現(xiàn)分頁效果實(shí)例代碼
實(shí)現(xiàn)分頁的方式有很多,但常用的是通過SQL來顯示分頁。這篇文章主要介紹了mybatis中oracle實(shí)現(xiàn)分頁效果實(shí)例代碼,有興趣的可以了解一下。2017-04-04