這篇文章將為大家詳細(xì)講解有關(guān)MySQL中怎么實(shí)現(xiàn)海量數(shù)據(jù)分布式存儲(chǔ),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
創(chuàng)新互聯(lián)公司專(zhuān)注于龍州網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供龍州營(yíng)銷(xiāo)型網(wǎng)站建設(shè),龍州網(wǎng)站制作、龍州網(wǎng)頁(yè)設(shè)計(jì)、龍州網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造龍州網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供龍州網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。
1、分布式應(yīng)用的概念和優(yōu)勢(shì)
分布式數(shù)據(jù)庫(kù)是指利用高速網(wǎng)絡(luò)將物理上分散的多個(gè)數(shù)據(jù)存儲(chǔ)單元連接起來(lái)組成一個(gè)邏輯上統(tǒng)一的數(shù)據(jù)庫(kù)。分布式數(shù)據(jù)庫(kù)的基本思想是將原來(lái)集中式數(shù)據(jù)庫(kù)中的數(shù)據(jù)分散存儲(chǔ)到多個(gè)通過(guò)網(wǎng)絡(luò)連接的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)上,以獲得更大的存儲(chǔ)容量和更高的并發(fā)訪(fǎng)問(wèn)量。近年來(lái),隨著數(shù)據(jù)量的增長(zhǎng),分布式數(shù)據(jù)庫(kù)技術(shù)也得到了快速的發(fā)展,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)開(kāi)始從集中式模型向分布式存儲(chǔ),從集中式計(jì)算走向分布式計(jì)算。
分布式數(shù)據(jù)庫(kù)系統(tǒng)的主要目的是容災(zāi)、異地?cái)?shù)據(jù)備份,并且通過(guò)就近訪(fǎng)問(wèn)原則,用戶(hù)可以就近訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)節(jié)點(diǎn),這樣就實(shí)現(xiàn)了異地的負(fù)載均衡。同時(shí),通過(guò)數(shù)據(jù)庫(kù)之間的數(shù)據(jù)傳輸同步,可以分布式保持?jǐn)?shù)據(jù)的一致性,這個(gè)過(guò)程完成了數(shù)據(jù)備份,異地存儲(chǔ)數(shù)據(jù)在單點(diǎn)故障的時(shí)候不影響服務(wù)的訪(fǎng)問(wèn),只需要將訪(fǎng)問(wèn)流量切換異地鏡像就行。
分布式數(shù)據(jù)庫(kù)應(yīng)用的優(yōu)勢(shì)如下:
(1)適合分布式數(shù)據(jù)管理,能夠有效提高系統(tǒng)性能。
(2)系統(tǒng)經(jīng)濟(jì)性和靈活性好。
(3)系統(tǒng)的可靠性和可用性強(qiáng)。
2、mysql分布式應(yīng)用的主要技術(shù)
(1)mysql數(shù)據(jù)切割
數(shù)據(jù)切割(sharding)是指通過(guò)某種特定的條件,將存放在同一數(shù)據(jù)庫(kù)中的數(shù)據(jù)分散存放到多個(gè)數(shù)據(jù)庫(kù)(主機(jī))上面,以達(dá)到分散單臺(tái)設(shè)備負(fù)載的效果。數(shù)據(jù)切分還可以提高系統(tǒng)的總體可用性,因?yàn)閱闻_(tái)crash之后,只有總體數(shù)據(jù)的某部分不同,而不是所有數(shù)據(jù)。
根據(jù)其切分規(guī)則的類(lèi)型,可以分為兩種切分模式。一種是按照不同的表(或者schema)來(lái)切分到不同的數(shù)據(jù)庫(kù)(主機(jī))之上,這種切分成為數(shù)據(jù)的垂直(縱向切分);另一種則是根據(jù)表中數(shù)據(jù)的邏輯關(guān)系,將同一個(gè)表中的數(shù)據(jù)按照某種條件拆分到多臺(tái)數(shù)據(jù)庫(kù)(主機(jī))上面,這種切分稱(chēng)為數(shù)據(jù)的水平(橫向)切分。垂直切分的***特點(diǎn)就是規(guī)則簡(jiǎn)單,實(shí)施也更為方便,尤其適合各個(gè)業(yè)務(wù)之間耦合度低,相互影響小、業(yè)務(wù)邏輯非常清晰的系統(tǒng)。在這種系統(tǒng)中,可以很容易做到將不同業(yè)務(wù)模塊所使用的表拆分到不同的數(shù)據(jù)庫(kù)中。根據(jù)不同的表進(jìn)行拆分,對(duì)應(yīng)用程序的影響也更小,拆分規(guī)則也會(huì)比較簡(jiǎn)單清晰。水平切分比垂直切分更復(fù)雜一點(diǎn)。因?yàn)橐獙⑼粋€(gè)表中的不同數(shù)據(jù)拆分到不同的數(shù)據(jù)庫(kù)中,對(duì)于應(yīng)用程序來(lái)說(shuō),拆分規(guī)則本身比較復(fù)雜,后期的數(shù)據(jù)維護(hù)也更加復(fù)雜一些。
(2)為什么要切分?jǐn)?shù)據(jù)?
1)像Oracle這樣成熟穩(wěn)定的DB可以支撐海量數(shù)據(jù)的存儲(chǔ)和查詢(xún),但是價(jià)格不是所有人都承受得起。
2)負(fù)載高點(diǎn)時(shí),Master-Slaver模式中存在瓶頸?,F(xiàn)有技術(shù)中,在負(fù)載高點(diǎn)時(shí)使用相關(guān)的Replication機(jī)制來(lái)實(shí)現(xiàn)相關(guān)的讀寫(xiě)的吞吐性能。這種機(jī)制存在兩個(gè)瓶頸:一是有效性依賴(lài)于讀操作的比例,這里Master往往會(huì)成為瓶頸所在,寫(xiě)操作時(shí)需要一個(gè)順序隊(duì)列來(lái)執(zhí)行,過(guò)載時(shí)Master會(huì)承受不住,Slaver的數(shù)據(jù)同步延遲也會(huì)很大,同時(shí)還會(huì)消耗CPU的計(jì)算能力,為write操作在Master上執(zhí)行以后還是需要在每臺(tái)slave機(jī)器上都跑一次。而Sharding可以輕松的將計(jì)算,存儲(chǔ),I/O并行分發(fā)到多臺(tái)機(jī)器上,這樣可以充分利用多臺(tái)機(jī)器各種處理能力,同時(shí)可以避免單點(diǎn)失敗,提供系統(tǒng)的可用性,進(jìn)行很好的錯(cuò)誤隔離。
3)用免費(fèi)的MySQL和廉價(jià)的Server甚至是PC做集群,達(dá)到小型機(jī)+大型商業(yè)DB的效果,減少大量的資金投入,降低運(yùn)營(yíng)成本,何樂(lè)而不為呢?
Mysql5.1以上的版本都支持?jǐn)?shù)據(jù)表分區(qū)功能。數(shù)據(jù)庫(kù)中的數(shù)據(jù)在經(jīng)過(guò)垂直或水平切分被存放在不同的數(shù)據(jù)庫(kù)主機(jī)中之后,應(yīng)用系統(tǒng)面臨的***問(wèn)題就是如何讓這些數(shù)據(jù)源得到較好的整合,有以下兩種解決思路。
1)在每個(gè)應(yīng)用程序模塊中配置管理自己需要的一個(gè)(或者多個(gè))數(shù)據(jù)源,直接訪(fǎng)問(wèn)各個(gè)數(shù)據(jù)庫(kù),在模塊內(nèi)完成數(shù)據(jù)的整合。
2)通過(guò)中間代理層來(lái)統(tǒng)一管理所有的數(shù)據(jù)源,后端數(shù)據(jù)庫(kù)集群對(duì)前端應(yīng)用程序透明。
第二種方案,雖然短期內(nèi)需要付出的成本可能會(huì)大一些,但是對(duì)整個(gè)系統(tǒng)的擴(kuò)展性來(lái)說(shuō),是非常有幫助的。針對(duì)第二種方案,可以思路如下:
1)利用mysql proxy實(shí)現(xiàn)數(shù)據(jù)切分及整合。
Mysql proxy是在客戶(hù)端請(qǐng)求與mysql服務(wù)器之間建立一個(gè)連接池,所有客戶(hù)端請(qǐng)求都發(fā)送到mysql proxy,由mysql proxy進(jìn)行相應(yīng)的分析,判斷是讀操作還是寫(xiě)操作,然后發(fā)送到相應(yīng)的mysql服務(wù)器上。對(duì)于多節(jié)點(diǎn)slave集群,也可以做到負(fù)載均衡的效果。
2)利用amoeba實(shí)現(xiàn)數(shù)據(jù)切分及整合。
Amoeba是一個(gè)基于java開(kāi)發(fā)的、專(zhuān)注于解決分布式數(shù)據(jù)庫(kù)數(shù)據(jù)源整合proxy程序的開(kāi)源框架,amoeba已經(jīng)具有query路由,query過(guò)濾、讀寫(xiě)分離、負(fù)載均衡以及HA機(jī)制等相關(guān)內(nèi)容。Amoeba主要解決以下幾個(gè)問(wèn)題:
①數(shù)據(jù)切分后復(fù)雜數(shù)據(jù)源整合
②提供數(shù)據(jù)切分規(guī)則并降低數(shù)據(jù)切分規(guī)則給數(shù)據(jù)庫(kù)帶來(lái)的影響
③降低數(shù)據(jù)庫(kù)與客戶(hù)端的連接數(shù)
④讀寫(xiě)分離路由
3)利用HiveDB實(shí)現(xiàn)數(shù)據(jù)切分及整合。
3、mysql讀寫(xiě)分離
讀寫(xiě)分離是利用數(shù)據(jù)庫(kù)的復(fù)制技術(shù),將讀和寫(xiě)分布在不同的處理節(jié)點(diǎn)上,從而達(dá)到提高可用性和擴(kuò)展性的目的。主數(shù)據(jù)庫(kù)提供寫(xiě)操作,從數(shù)據(jù)庫(kù)提供讀操作,在很多系統(tǒng)中,更多地是讀操作。當(dāng)主數(shù)據(jù)庫(kù)進(jìn)行寫(xiě)操作時(shí),數(shù)據(jù)要同步到從數(shù)據(jù)庫(kù),這樣才能有效保證數(shù)據(jù)庫(kù)完整性。Mysql也有自己的同步數(shù)據(jù)技術(shù)。Mysql通過(guò)二進(jìn)制日志來(lái)復(fù)制數(shù)據(jù),主數(shù)據(jù)庫(kù)同步到從數(shù)據(jù)庫(kù)后,從數(shù)據(jù)庫(kù)一般由多臺(tái)數(shù)據(jù)庫(kù)組成,這樣才能達(dá)到減輕壓力的目的。讀操作應(yīng)根據(jù)服務(wù)器的壓力分配到不同的服務(wù)器,而不是簡(jiǎn)單的隨機(jī)分配。Mysql提供了mysql proxy實(shí)現(xiàn)讀寫(xiě)分離操作。
目前較為常見(jiàn)的mysql讀寫(xiě)分離分為以下兩種。
①基于程序代碼內(nèi)部實(shí)現(xiàn)
在代碼中根據(jù)select、insert進(jìn)行路由分類(lèi),這類(lèi)方法也是目前生產(chǎn)環(huán)境中應(yīng)用最廣泛的。
②基于中間代理層實(shí)現(xiàn)
代理位于客戶(hù)端和服務(wù)器之間,代理服務(wù)器收到客戶(hù)端請(qǐng)求后通過(guò)判斷轉(zhuǎn)發(fā)到后端數(shù)據(jù)庫(kù)。下圖是ebay讀寫(xiě)分離的結(jié)構(gòu)圖,通過(guò)share plex近乎實(shí)時(shí)的復(fù)制數(shù)據(jù)到其他數(shù)據(jù)節(jié)點(diǎn),再通過(guò)特定的模塊檢查數(shù)據(jù)庫(kù)狀態(tài),并進(jìn)行負(fù)載均衡、讀寫(xiě)分離,極大地提高了系統(tǒng)可用性。
4、mysql集群
Mysql cluster技術(shù)在分布式系統(tǒng)中為mysql數(shù)據(jù)提供了冗余特性,增強(qiáng)了安全性,使得單個(gè)mysql服務(wù)器故障不會(huì)對(duì)系統(tǒng)產(chǎn)生巨大的負(fù)面效應(yīng),系統(tǒng)的穩(wěn)定性得到保障。
Mysql cluster采用shared-nothing(無(wú)共享)架構(gòu)。Mysql custer主要利用了NDB存儲(chǔ)引擎來(lái)實(shí)現(xiàn),NDB存儲(chǔ)引擎是一個(gè)內(nèi)存式存儲(chǔ)引擎,要求數(shù)據(jù)必須全部加載到內(nèi)存之中。數(shù)據(jù)被自動(dòng)分布在集群中的不同存儲(chǔ)節(jié)點(diǎn)上,每個(gè)存儲(chǔ)節(jié)點(diǎn)只保存完整數(shù)據(jù)的一個(gè)分片(fragment)。同時(shí),用戶(hù)可以設(shè)置同一份數(shù)據(jù)保存在多個(gè)不同的存儲(chǔ)節(jié)點(diǎn)上,以保證單點(diǎn)故障不會(huì)造成數(shù)據(jù)丟失。
Mysql cluster需要一組計(jì)算機(jī),每臺(tái)計(jì)算機(jī)的角色可能是不一樣的。Mysql cluster按照節(jié)點(diǎn)類(lèi)型可以分為3類(lèi):管理節(jié)點(diǎn)(對(duì)其他節(jié)點(diǎn)進(jìn)行管理)、數(shù)據(jù)節(jié)點(diǎn)(存放cluster中的數(shù)據(jù),可以有多個(gè))和mysql節(jié)點(diǎn)(存放表結(jié)構(gòu),可以有多個(gè))。Cluster中的某計(jì)算機(jī)可以是某一種節(jié)點(diǎn),也可以是2種或3種節(jié)點(diǎn)的集合。這3種節(jié)點(diǎn)只是在邏輯上劃分,所以他們不一定和物理計(jì)算機(jī)是一一對(duì)應(yīng)的關(guān)系。多個(gè)節(jié)點(diǎn)之間可以分布在不同的地理位置,因此也是一個(gè)實(shí)現(xiàn)分布式數(shù)據(jù)庫(kù)的方案。
Mysql集群的出現(xiàn)很好的實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的負(fù)載均衡,減少了數(shù)據(jù)中心節(jié)點(diǎn)的壓力和大數(shù)據(jù)處理,當(dāng)數(shù)據(jù)庫(kù)中心節(jié)點(diǎn)出現(xiàn)故障時(shí),集群會(huì)采用一定的策略切換到其他備份節(jié)點(diǎn)上,有效的屏蔽了故障問(wèn)題,單節(jié)點(diǎn)的失效不會(huì)影響整個(gè)數(shù)據(jù)庫(kù)對(duì)外提供服務(wù)。而且通過(guò)采用數(shù)據(jù)庫(kù)集群架構(gòu),主從數(shù)據(jù)庫(kù)之間時(shí)刻都在進(jìn)行數(shù)據(jù)的同步冗余,數(shù)據(jù)庫(kù)是多點(diǎn)的、分布式的,良好的完成了數(shù)據(jù)庫(kù)數(shù)據(jù)的備份,避免了數(shù)據(jù)損失。
關(guān)于MySQL中怎么實(shí)現(xiàn)海量數(shù)據(jù)分布式存儲(chǔ)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
網(wǎng)頁(yè)名稱(chēng):MySQL中怎么實(shí)現(xiàn)海量數(shù)據(jù)分布式存儲(chǔ)
網(wǎng)頁(yè)地址:http://jinyejixie.com/article32/posgpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、電子商務(wù)、域名注冊(cè)、網(wǎng)頁(yè)設(shè)計(jì)公司、定制開(kāi)發(fā)、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)