簡(jiǎn)介

   前面兩篇文章主要講了數(shù)據(jù)庫(kù)讀寫(xiě)分離分表分庫(kù)的一些問(wèn)題,這篇文章主要講一下我個(gè)人實(shí)現(xiàn)的一個(gè)分表分庫(kù)項(xiàng)目。

    在此之前,我有寫(xiě)過(guò)一個(gè).Net的分庫(kù),最近在做Java的項(xiàng)目,就順便做出一個(gè)Java版本,這個(gè)項(xiàng)目源于我另外的一個(gè)業(yè)務(wù)項(xiàng)目,在這個(gè)業(yè)務(wù)項(xiàng)目中有分表(在一個(gè)數(shù)據(jù)庫(kù)下有多張表),當(dāng)時(shí)寫(xiě)了一套基于分表的幫助類(lèi),隨著這個(gè)業(yè)務(wù)的的發(fā)展,基于分表的解決方案有一定的弊端,主要有兩個(gè):

    1.  不能很好的擴(kuò)展,在一個(gè)數(shù)據(jù)庫(kù)下面有20張表,當(dāng)業(yè)務(wù)繁忙的時(shí)候,數(shù)據(jù)庫(kù)出現(xiàn)了壓力(公司里面多個(gè)項(xiàng)目共用一個(gè)數(shù)據(jù)庫(kù)服務(wù)器,有可能是其他項(xiàng)目影響了我的項(xiàng)目),這個(gè)時(shí)候想要擴(kuò)展就比較麻煩了, 我可以將其中10張表遷移到另外的機(jī)器,同時(shí)我的代碼路由算法就要改,其實(shí)將其中10張表遷移到另外服務(wù)器上,就已經(jīng)類(lèi)似于分庫(kù)了。 

    2. 基于分表對(duì)業(yè)務(wù)的侵入性較高,我要先通過(guò)算法得到具體的表索引(即表的編號(hào),比如user_15),然后要將整個(gè)索引和表前綴進(jìn)行拼接才能得到真正的表名。 

    所以在開(kāi)源分表分庫(kù)的項(xiàng)目的時(shí)候,我對(duì)項(xiàng)目進(jìn)行了升級(jí),改為分庫(kù)模式,即有多個(gè)數(shù)據(jù)庫(kù),每個(gè)數(shù)據(jù)庫(kù)一張表,表名都一樣,這樣你就可以在mybatis中不需要再對(duì)表名進(jìn)行修改。 降低了浸入性,同時(shí)也方便后續(xù)的擴(kuò)展,你可以將這些數(shù)據(jù)庫(kù)放在一臺(tái)機(jī)器上,也可以在后續(xù)數(shù)據(jù)庫(kù)服務(wù)器性能緊張的時(shí)候,將一部分?jǐn)?shù)據(jù)庫(kù)遷移到其他機(jī)器上。 

    最后說(shuō)一下我當(dāng)時(shí)為什么沒(méi)有選擇開(kāi)源的解決方案,目前我知道的開(kāi)源方案包括 sharding-jdbc ,mycat ,但是當(dāng)時(shí)時(shí)間緊,任務(wù)重,研究熟悉部署這些項(xiàng)目,可能需要1-2天的時(shí)間,并且后續(xù)使用過(guò)程中,出了問(wèn)題,還需要花時(shí)間排查,mycat 是基于分庫(kù)的,所以并不適合我這個(gè)項(xiàng)目,而我的項(xiàng)目中,在操作數(shù)據(jù)庫(kù)之前,已經(jīng)可以知道具體要操作哪張表,對(duì)分表的操作也比較簡(jiǎn)單,但是要得到具體的表索引比較麻煩,是要經(jīng)過(guò)多個(gè)key運(yùn)算得到的,綜合所有,我選擇了自己寫(xiě)了一個(gè)。 

項(xiàng)目介紹

項(xiàng)目比較簡(jiǎn)單,所有和分庫(kù)相關(guān)的都在shardingcore中。 test是測(cè)試用的。 

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開(kāi)發(fā)培訓(xùn)

 shardingcore的項(xiàng)目結(jié)構(gòu)。

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開(kāi)發(fā)培訓(xùn)

其中MultipleDataSource是為了實(shí)現(xiàn)切換數(shù)據(jù)庫(kù)連接,這塊代碼是參考網(wǎng)上數(shù)據(jù)庫(kù)讀寫(xiě)分離的。

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開(kāi)發(fā)培訓(xùn)

 ShardingDBAspect是分庫(kù)的核心代碼。 

網(wǎng)友評(píng)論