999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

表廣播機制在MyCat中的實現(xiàn)

2018-03-20 09:10:17梁正和王法強
計算機技術(shù)與發(fā)展 2018年3期
關(guān)鍵詞:數(shù)據(jù)庫機制

王 錦,梁正和,王法強

(河海大學(xué) 計算機與信息學(xué)院,江蘇 南京 211110)

0 引 言

隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,移動網(wǎng)絡(luò)、局域網(wǎng)、廣域網(wǎng)、Internet得到了巨大的發(fā)展,集中部署的單機數(shù)據(jù)庫系統(tǒng)己經(jīng)不能夠適應(yīng)這樣的環(huán)境[1],使用服務(wù)器集群來解決海量數(shù)據(jù)[2]成為必然趨勢,分布式數(shù)據(jù)庫應(yīng)運而生。MyCat分布式數(shù)據(jù)庫中間件[3]由阿里巴巴的開源項目cobar[4]發(fā)展而來,其本身提供了分布式資源整合方案。該產(chǎn)品具有雙機熱備份、負載均衡、SQL語句重寫、讀寫分離[5]、查詢路由、多臺數(shù)據(jù)庫并行處理以及結(jié)果集合并等功能[6],并提供了對MySQL、PostGreSQL等應(yīng)用廣泛的開源關(guān)系型數(shù)據(jù)庫的分布式支持。該分布式數(shù)據(jù)庫中間件為用戶提供廉價的數(shù)據(jù)庫集群,平滑地將現(xiàn)有的單機集中式數(shù)據(jù)庫和應(yīng)用遷移到“云”[7]端,同時保留原有數(shù)據(jù)庫的查詢能力。

通過MyCat可以搭建以MySQL為底層節(jié)點的分布式數(shù)據(jù)庫系統(tǒng),系統(tǒng)通過MySQL的通信協(xié)議[8]與用戶以及底層數(shù)據(jù)庫通信。對于用戶,通過該中間件能夠透明地訪問整個集群,故而原有的基于MySQL開發(fā)的應(yīng)用均無需修改,直接遷移到分布式系統(tǒng)中。該系統(tǒng)在中間件中建立了完整的Schema(模式)、Table(表)、User(用戶)的邏輯模型,將整套模型通過邏輯規(guī)則映射到每個數(shù)據(jù)節(jié)點上的MySQL實例中,并可以實現(xiàn)事務(wù)處理。

面對一些數(shù)據(jù)量巨大的表,可以通過MyCat對數(shù)據(jù)進行水平切分[9],在保證每個分片節(jié)點的表結(jié)構(gòu)一致的情況下,將表映射到不同的數(shù)據(jù)引擎上,從邏輯上實現(xiàn)數(shù)據(jù)庫容量的擴充。MyCat不支持跨分片連接查詢,需要將與其關(guān)聯(lián)的表設(shè)置為全局表分布在各個分片上。由于MyCat的弱Xa事務(wù)[10]機制,頻繁操縱全局表可能會導(dǎo)致異常情況的發(fā)生:某個用戶在修改好全局表提交的一瞬間,忽然某個節(jié)點出錯了,可能會出現(xiàn)某些節(jié)點已成功修改而出錯節(jié)點數(shù)據(jù)無變更,使得各個節(jié)點數(shù)據(jù)不一致的情況。對于一個大企業(yè),該類問題是難以忍受的。MyCat中的表廣播機制改變了原始的對全局表的操作邏輯,把原來的同時向多個節(jié)點發(fā)送的DML[11]消息,修改為只向全局表中的主節(jié)點發(fā)送廣播消息,待主節(jié)點接收消息后再向其他節(jié)點發(fā)送廣播,通知其他節(jié)點有新消息到達,實現(xiàn)各節(jié)點間的數(shù)據(jù)同步。若主節(jié)點在修改過程中突遇異常情況致使操作中斷,則所有節(jié)點均無修改操作;若其他節(jié)點在同步過程中出現(xiàn)意外中斷,待故障排除后,繼續(xù)未完成的同步工作,成功解決了多個節(jié)點數(shù)據(jù)不一致的問題。

