數(shù)據(jù)分片產(chǎn)生的背景,可以查看https://shardingsphere.apache.org/document/current/cn/features/sharding/,包括了垂直拆分和水平拆分的概念.還有這個(gè)框架的目標(biāo)是什么,都寫得很清楚
創(chuàng)新互聯(lián)主營(yíng)全椒網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP軟件開(kāi)發(fā),全椒h5小程序開(kāi)發(fā)搭建,全椒網(wǎng)站營(yíng)銷推廣歡迎全椒等地區(qū)企業(yè)咨詢
Sharding-JDBC與MyCat:
解決分庫(kù)分表的中間件.
但是定位不同,Sharding-JDBC定位是輕量級(jí)Java框架,以jar包的方式提供服務(wù),未使用中間件,使用代碼連接庫(kù).MyCat相當(dāng)于代理,MyCat相當(dāng)于數(shù)據(jù)庫(kù),直接訪問(wèn)MyCat就可以,不需要關(guān)系庫(kù)和表,MyCat自動(dòng)處理,但是需要維護(hù)MyCat,性能會(huì)有損耗.
Sharding-JDBC(1.x):
github地址: https://github.com/apache/incubator-shardingsphere/releases
官網(wǎng): https://shardingsphere.incubator.apache.org/
文檔: https://shardingsphere.apache.org/document/current/en/overview/
使用Sharding-JDBC進(jìn)行讀寫分離實(shí)戰(zhàn)
在數(shù)據(jù)庫(kù)的操作中,寫操作是非常耗時(shí)的,而最常用的是讀操作,讀寫分離的目的是避免數(shù)據(jù)庫(kù)的寫操作影響讀操作的效率.最重要的目的還是減少數(shù)據(jù)庫(kù)的壓力,提高性能.
這只是模仿讀寫分析實(shí)戰(zhàn),流程是創(chuàng)建兩個(gè)數(shù)據(jù)庫(kù),配置兩個(gè)數(shù)據(jù)源,一個(gè)是主表,一個(gè)是從表,寫修改刪除在主表,查詢是在從表.
創(chuàng)建數(shù)據(jù)庫(kù)的語(yǔ)句:
創(chuàng)建項(xiàng)目,引入依賴
配置文件的編寫(使用xml的方式來(lái)實(shí)現(xiàn)):
編寫model,service,controller
啟動(dòng)類:
在查詢前使用這句可以指定從主庫(kù)中進(jìn)行讀取數(shù)據(jù).
分片算法參考:
https://blog.csdn.net/gjx8010/article/details/72542207#1-%E5%88%86%E7%89%87%E6%9E%9A%E4%B8%BE
分片枚舉: 通過(guò)在配置文件中配置可能的枚舉id,自己配置分片。 這種規(guī)則適用于特定的場(chǎng)景,比如有些業(yè)務(wù)需要按照省份或區(qū)縣來(lái)做保存,而全國(guó)的省份區(qū)縣固定的,這類業(yè)務(wù)使用這一規(guī)則。
范圍約定: 此分片適用于提前規(guī)劃好分片字段某個(gè)范圍屬于哪個(gè)分片. 這個(gè)接觸過(guò),就是比如說(shuō)id在1~10000的在一張表,10001~20000在另一張表.
取模: 比如說(shuō)兩張表,奇數(shù)存一張表,偶數(shù)存一張表.
按日期進(jìn)行分片: 比如說(shuō)一天一張表,或者一個(gè)月一張表(這個(gè)一般是看業(yè)務(wù)需求).
還有很多,不過(guò)我覺(jué)得我比較喜歡的就這幾個(gè),Hash的也很常用,只是我沒(méi)有用過(guò).真正用過(guò)的就是范圍約定了.
分庫(kù)分表
分庫(kù)分表就是表面上的意思,將一個(gè)庫(kù)分為多個(gè)庫(kù),講一個(gè)表分為多個(gè)表.
單庫(kù)分表
在前一個(gè)項(xiàng)目上進(jìn)行修改
首先創(chuàng)建數(shù)據(jù)庫(kù)ds_03,在數(shù)據(jù)庫(kù)中創(chuàng)建4張表
重新創(chuàng)建xml文件sharding-table.xml:
上面在使用分表的時(shí)候使用的是inline表達(dá)式.還有一種自定義表達(dá)式,上面是注釋掉的,使用的是類來(lái)進(jìn)行分表,但是我測(cè)試過(guò)程一直是類型轉(zhuǎn)換異常,Integer轉(zhuǎn)不成Long,這個(gè)錯(cuò)誤清除,不知道發(fā)生在哪,因?yàn)橹?就不仔細(xì)研究了,下面把自定義表達(dá)式的類貼出來(lái),有興趣的可以試試.
編寫controller
分庫(kù)分表
前面說(shuō)了單庫(kù)分表,那分庫(kù)分表呢?一樣的實(shí)現(xiàn).
創(chuàng)建數(shù)據(jù)庫(kù)和表
創(chuàng)建sharding-db-table.xml
添加數(shù)據(jù)庫(kù)的分庫(kù)策略
修改controller中的saves方法,進(jìn)行測(cè)試:
分布式主鍵的使用
為了保證插入的主鍵不重復(fù),所以使用分布式主鍵,其實(shí)在前面的xml中已經(jīng)添加了實(shí)現(xiàn)
歡迎工作一到五年的Java工程師朋友們加入Java高級(jí)互聯(lián)網(wǎng)架構(gòu):957734884,歡迎加入我們,給你意想不到的驚喜。