分庫分表中間件sharding-jdbc的使用

數據分片產生的背景,可以查看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的使用
使用Sharding-JDBC進行讀寫分離實戰

在數據庫的操作中,寫操作是非常耗時的,而最常用的是讀操作,讀寫分離的目的是避免數據庫的寫操作影響讀操作的效率.最重要的目的還是減少數據庫的壓力,提高性能.

這只是模仿讀寫分析實戰,流程是創建兩個數據庫,配置兩個數據源,一個是主表,一個是從表,寫修改刪除在主表,查詢是在從表.

創建數據庫的語句:
分庫分表中間件sharding-jdbc的使用
創建項目,引入依賴
分庫分表中間件sharding-jdbc的使用
配置文件的編寫(使用xml的方式來實現):
分庫分表中間件sharding-jdbc的使用
編寫model,service,controller
分庫分表中間件sharding-jdbc的使用分庫分表中間件sharding-jdbc的使用
啓動類:
分庫分表中間件sharding-jdbc的使用
在查詢前使用這句可以指定從主庫中進行讀取數據.

分片算法參考:
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張表
分庫分表中間件sharding-jdbc的使用
重新創建xml文件sharding-table.xml:
分庫分表中間件sharding-jdbc的使用
上面在使用分表的時候使用的是inline表達式.還有一種自定義表達式,上面是註釋掉的,使用的是類來進行分表,但是我測試過程一直是類型轉換異常,Integer轉不成Long,這個錯誤清除,不知道發生在哪,因爲着急,就不仔細研究了,下面把自定義表達式的類貼出來,有興趣的可以試試.
分庫分表中間件sharding-jdbc的使用
編寫controller
分庫分表中間件sharding-jdbc的使用
分庫分表
前面說了單庫分表,那分庫分表呢?一樣的實現.

創建數據庫和表
分庫分表中間件sharding-jdbc的使用
創建sharding-db-table.xml
分庫分表中間件sharding-jdbc的使用
分庫分表中間件sharding-jdbc的使用
添加數據庫的分庫策略
分庫分表中間件sharding-jdbc的使用
修改controller中的saves方法,進行測試:
分庫分表中間件sharding-jdbc的使用
分佈式主鍵的使用
爲了保證插入的主鍵不重複,所以使用分佈式主鍵,其實在前面的xml中已經添加了實現<rdb:generate-key-column column-name="id"/>,接下來只要修改saves方法和save方法的實現就可以,也就是不給id賦值,並且插入的時候不給id字段,不過我在實踐過程中發現生成的id全是偶數,不知道是不是偶然,如果不是,那麼就需要重新找算法或者重新寫分配策略了.
歡迎工作一到五年的Java工程師朋友們加入Java高級互聯網架構:957734884,歡迎加入我們,給你意想不到的驚喜。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章