1 MyCat中的表廣播機制

1.1 MyCat中的弱XA事務(wù)

MyCat中的事務(wù)主要包括SQL不跨分片事務(wù)和SQL跨分片事務(wù)[3]。對于SQL不跨分片這種情況,SQL僅僅是在一個數(shù)據(jù)節(jié)點上執(zhí)行,此時MyCat事務(wù)模式同標準的數(shù)據(jù)庫事務(wù)模式[12]完全一致,或提交、或回滾,能夠保證強一致性[13];對于SQL跨分片的事務(wù),首先事務(wù)內(nèi)的SQL在各自的分片上執(zhí)行并返回狀態(tài)碼,若某個分片上的返回碼為ERROR,則MyCat認為事務(wù)失敗,應(yīng)用端只能回滾(rollback)事務(wù),MyCat收到回滾指令后,依次回滾事務(wù)中涉及到的所有分片;若事務(wù)中的所有SQL的執(zhí)行都返回成功(OK)的返回碼,則應(yīng)用程序提交事務(wù),由MyCat同時向事務(wù)中涉及到的節(jié)點發(fā)送提交事務(wù)的指令(commit),在commit的時候,若某個節(jié)點出錯,MyCat也無法等節(jié)點恢復(fù)后重新commit,出現(xiàn)部分節(jié)點commit成功而部分節(jié)點沒有commit的情況。由于跨分片事務(wù)的第二階段無法保證強一致性,稱MyCat是一種弱XA事務(wù)模式。

1.2 表廣播機制的基本原理

表廣播機制的實現(xiàn)主要分為三個步驟:

(1)用戶發(fā)送DML(數(shù)據(jù)操作語言)請求,主機接收到命令,向主節(jié)點發(fā)送廣播。主節(jié)點接收到消息,將消息記錄到二進制文件,并將消息發(fā)送給其他從節(jié)點。

(2)從節(jié)點讀取消息,并將消息寫入到自己的中繼日志。

(3)從節(jié)點重做中繼日志中的事件,并改變自己的數(shù)據(jù)。

如圖1所示,主機接受請求后向主節(jié)點發(fā)送廣播,主節(jié)點接收消息并記錄二進制文件。在每個事務(wù)更新數(shù)據(jù)完成之前,主節(jié)點在二日志文件中記錄這些改變。MySQL線程將事務(wù)串行地寫入二進制日志,在事件寫入完成后,主節(jié)點通知存儲引擎提交事務(wù)并向其他從節(jié)點發(fā)送廣播。

圖1 表廣播機制原理圖

從節(jié)點接收到消息,將主節(jié)點的二進制日志拷貝到自己的中繼日志。首先,從節(jié)點開始一個工作線程(I/O線程),I/O線程在主節(jié)點上打開一個普通的連接,然后開始二進制轉(zhuǎn)存。二進制轉(zhuǎn)存程序從主節(jié)點的二進制日志中讀取消息事件,如果沒有新的消息,它會睡眠并等待主節(jié)點發(fā)送新的廣播。

SQL從線程從中繼日志讀取消息事件,并重放其中的事件以更新從節(jié)點中的數(shù)據(jù),使其與主節(jié)點中的數(shù)據(jù)一致。

1.3 表廣播機制在MyCat中的應(yīng)用

MyCat是一個開源的分布式數(shù)據(jù)庫系統(tǒng),是一個實現(xiàn)了MySQL協(xié)議的server,前端用戶可以把它看作一個數(shù)據(jù)庫代理[14],用MySQL客戶端工具和命令行訪問,而其后端可以用MySQL原聲(Native)協(xié)議[15]與多個MySQL服務(wù)器通信,也可以用JDBC協(xié)議與大多數(shù)主流數(shù)據(jù)庫服務(wù)器[16]通信。MyCat中有兩種典型類型的表,一種是按照某種給定的分片規(guī)則,將數(shù)據(jù)進行水平切分,把一個大表水平分割成N個小表,存儲在后端MySQL服務(wù)器或者其他不同的數(shù)據(jù)庫;另一種是全局表,MyCat接收外界發(fā)送來的SQL語句,將DML SQL語句分別發(fā)送到各個數(shù)據(jù)庫節(jié)點上依次執(zhí)行,圖2形象地描述了全局表的DML操作過程。若對全局表頻繁地進行增刪改操作,由于MyCat的弱XA機制,很容易發(fā)生各節(jié)點數(shù)據(jù)不一致的情況。

圖2 原始MyCat全局表的DML操作過程

MyCat中的表廣播機制是針對全局表的,為全局表新增了一個屬性,當該屬性值為true時,改變原始SQL語句的執(zhí)行邏輯。MyCat接收到DML命令,向主節(jié)點發(fā)送廣播,主節(jié)點執(zhí)行命令并保存二進制消息文件,同時向從節(jié)點推送消息,從節(jié)點接收到廣播,同步主節(jié)點的數(shù)據(jù)。實現(xiàn)了表廣播機制的MyCat即使在修改數(shù)據(jù)時出現(xiàn)節(jié)點異常的情況,待異常解除后,會主動讀取存放消息的日志文件、同步數(shù)據(jù),保證了強一致性。

圖3形象展示了DML操作在表廣播機制下的執(zhí)行過程,即當MyCat接收到插入類型的SQL語句時,只向主節(jié)點發(fā)送相應(yīng)的SQL語句,再通過日志文件,同步到其他節(jié)點。

圖3 表廣播機制下的DML操作過程

2 表廣播機制在MyCat中的實現(xiàn)

2.1 配置文件的修改

MyCat啟動時,首先讀取配置文件,根據(jù)其中table標簽的設(shè)置信息,判斷各張表的類型。在配置文件schema.xml的table標簽中增加一個屬性“writeOneNode”作為啟用表廣播機制的標志,當邏輯表的類型是全局表即“type=globle”時,才啟用表廣播功能機制。

新增的屬性為布爾類型,默認值為“false”。“writeOneNode=true”時,過濾DML操作的SQL語句,通過表廣播作用于主節(jié)點;當“writeOneNode=false”時,DML操作的SQL語句按照原始邏輯作用于所有節(jié)點。

2.2 配置文件的初始化

通過Java應(yīng)用程序訪問XML時,要先把Java對象轉(zhuǎn)化成XML文件(稱作marshall),再將XML文件中的內(nèi)容轉(zhuǎn)化成相應(yīng)的Java對象(稱作unmarshal),該對象需要用JAXB(Java architecture for XML binding,XML綁定的Java體系結(jié)構(gòu))注解來標注[17]。因此需要修改注解類Schemas.java,在其內(nèi)部類中添加“writeOneNode”的屬性設(shè)置,使配置文件“schema.xml”中的內(nèi)容unmarshal成Table類型的對象時,包含“writeOneNode”字段的相應(yīng)信息。

初始化XML配置文件類XmlToYaml.java中,增加對參數(shù)“writeOneNode”的初始化功能,在啟動程序時加載配置文件,通過解析XML配置文件,對配置文件中設(shè)置的相關(guān)參數(shù)進行初始化,在Schemas的各個內(nèi)部靜態(tài)類中實例化本類對象,最后再通過HashMap存儲好所需要配置的Key-value鍵值對,對外提供本類實例化對象。

2.3 MyCat中表廣播機制的執(zhí)行流程

MyCat中的表廣播機制是針對于全局表的DML操作而提出的,且只有在writeOneNode=true時其功能才會奏效,因此需要增加新的SQL執(zhí)行邏輯。如圖4所示,MyCat對接收到的sql語句進行以下判斷:

圖4 MyCat中的表廣播機制執(zhí)行流程

(1)sql語句的類型是否為insert或update或delete;

(2)待插入的表是否為全局表;

(3)是否寫入單節(jié)點,即writeOneNode=true。

只有三個條件同時滿足,才能將原始的多節(jié)點插入功能修改為單節(jié)點插入,啟用表廣播功能。

3 實驗與分析

