歡迎關(guān)注筆者的公眾號(hào):【阿飛的博客】堂氯,首發(fā)都在這里V囟丁!祖灰!
什么钟沛?你們的測(cè)試是小哥哥?那就不要往下看了局扶,讓他怎么難怎么來(lái)恨统。
建議
根據(jù)你的業(yè)務(wù)特點(diǎn)叁扫,單表 > 分區(qū) > 單庫(kù)分表 > 分庫(kù)分表,在滿(mǎn)足業(yè)務(wù)前提下畜埋,優(yōu)先級(jí)從左到右莫绣,不接受任何反駁。嘿嘿
背景
做過(guò)分表的(單庫(kù)分表或者分庫(kù)分表)都知道悠鞍,在你沒(méi)有依賴(lài)任何中間件之前对室,使用Navicat或者其他類(lèi)似工具操作MySQL,那將是災(zāi)難咖祭,如下圖所示:
如果是類(lèi)似取模這類(lèi)簡(jiǎn)單算法分表還好說(shuō)掩宜,能一眼根據(jù)分片鍵知道分表結(jié),比如根據(jù)用戶(hù)ID對(duì)128取模分表么翰,那么用戶(hù)ID為128的用戶(hù)數(shù)據(jù)就在表tb_user_0中牺汤。但是如果是采用類(lèi)似一致性hash算法或者更復(fù)雜的分表算法,那么我們首先需要利用程序根據(jù)分片鍵算出分表結(jié)果浩嫌,然后再到Navicat中對(duì)該表進(jìn)行CRUD檐迟。開(kāi)發(fā)尚且如此困難,測(cè)試小姐姐估計(jì)要崩潰了哈码耐。哪里有困難追迟,哪里就有機(jī)會(huì)。所以骚腥,這就是你和測(cè)試小姐姐拉近機(jī)會(huì)敦间、表現(xiàn)自己的時(shí)候。
本文要介紹的桦沉,能解決這個(gè)問(wèn)題的工具就是sharding-proxy(MyCAT也有類(lèi)似工具每瞒,只是易用性簡(jiǎn)直就是渣渣),看看部署sharding-proxy后使用Navicat訪問(wèn)MySQL的效果圖纯露,開(kāi)不開(kāi)森剿骨,激不激動(dòng):
所以,sharding-proxy能帶來(lái)什么呢埠褪?先說(shuō)優(yōu)點(diǎn)吧:
- 完全屏蔽sharding細(xì)節(jié)浓利,把它當(dāng)做一張普通的表增刪改查即可(分表算法集成在sharding-proxy的配置文件中,用戶(hù)不需要care)
- 打開(kāi)數(shù)據(jù)庫(kù)后钞速,不再是看到滿(mǎn)屏的表贷掖,而是只有幾張簡(jiǎn)單的表(如上圖左側(cè)所示)。
- 一個(gè)sharding-proxy可以代理多個(gè)數(shù)據(jù)源渴语,測(cè)試只需要對(duì)接一個(gè)sharding-proxy即可苹威。
再說(shuō)缺點(diǎn):
- 無(wú)法操作"設(shè)計(jì)表",即不能看到DDL驾凶。但是可以通過(guò)F6快捷鍵后show create table table_name查看表結(jié)果(以Navicat為例)牙甫;
- sharding-sphere不支持的語(yǔ)法(非常有限)掷酗,也不能在Navicate上操作。
是不是感覺(jué)很厲害的樣子窟哺,OK泻轰,讓我們花10分鐘給測(cè)試小姐姐一個(gè)驚喜吧(部署sharding-proxy)。
sharding-proxy
部署sharding-proxy非常簡(jiǎn)單且轨,只需如下幾個(gè)簡(jiǎn)單的步驟浮声。另外,本次部署以sharding-proxy-3.0.0版本為例旋奢。
下載
下載地址:https://github.com/sharding-sphere/sharding-sphere-doc/raw/master/dist/sharding-proxy-3.0.0.tar.gz
下載后解壓泳挥,我們看到只有簡(jiǎn)單的三個(gè)目錄:lib目錄就是sharding-proxy核心代碼,以及依賴(lài)的JAR包黄绩;bin目錄就是存放啟停腳本的羡洁;conf目錄就是存放所有配置文件玷过,包括sharding-proxy服務(wù)的配置文件爽丹、數(shù)據(jù)源以及sharding規(guī)則配置文件和項(xiàng)目日志配置文件。
lib目錄沒(méi)什么好說(shuō)的辛蚊,就是sharding-proxy項(xiàng)目以及依賴(lài)的jar包粤蝎。bin目錄里面就是window或者Linux環(huán)境啟停腳本。sharding-proxy啟動(dòng)的默認(rèn)端口是3307袋马,如果要自定義端口(以3308)初澎,執(zhí)行sh start.sh 3308
即可(window環(huán)境修改start.bat即可)。所有重要的配置都在conf目錄下虑凛。
配置
- logback.xml
首先就是最簡(jiǎn)單的日志配置文件logback.xml碑宴,筆者對(duì)其簡(jiǎn)單的修改了一下,你可以任意自定義桑谍,這個(gè)沒(méi)什么好說(shuō)的延柠,非常簡(jiǎn)單。
- server.xml
接下來(lái)就是與sharding-proxy服務(wù)相關(guān)的配置文件server.yaml锣披,筆者的配置文件如下所示:
orchestration:
name: orchestration_afei
overwrite: true
registry:
# zk地址贞间,建議集群
serverLists: 127.0.0.1:2181
namespace: orchestration_afei
# 用戶(hù)通過(guò)Navicat訪問(wèn)sharding-proxy的用戶(hù)名密碼
authentication:
username: afei
password: afei
# sharding-proxy相關(guān)配置,建議sql.show設(shè)置為true雹仿,方便定位問(wèn)題
props:
max.connections.size.per.query: 1
acceptor.size: 16
executor.size: 16
proxy.transaction.enabled: false
proxy.opentracing.enabled: false
sql.show: true
- config.xml
接下來(lái)就是最重要的數(shù)據(jù)源以及sharding規(guī)則配置文件config-.xml了增热。需要說(shuō)明的是,一個(gè)sharding-proxy實(shí)例能支持多個(gè)數(shù)據(jù)源*胧辽。
配置參考
schemaName: afei
dataSources:
afei:
url: jdbc:mysql://172.0.0.1:3306/afei?serverTimezone=UTC&useSSL=false
username: afei
password: afei
autoCommit: true
connectionTimeout: 10000
idleTimeout: 60000
maxLifetime: 1800000
maximumPoolSize: 50
shardingRule:
tables:
# tb_afei的分表算法是根據(jù)trade_id對(duì)128取模
tb_afei:
actualDataNodes: afeidb.tb_afei_${0..127}
tableStrategy:
inline:
shardingColumn: trade_id
algorithmExpression: tb_afei_${trade_id % 128}
# afei_fenbiao的分表算法是在AfeiFenbiaoShardingAlgorithm中自定義
afei_fenbiao:
actualDataNodes: afeidb.afei_fenbiao_${1..127}
tableStrategy:
standard:
shardingColumn: id
preciseAlgorithmClassName: com.afei.sjdbc.proxy.AfeiFenbiaoShardingAlgorithm
bindingTables:
# 默認(rèn)數(shù)據(jù)庫(kù)沒(méi)有分的策略
defaultDatabaseStrategy:
none:
# 默認(rèn)表沒(méi)有分的策略
defaultTableStrategy:
none:
defaultKeyGeneratorClassName: io.shardingsphere.core.keygen.DefaultKeyGenerator
對(duì)應(yīng)自定義分表算法峻仇,只需要將對(duì)應(yīng)算法編譯后的class文件放到conf目錄下即可,參考目錄結(jié)構(gòu):
com
├── afei/sjdbc/proxy/AfeiFenbiaoShardingAlgorithm.class
config-pay.yaml
config-account.yaml
logback.xml
server.yaml
其源碼只需要參考io.shardingsphere.core.routing.strategy.ShardingAlgorithm.java的實(shí)現(xiàn)類(lèi)即可邑商,例如PreciseOrderShardingAlgorithm.java摄咆。
- Navicat
接下來(lái)只需要讓測(cè)試小姐姐用Navicat連接上sharding-proxy即可帆调,至于分庫(kù)分表這些細(xì)節(jié)本來(lái)就應(yīng)該對(duì)用戶(hù)是屏蔽的,是不是測(cè)試小姐姐會(huì)感覺(jué)你棒棒噠: