真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么用數(shù)據(jù)庫中間件Mycat+SpringBoot完成分庫分表

這篇文章主要講解了“怎么用數(shù)據(jù)庫中間件Mycat+SpringBoot完成分庫分表”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么用數(shù)據(jù)庫中間件Mycat+SpringBoot完成分庫分表”吧!

創(chuàng)新互聯(lián)公司服務(wù)項目包括零陵網(wǎng)站建設(shè)、零陵網(wǎng)站制作、零陵網(wǎng)頁制作以及零陵網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,零陵網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到零陵省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

一、背景

隨著時間和業(yè)務(wù)的發(fā)展,數(shù)據(jù)庫中的數(shù)據(jù)量增長是不可控的,庫和表中的數(shù)據(jù)會越來越大,隨之帶來的是更高的磁盤、IO、系統(tǒng)開銷,甚至性能上的瓶頸,而一臺服務(wù)的資源終究是有限的,因此需要對數(shù)據(jù)庫和表進行拆分,從而更好的提供數(shù)據(jù)服務(wù)。

當(dāng)用戶表達到千萬級別,在做很多操作的時候都會很吃力,所以當(dāng)數(shù)據(jù)增長到1000萬以上就需要分庫分表來緩解單庫(表)的壓力。

二、什么是分庫分表[1]

簡單來說,就是指通過某種特定的條件,將我們存放在同一個數(shù)據(jù)庫中的數(shù)據(jù)分散存放到多個數(shù)據(jù)庫(主機)上面,以達到分散單臺設(shè)備負載的效果。

數(shù)據(jù)的切分(Sharding)根據(jù)其切分規(guī)則的類型,可以分為兩種切分模式。一種是按照不同的表(或者Schema)來切分到不同的數(shù)據(jù)庫(主機)之上,這種切可以稱之為數(shù)據(jù)的垂直(縱向)切分;另外一種則是根據(jù)表中的數(shù)據(jù)的邏輯關(guān)系,將同一個表中的數(shù)據(jù)按照某種條件拆分到多臺數(shù)據(jù)庫(主機)上面,這種切分稱之為數(shù)據(jù)的水平(橫向)切分。

垂直切分的最大特點就是規(guī)則簡單,實施也更為方便,尤其適合各業(yè)務(wù)之間的耦合度非常低,相互影響很小,業(yè)務(wù)邏輯非常清晰的系統(tǒng)。在這種系統(tǒng)中,可以很容易做到將不同業(yè)務(wù)模塊所使用的表分拆到不同的數(shù)據(jù)庫中。根據(jù)不同的表來進行拆分,對應(yīng)用程序的影響也更小,拆分規(guī)則也會比較簡單清晰。

水平切分于垂直切分相比,相對來說稍微復(fù)雜一些。因為要將同一個表中的不同數(shù)據(jù)拆分到不同的數(shù)據(jù)庫中,對于應(yīng)用程序來說,拆分規(guī)則本身就較根據(jù)表名來拆分更為復(fù)雜,后期的數(shù)據(jù)維護也會更為復(fù)雜一些。

三、垂直切分 [1]

個數(shù)據(jù)庫由很多表的構(gòu)成,每個表對應(yīng)著不同的業(yè)務(wù),垂直切分是指按照業(yè)務(wù)將表進行分類,分布到不同的數(shù)據(jù)庫上面,這樣也就將數(shù)據(jù)或者說壓力分擔(dān)到不同的庫上面,如下圖:

怎么用數(shù)據(jù)庫中間件Mycat+SpringBoot完成分庫分表

系統(tǒng)被切分成了,用戶,訂單交易,支付幾個模塊。一個架構(gòu)設(shè)計較好的應(yīng)用系統(tǒng),其總體功能肯定是由很多個功能模塊所組成的,而每一個功能模塊所需要的數(shù)據(jù)對應(yīng)到數(shù)據(jù)庫中就是一個或者多個表。而在架構(gòu)設(shè)計中,各個功能模塊相互之間的交互點越統(tǒng)一越少,系統(tǒng)的耦合度就越低,系統(tǒng)各個模塊的維護性以及擴展性也就越好。這樣的系統(tǒng),實現(xiàn)數(shù)據(jù)的垂直切分也就越容易。

但是往往系統(tǒng)之有些表難以做到完全的獨立,存在這擴庫  join  的情況,對于這類的表,就需要去做平衡,是數(shù)據(jù)庫讓步業(yè)務(wù),共用一個數(shù)據(jù)源,還是分成多個庫,業(yè)務(wù)之間通過接口來做調(diào)用。在系統(tǒng)初期,數(shù)據(jù)量比較少,或者資源有限的情況下,會選擇共用數(shù)據(jù)源,但是當(dāng)數(shù)據(jù)發(fā)展到了一定的規(guī)模,負載很大的情況,就需要必須去做分割。