為了分析表廣播機制在MyCat中的實現(xiàn)方案的可行性,在真實環(huán)境下進行實驗分析。

3.1 實驗設(shè)置

實驗環(huán)境:三臺配置完全相同的服務(wù)器。配置如下:操作系統(tǒng)為RedHat7.2;1*6 Core的CPU;內(nèi)存16 G;硬盤16*1 T;千兆網(wǎng)卡。

步驟1:新建數(shù)據(jù)庫和數(shù)據(jù)表。

實驗中的全局表“teacher”具有4個分片,分別位于4個不同的數(shù)據(jù)庫中,數(shù)據(jù)庫名稱分別為MyCat1,MyCat2,MyCat3,MyCat4,所屬服務(wù)器ip為172.172.0.104,并在各個數(shù)據(jù)庫中分別新建表“teacher”(含有字段:tid,name,sex,class;tid為關(guān)鍵字);在另外一臺ip為172.172.0.106的服務(wù)器上也新建4個數(shù)據(jù)庫:broadcastMyCat1、broadcastMyCat2、broadcastMyCat3、broadcastMyCat4,每個數(shù)據(jù)庫中也分別包含同樣表結(jié)構(gòu)的“teacher”表,并配置broadcastMyCat1為broadcastMyCat2、broadcastMyCat3、broadcastMyCat4的主數(shù)據(jù)庫,broadcastMyCat2、broadcastMyCat3、broadcastMyCat4為broadcastMyCat1的從數(shù)據(jù)庫,啟用表廣播功能。

步驟2:安裝MyCat。

在ip為172.172.0.107的服務(wù)器上分別安裝官方MyCat(端口號為8068,命名為MyCat_8068)和實現(xiàn)表廣播機制的MyCat(端口號為8069,命名為broadcastMyCat_8069),進行正確的配置文件設(shè)置,兩者的區(qū)別如下:

MyCat_8068的schema.xml部分配置如下:

broadcastMyCat_8069中的schema.xml配置如下:

完成配置文件的設(shè)置后,分別啟動MyCat_8068和broadcastMyCat_8069。

3.2 實驗結(jié)果分析

實驗1:為驗證MyCat中的表廣播機制,實現(xiàn)了原始MyCat中全局表功能,通過程序分別向MyCat_8068和broadcastMyCat_8069中的teacher表中連續(xù)作插入操作。一段時間后,分別到本地的各個數(shù)據(jù)庫中查詢teacher表中的數(shù)據(jù),對各個表中的記錄總數(shù)和數(shù)據(jù)內(nèi)容進行對比,結(jié)果如表1所示。

表1 正常插入時的數(shù)據(jù)對比表

由表1可知,各個表中的記錄數(shù)量幾乎相同,同一個MyCat下各個節(jié)點中的數(shù)據(jù)均一致。結(jié)果表明,在各個數(shù)據(jù)節(jié)點運行正常的情況下,原始的MyCat和實現(xiàn)表廣播機制的MyCat均可以做到數(shù)據(jù)的高效插入,且保證了各個節(jié)點間的數(shù)據(jù)一致性。

實驗2:為驗證在DML操作過程中出現(xiàn)節(jié)點異常后實現(xiàn)表廣播機制的MyCat仍舊能保證各節(jié)點間的數(shù)據(jù)一致性,清空各個數(shù)據(jù)表中的數(shù)據(jù)后,通過程序分別向MyCat_8068和MyCat_8069中的teacher表中連續(xù)作插入操作,在插入過程中,關(guān)閉MyCat2和broadcastMyCat2兩臺數(shù)據(jù)庫,一段時間后恢復(fù)兩臺數(shù)據(jù)庫,多次嘗試此操作,并對比各個MySQL數(shù)據(jù)庫中的數(shù)據(jù)狀況。

表2記錄了各個節(jié)點異常消除后的數(shù)據(jù)情況,原始MyCat下的異常節(jié)點中的數(shù)據(jù)明顯少于其他節(jié)點中的數(shù)據(jù),而實現(xiàn)表廣播機制的MyCat下的四個數(shù)據(jù)節(jié)點中的數(shù)據(jù)始終一致。

