您好,登錄后才能下訂單哦!
數(shù)據(jù)分片產(chǎn)生的背景,可以查看https://shardingsphere.apache.org/document/current/cn/features/sharding/,包括了垂直拆分和水平拆分的概念.還有這個框架的目標是什么,都寫得很清楚
Sharding-JDBC與MyCat:
解決分庫分表的中間件.
但是定位不同,Sharding-JDBC定位是輕量級Java框架,以jar包的方式提供服務,未使用中間件,使用代碼連接庫.MyCat相當于代理,MyCat相當于數(shù)據(jù)庫,直接訪問MyCat就可以,不需要關(guān)系庫和表,MyCat自動處理,但是需要維護MyCat,性能會有損耗.
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進行讀寫分離實戰(zhàn)
在數(shù)據(jù)庫的操作中,寫操作是非常耗時的,而最常用的是讀操作,讀寫分離的目的是避免數(shù)據(jù)庫的寫操作影響讀操作的效率.最重要的目的還是減少數(shù)據(jù)庫的壓力,提高性能.
這只是模仿讀寫分析實戰(zhàn),流程是創(chuàng)建兩個數(shù)據(jù)庫,配置兩個數(shù)據(jù)源,一個是主表,一個是從表,寫修改刪除在主表,查詢是在從表.
創(chuàng)建數(shù)據(jù)庫的語句:
創(chuàng)建項目,引入依賴
配置文件的編寫(使用xml的方式來實現(xiàn)):
編寫model,service,controller
啟動類:
在查詢前使用這句可以指定從主庫中進行讀取數(shù)據(jù).
分片算法參考:
https://blog.csdn.net/gjx8010/article/details/72542207#1-%E5%88%86%E7%89%87%E6%9E%9A%E4%B8%BE
分片枚舉: 通過在配置文件中配置可能的枚舉id,自己配置分片。 這種規(guī)則適用于特定的場景,比如有些業(yè)務需要按照省份或區(qū)縣來做保存,而全國的省份區(qū)縣固定的,這類業(yè)務使用這一規(guī)則。
范圍約定: 此分片適用于提前規(guī)劃好分片字段某個范圍屬于哪個分片. 這個接觸過,就是比如說id在1~10000的在一張表,10001~20000在另一張表.
取模: 比如說兩張表,奇數(shù)存一張表,偶數(shù)存一張表.
按日期進行分片: 比如說一天一張表,或者一個月一張表(這個一般是看業(yè)務需求).
還有很多,不過我覺得我比較喜歡的就這幾個,Hash的也很常用,只是我沒有用過.真正用過的就是范圍約定了.
分庫分表
分庫分表就是表面上的意思,將一個庫分為多個庫,講一個表分為多個表.
單庫分表
在前一個項目上進行修改
首先創(chuàng)建數(shù)據(jù)庫ds_03,在數(shù)據(jù)庫中創(chuàng)建4張表
重新創(chuàng)建xml文件sharding-table.xml:
上面在使用分表的時候使用的是inline表達式.還有一種自定義表達式,上面是注釋掉的,使用的是類來進行分表,但是我測試過程一直是類型轉(zhuǎn)換異常,Integer轉(zhuǎn)不成Long,這個錯誤清除,不知道發(fā)生在哪,因為著急,就不仔細研究了,下面把自定義表達式的類貼出來,有興趣的可以試試.
編寫controller
分庫分表
前面說了單庫分表,那分庫分表呢?一樣的實現(xiàn).
創(chuàng)建數(shù)據(jù)庫和表
創(chuàng)建sharding-db-table.xml
添加數(shù)據(jù)庫的分庫策略
修改controller中的saves方法,進行測試:
分布式主鍵的使用
為了保證插入的主鍵不重復,所以使用分布式主鍵,其實在前面的xml中已經(jīng)添加了實現(xiàn)<rdb:generate-key-column column-name="id"/>,接下來只要修改saves方法和save方法的實現(xiàn)就可以,也就是不給id賦值,并且插入的時候不給id字段,不過我在實踐過程中發(fā)現(xiàn)生成的id全是偶數(shù),不知道是不是偶然,如果不是,那么就需要重新找算法或者重新寫分配策略了.
歡迎工作一到五年的Java工程師朋友們加入Java高級互聯(lián)網(wǎng)架構(gòu):957734884,歡迎加入我們,給你意想不到的驚喜。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。