一般來講業(yè)務(wù)存在著復(fù)雜 join 的場景是難以切分的,往往業(yè)務(wù)獨立的易于切分。如何切分,切分到何種程度是考驗技術(shù)架構(gòu)的一個難題。下面來分析下垂直切分的優(yōu)缺點:

優(yōu)點

拆分后業(yè)務(wù)清晰,拆分規(guī)則明確;

系統(tǒng)之間整合或擴展容易;

數(shù)據(jù)維護簡單。

缺點

部分業(yè)務(wù)表無法 join,只能通過接口方式解決,提高了系統(tǒng)復(fù)雜度;

受每種業(yè)務(wù)不同的限制存在單庫性能瓶頸,不易數(shù)據(jù)擴展跟性能提高;

事務(wù)處理復(fù)雜。

由于垂直切分是按照業(yè)務(wù)的分類將表分散到不同的庫,所以有些業(yè)務(wù)表會過于龐大,存在單庫讀寫與存儲瓶頸,所以就需要水平拆分來做解決。

四、水平切分 [1]

相對于垂直拆分,水平拆分不是將表做分類,而是按照某個字段的某種規(guī)則來分散到多個庫之中,每個表中包含一部分數(shù)據(jù)。簡單來說,我們可以將數(shù)據(jù)的水平切分理解為是按照數(shù)據(jù)行的切分,就是將表中的某些行切分到一個數(shù)據(jù)庫,而另外的某些行又切分到其他的數(shù)據(jù)庫中,如圖:

怎么用數(shù)據(jù)庫中間件Mycat+SpringBoot完成分庫分表

拆分數(shù)據(jù)就需要定義分片規(guī)則。關(guān)系型數(shù)據(jù)庫是行列的二維模型,拆分的第一原則是找到拆分維度。比如:從會員的角度來分析,商戶訂單交易類系統(tǒng)中查詢會員某天某月某個訂單,那么就需要按照會員結(jié)合日期來拆分,不同的數(shù)據(jù)按照會員  ID 做分組,這樣所有的數(shù)據(jù)查詢 join 都會在單庫內(nèi)解決;如果從商戶的角度來講,要查詢某個商家某天所有的訂單數(shù),就需要按照商戶 ID  做拆分;但是如果系統(tǒng)既想按會員拆分,又想按商家數(shù)據(jù),則會有一定的困難。如何找到合適的分片規(guī)則需要綜合考慮衡。幾種典型的分片規(guī)則包括:

按照用戶 ID 求模,將數(shù)據(jù)分散到不同的數(shù)據(jù)庫,具有相同數(shù)據(jù)用戶的數(shù)據(jù)都被分散到一個庫中;

按照日期,將不同月甚至日的數(shù)據(jù)分散到不同的庫中;

按照某個特定的字段求摸,或者根據(jù)特定范圍段分散到不同的庫中。

如圖,切分原則都是根據(jù)業(yè)務(wù)找到適合的切分規(guī)則分散到不同的庫,下面用用戶 ID 求模舉

怎么用數(shù)據(jù)庫中間件Mycat+SpringBoot完成分庫分表

既然數(shù)據(jù)做了拆分有優(yōu)點也就優(yōu)缺點。

優(yōu)點

拆分規(guī)則抽象好,join 操作基本可以數(shù)據(jù)庫做;

不存在單庫大數(shù)據(jù),高并發(fā)的性能瓶頸;

應(yīng)用端改造較少;

提高了系統(tǒng)的穩(wěn)定性跟負載能力。

缺點

拆分規(guī)則難以抽象;

分片事務(wù)一致性難以解決;

數(shù)據(jù)多次擴展難度跟維護量極大;

跨庫 join 性能較差

五、什么是Mycat

它是一個開源的分布式數(shù)據(jù)庫系統(tǒng),是一個實現(xiàn)了  MySQL 協(xié)議的的Server,前端用戶可以把它看作是一個數(shù)據(jù)庫代理,用 MySQL 客戶端工具和命令行訪問,而其后端可以用MySQL  原生(Native)協(xié)議與多個 MySQL 服務(wù)器通信,也可以用 JDBC  協(xié)議與大多數(shù)主流數(shù)據(jù)庫服務(wù)器通信,其核心功能是分表分庫,即將一個大表水平分割為 N 個小表,存儲在后端 MySQL 服務(wù)器里或者其他數(shù)據(jù)庫里。

常見應(yīng)用場景:

單純的讀寫分離,此時配置最為簡單,支持讀寫分離,主從切換;

分表分庫,對于超過 1000 萬的表進行分片,最大支持 1000 億的單表分片;