表2 異常解除后的數(shù)據(jù)對比表

由實驗2結(jié)果可以看出,MyCat的弱XA機制,確實導(dǎo)致了節(jié)點間的數(shù)據(jù)不一致,而實現(xiàn)了表廣播機制的MyCat,在異常節(jié)點恢復(fù)正常后,成功同步數(shù)據(jù),保證與主節(jié)點的數(shù)據(jù)同步。

以上實驗表明,實現(xiàn)表廣播機制的MyCat的可靠性較高,在保證數(shù)據(jù)高效插入的同時,也保證了數(shù)據(jù)一致性。

4 結(jié)束語

提出了一種表廣播機制在MyCat中的實現(xiàn)方案,通過對MyCat提供的操作全局表的相關(guān)功能進行優(yōu)化,把對多個節(jié)點的操作修改為對單個節(jié)點的操作,有效解決了MyCat面臨的弱XA問題。實驗結(jié)果表明,該方案在實現(xiàn)全局表原有功能的同時,有效提高了全局數(shù)據(jù)表中各節(jié)點數(shù)據(jù)的一致性。

目前,對于分庫表的查詢操作,MyCat只會返回各分庫合并后的數(shù)據(jù),在排序、分頁等功能上做得還不夠完善,因此,未來計劃運用其他的方法解決這類問題。

[1] 莊天紅.常用數(shù)據(jù)庫系統(tǒng)性能解析[J].微型電腦應(yīng)用,1999,15(2):52-54.

[2] BOYD D, CRAWFORD K. Critical questions for big data[J].Information Communication & Society,2012,15(5):662-679.

[3] 項 凱.面向海量高并發(fā)數(shù)據(jù)庫中間件的研究與應(yīng)用[D].上海:上海交通大學(xué),2015.

[4] 邱 碩.Cobar的架構(gòu)與實踐[J].程序員,2012(9):90-93.

[5] 祝雄鋒.數(shù)據(jù)庫集群中間件MySQL Proxy研究與分析[D].武漢:武漢理工大學(xué),2011.

[6] 王 蔥.基于MyCAT的分布式數(shù)據(jù)存儲研究與應(yīng)用[D].上海:東華大學(xué),2016.

[7] HAYES B.Cloud computing[J].Communications of the ACM,2008,51(7):9-11.

[8] 安延文.數(shù)據(jù)庫審計系統(tǒng)中MySQL協(xié)議的研究與解析[D].北京:華北電力大學(xué),2016.

[9] 楊 晶,劉天時,馬 剛.分布式數(shù)據(jù)庫數(shù)據(jù)分片與分配[J].現(xiàn)代電子技術(shù),2006,29(18):119-121.

[10] 趙 艷,李 鈞.異構(gòu)數(shù)據(jù)源分布式事務(wù)處理研究[J].計算機工程,2009,35(4):69-71.

[11] 胡百敬,陳俊宇,楊先民,等.SQL Server 2005 T-SQL數(shù)據(jù)庫設(shè)計[M].北京:電子工業(yè)出版社,2008.

[12] 黃雅萍,劉曉強,吳成義.基于MySQL和PHP的分布式事務(wù)處理[J].東華大學(xué)學(xué)報:自然科學(xué)版,2011,37(1):81-85.

[13] 張旭剛,李東輝,俞 俊,等.基于zookeeper和強一致性復(fù)制實現(xiàn)MySQL分布式數(shù)據(jù)庫集群[J].微型電腦應(yīng)用,2016,32(1):77-80.

[14] 徐 恪,劉亞霄,劉衛(wèi)東.數(shù)據(jù)庫應(yīng)用系統(tǒng)中的安全訪問代理的設(shè)計與實現(xiàn)[J].計算機工程與應(yīng)用,2000,36(1):105-107.

[15] 李曙強,蔣樹春,呂 兵.一種基于mysql數(shù)據(jù)庫的sql信息采集審計系統(tǒng):CN,CN103488797A[P].2013-10-14.

