圖1 垂直拆分架構(gòu)圖

垂直拆分的優(yōu)點(diǎn)表現(xiàn)在:

1、數(shù)據(jù)庫的拆分簡單明了,拆分規(guī)則明確;

2、應(yīng)用程序模塊清晰明確,容易整合;

3、數(shù)據(jù)維護(hù)方便易行,容易定位。

垂直拆分的缺點(diǎn)則表現(xiàn)在:

1、部分表關(guān)聯(lián)無法在數(shù)據(jù)庫級(jí)別完成,需要在程序中完成;

2、頻繁訪問超大數(shù)據(jù)量的表時(shí)會(huì)存在性能瓶頸;

3、事務(wù)處理更加復(fù)雜。

1.2 水平拆分

水平拆分是將訪問頻繁的大數(shù)據(jù)量的表,按照某種規(guī)則拆分到多個(gè)表中,每個(gè)表只包含一部分?jǐn)?shù)據(jù)。

數(shù)據(jù)的水平拆分是按照數(shù)據(jù)行的拆分,將表中的某些行拆分到一個(gè)數(shù)據(jù)庫,而另外的某些行拆分到其他的數(shù)據(jù)庫中,且拆分時(shí)需按照特定的規(guī)則來進(jìn)行,如根據(jù)公司號(hào)或者用戶編碼等進(jìn)行拆分?;谟脩舻木幋a進(jìn)行數(shù)據(jù)水平拆分,如圖2所示:

圖2 水平拆分架構(gòu)圖

水平拆分的優(yōu)點(diǎn)表現(xiàn)在:

1、表關(guān)聯(lián)能夠在數(shù)據(jù)庫端全部完成;

2、不存在超大型數(shù)據(jù)量和高負(fù)載的表;

3、事務(wù)處理相對(duì)簡單;

水平拆分的缺點(diǎn)則表現(xiàn)在:

1、切分規(guī)則較復(fù)雜,很難抽象出一個(gè)滿足能整個(gè)數(shù)據(jù)庫的切分規(guī)則;

2、后期數(shù)據(jù)的維護(hù)難度有所增加,人為手工定位數(shù)據(jù)更困難;

3、應(yīng)用系統(tǒng)各模塊的耦合度較高,對(duì)數(shù)據(jù)的遷移拆分造成一定的困難。

1.3 聯(lián)合拆分

在實(shí)際的應(yīng)用場景中,系統(tǒng)的業(yè)務(wù)邏輯比較復(fù)雜,系統(tǒng)負(fù)載比較大,無法通過單獨(dú)的一種數(shù)據(jù)拆分方式來實(shí)現(xiàn),需要兩種拆分方法結(jié)合使用,分布式數(shù)據(jù)庫應(yīng)采用垂直拆分與水平拆分聯(lián)合的方式,如圖3所示:

圖3 聯(lián)合拆分架構(gòu)圖

聯(lián)合拆分的優(yōu)點(diǎn):

1、可以充分利用垂直拆分和水平拆分各自的優(yōu)勢而避免各自的缺陷;

2、系統(tǒng)擴(kuò)展性得到最大化的提升。

聯(lián)合拆分的缺點(diǎn):

1、數(shù)據(jù)庫系統(tǒng)架構(gòu)比較復(fù)雜,維護(hù)難度更大;

2、應(yīng)用程序架構(gòu)相對(duì)更復(fù)雜。

2 、數(shù)據(jù)整合

數(shù)據(jù)庫在經(jīng)過垂直和(或)水平拆分被存放在不同的數(shù)據(jù)庫之后,RS10系統(tǒng)最大的問題是訪問業(yè)務(wù)數(shù)據(jù),讓業(yè)務(wù)數(shù)據(jù)得到較好的整合,因此,存在兩種解決方案:

第一種方案,在每個(gè)子系統(tǒng)中配置和管理需要的數(shù)據(jù)源,直接訪問各個(gè)數(shù)據(jù)庫,在每個(gè)子系統(tǒng)內(nèi)完成數(shù)據(jù)的整合;

第二種方案,使用數(shù)據(jù)層框架來統(tǒng)一管理所有的數(shù)據(jù)源,數(shù)據(jù)庫集群對(duì)每個(gè)子系統(tǒng)透明。針對(duì)RS10,我們采用第二種解決方案來實(shí)現(xiàn)數(shù)據(jù)的整合。

3、分布式數(shù)據(jù)庫層架構(gòu)

在選擇通過數(shù)據(jù)庫的中間代理層來解決數(shù)據(jù)的拆分和整合方案之后,我們選取開源的Amoeba框架,在它基礎(chǔ)上開發(fā)出適合RS10的數(shù)據(jù)拆分和整合方案。

Amoeba 是一個(gè)基于java開發(fā)的,專注于解決分布式數(shù)據(jù)庫數(shù)據(jù)源整合的開源框架,可用來監(jiān)視、分析或者傳輸他們之間的通訊信息,實(shí)現(xiàn)連接路由、Query分析、 Query過濾和修改、負(fù)載均衡以及基本的HA機(jī)制等。所有客戶端請(qǐng)求都是通過這個(gè)中間層,然后經(jīng)由中間層進(jìn)行相應(yīng)的分析,判斷出是讀操作還是寫操作,然后分發(fā)到相應(yīng)的數(shù)據(jù)庫服務(wù)器上,我們基于這個(gè)框架來實(shí)現(xiàn)和部署RS10的分布式數(shù)據(jù)庫,架構(gòu)圖如圖4所示:

圖4 分布式數(shù)據(jù)庫層架構(gòu)

Amoeba能解決RS10以下問題:

1、RS10分庫分表以及拆分之后數(shù)據(jù)的整合;

2、提供了數(shù)據(jù)拆分規(guī)則,降低拆分規(guī)則給數(shù)據(jù)庫帶來的影響;

3、減少了數(shù)據(jù)庫與客戶端的連接數(shù),用戶只訪問自己需要的數(shù)據(jù);

4、通過中間層代理,實(shí)現(xiàn)讀寫分離。

基于這個(gè)開源框架我們能開發(fā)出同時(shí)連接不同的數(shù)據(jù)庫的數(shù)據(jù)源為前端應(yīng)用程序提供服務(wù),我們通過Amoeba框架分析Query語句,根據(jù)Query 語句中所請(qǐng)求的數(shù)據(jù)來自動(dòng)識(shí)別Query語句的數(shù)據(jù)源是什么類型數(shù)據(jù)庫在哪個(gè)物理主機(jī)上面,然后選擇特定的JDBC驅(qū)動(dòng)和相應(yīng)協(xié)議連接后臺(tái)數(shù)據(jù)庫。

通過數(shù)據(jù)的垂直和水平拆分,增強(qiáng)數(shù)據(jù)庫的整體服務(wù)能力,通過數(shù)據(jù)層框架解決數(shù)據(jù)拆分和整合,使數(shù)據(jù)庫很容易擴(kuò)展,只需要增加廉價(jià)的PC服務(wù)器,即可線性增加數(shù)據(jù)庫集群的整體服務(wù)能力,從而實(shí)現(xiàn)分布式數(shù)據(jù)庫的部署和擴(kuò)展。

4、結(jié)束語

目前,關(guān)于分布式數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)處理的研究很多,針對(duì)RS10大數(shù)據(jù)量的性能以及并發(fā)訪問效率低的問題,基于Amoeba框架,對(duì)大數(shù)據(jù)量的表進(jìn)行 拆分,對(duì)集中式部署的數(shù)據(jù)庫采用分布式部署,有效的解決數(shù)據(jù)量大、并發(fā)訪問效率低的問題。分布式數(shù)據(jù)庫對(duì)數(shù)據(jù)的拆分和整合是最關(guān)鍵的環(huán)節(jié),只有充分解決這 個(gè)問題,分布式數(shù)據(jù)庫才能得到有效地使用。

分享到

huanghui

相關(guān)推薦