多租戶應(yīng)用,每個應(yīng)用一個庫,但應(yīng)用程序只連接 Mycat,從而不改造程序本身,實現(xiàn)多租戶化;

報表系統(tǒng),借助于 Mycat 的分表能力,處理大規(guī)模報表的統(tǒng)計;? 替代 Hbase,分析大數(shù)據(jù);

作為海量數(shù)據(jù)實時查詢的一種簡單有效方案,比如 100 億條頻繁查詢的記錄需要在 3 秒內(nèi)查詢出來結(jié)果,除了基于主鍵的查詢,還可能存在范圍查詢或其他屬性查詢,此時 Mycat 可能是最簡單有效的選

六、SpringBoot+Mycat+MySQL實現(xiàn)分表分庫案例

關(guān)于分庫分表,Mycat已經(jīng)幫我們在內(nèi)部實現(xiàn)了路由的功能,我們只需要在Mycat中配置以下切分規(guī)則即可,對于開發(fā)者來說,我們就可以把Mycat看做是一個數(shù)據(jù)庫,接下來我們開始搭建環(huán)境:

步驟一:

Mycat是使用java寫的數(shù)據(jù)庫中間件,所以要運行Mycat前要準備要jdk的環(huán)境,要求是jdk1.7以上的環(huán)境。所以需要在系統(tǒng)中配置JAVA_HOME的環(huán)境變量.

步驟二:

從官網(wǎng)下載Mycat,http://dl.mycat.io/1.6-RELEASE/我們是基于CentOS7來搭建Mycat環(huán)境的,所以下載版本:Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

步驟三:

將下載好的安裝包上傳到服務(wù)器上并解壓.解壓之后目錄結(jié)構(gòu)如下:

怎么用數(shù)據(jù)庫中間件Mycat+SpringBoot完成分庫分表

步驟四:

配置切分規(guī)則:將如下配置復(fù)制粘貼覆蓋mycat/conf/schema.xml的內(nèi)容。

                                                                           select user()                     

:表示的是在mycat中的邏輯庫配置,邏輯庫名稱為:TESTDB

:表示在mycat中的邏輯表配置,邏輯表名稱為:user,映射到兩個數(shù)據(jù)庫節(jié)點dataNode中,切分規(guī)則為:rule1(在rule.xml配置)

:表示數(shù)據(jù)庫節(jié)點,這個節(jié)點不一定是單節(jié)點,可以配置成讀寫分離.

:真實的數(shù)據(jù)庫的地址配置

:用戶心跳檢測

:寫庫的配置

將如下配置復(fù)制粘貼覆蓋mycat/conf/rule.xml的內(nèi)容。

怎么用數(shù)據(jù)庫中間件Mycat+SpringBoot完成分庫分表

這里定義的是切分規(guī)則,是按照id列進行切分,切分規(guī)則是采取取模的方式,2:這里配置了我們有拆分了多個庫(表),需要和前面配置

中的dataNode個數(shù)一致,否則會出錯.

步驟五:

在數(shù)據(jù)庫中創(chuàng)建兩個數(shù)據(jù)庫db01,db02.每個庫中執(zhí)行如下建表語句:

CREATE TABLE `user` (  `id` bigint(20) NOT NULL,  `name` varchar(255) DEFAULT NULL,  PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

步驟六:

啟動mycat,執(zhí)行mycat/bin/startup_nowrap.sh

步驟七:

項目已經(jīng)上傳到githubhttps://github.com/javalanxiongwei/springboot-mycat搭建SpringBoot環(huán)境,執(zhí)行插入語句.application.properties配置如下:

怎么用數(shù)據(jù)庫中間件Mycat+SpringBoot完成分庫分表

步驟八:

測試:在地址欄輸入:http://localhost:8080/user/save?id=1&name=tomhttp://localhost:8080/user/save?id=2&name=jack查看數(shù)據(jù)庫發(fā)現(xiàn):id為1的數(shù)據(jù)插入到數(shù)據(jù)庫db02中的user表。id為2的數(shù)據(jù)插入到數(shù)據(jù)庫db01中的user表。在地址欄輸入:http://localhost:8080/user/list是可以看到剛剛插入的兩條記錄.

好到這一步,我們就已經(jīng)完成了分表分庫了。

感謝各位的閱讀,以上就是“怎么用數(shù)據(jù)庫中間件Mycat+SpringBoot完成分庫分表”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對怎么用數(shù)據(jù)庫中間件Mycat+SpringBoot完成分庫分表這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!


當(dāng)前標題:怎么用數(shù)據(jù)庫中間件Mycat+SpringBoot完成分庫分表
URL標題:http://weahome.cn/article/pppdpc.html

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部

    • <ul id="kyc4c"><pre id="kyc4c"></pre></ul><strike id="kyc4c"><rt id="kyc4c"></rt></strike>