[16] 黃春華.常用數(shù)據(jù)庫的比較[J].科技信息,2011(14):200.

[17] 李占波,李 娜.XML數(shù)據(jù)在關(guān)系數(shù)據(jù)庫中的存儲[J].微計算機信息,2007,23(27):192-194.

猜你喜歡
數(shù)據(jù)庫機制
構(gòu)建“不敢腐、不能腐、不想腐”機制的思考
自制力是一種很好的篩選機制
文苑(2018年21期)2018-11-09 01:23:06
數(shù)據(jù)庫
財經(jīng)(2017年15期)2017-07-03 22:40:49
數(shù)據(jù)庫
財經(jīng)(2017年2期)2017-03-10 14:35:35
定向培養(yǎng) 還需完善安置機制
數(shù)據(jù)庫
財經(jīng)(2016年15期)2016-06-03 07:38:02
數(shù)據(jù)庫
財經(jīng)(2016年3期)2016-03-07 07:44:46
數(shù)據(jù)庫
財經(jīng)(2016年6期)2016-02-24 07:41:51
破除舊機制要分步推進
注重機制的相互配合
主站蜘蛛池模板: 亚洲中字无码AV电影在线观看| 全部免费毛片免费播放| 日本午夜在线视频| 成人另类稀缺在线观看| 青青国产视频| 国产高清在线观看91精品| 亚卅精品无码久久毛片乌克兰 | 国产成人永久免费视频| 四虎成人精品在永久免费| 精品自窥自偷在线看| 亚洲婷婷在线视频| 狠狠综合久久| 久久99精品国产麻豆宅宅| 99九九成人免费视频精品| 欧美成人免费午夜全| 国产精品无码AV片在线观看播放| 欧美精品亚洲精品日韩专区| 99久久精品无码专区免费| 午夜福利无码一区二区| 久久久久亚洲精品成人网| 亚洲人成色77777在线观看| 日韩免费成人| 小说区 亚洲 自拍 另类| 台湾AV国片精品女同性| 日本三区视频| 久久人搡人人玩人妻精品一| 亚洲综合国产一区二区三区| 欧美在线观看不卡| 亚洲爱婷婷色69堂| 国产99视频在线| V一区无码内射国产| 欧美激情二区三区| 亚洲天堂在线免费| 午夜精品影院| 久久精品无码专区免费| 99久久精品视香蕉蕉| 亚洲大学生视频在线播放| 啊嗯不日本网站| 三上悠亚在线精品二区| 五月激情综合网| 亚洲无卡视频| 国产不卡网| 亚洲天堂.com| 爆操波多野结衣| 麻豆精品在线视频| 欧美不卡二区| 日韩成人午夜| 不卡的在线视频免费观看| 国产精女同一区二区三区久| 欧美19综合中文字幕| 伊人激情综合| 亚洲国产天堂久久九九九| 国产日韩精品欧美一区喷| 欧美国产在线看| 国产又粗又猛又爽视频| 国产成人资源| 欧美一区二区精品久久久| 国产欧美日本在线观看| 71pao成人国产永久免费视频 | 免费观看国产小粉嫩喷水| 欧美激情视频一区二区三区免费| 伦精品一区二区三区视频| 久久久久中文字幕精品视频| 日本免费福利视频| 亚洲天堂视频在线观看| 亚洲美女一区| 免费观看男人免费桶女人视频| 欧美 国产 人人视频| 蝌蚪国产精品视频第一页| 日韩精品亚洲一区中文字幕| 久久一色本道亚洲| 91久久偷偷做嫩草影院| 色综合久久无码网| 高清不卡毛片| 午夜视频免费试看| 日本精品视频一区二区| 午夜精品一区二区蜜桃| 九九九九热精品视频| 一本大道香蕉高清久久| 国产美女免费| 亚洲美女一区二区三区| 又黄又爽视频好爽视频|
<tr id="ee80e"></tr>
    <small id="ee80e"></small>
    • <nav id="ee80e"></nav>
    • <tr id="ee80e"></tr>