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