劉曉丹(陜西廣播電視大學(xué),西安,710068)
分布式數(shù)據(jù)庫存儲(chǔ)子系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
劉曉丹
(陜西廣播電視大學(xué),西安,710068)
本文通過對(duì)分布式關(guān)系型數(shù)據(jù)庫的分析研究,開發(fā)了利用價(jià)值較高的分布式關(guān)系數(shù)據(jù)庫系統(tǒng)CRDB,該系統(tǒng)最大限度地利用網(wǎng)絡(luò)和磁盤的I/O能力,提高用戶體驗(yàn),并利用Linux 提供的API大大節(jié)約了系統(tǒng)開銷。
分布式;數(shù)據(jù)庫系統(tǒng);結(jié)構(gòu)化存儲(chǔ)
互聯(lián)網(wǎng)自誕生以來以其獨(dú)特的魅力受到了世人的青睞,超強(qiáng)的影響力使其在全球范圍內(nèi)迅速普及。在2014年四月份瑞典Royal Pingdom公司研究報(bào)告顯示,全球網(wǎng)名總量已達(dá)到了22.7億,相較于五年前的11.5億,這一數(shù)據(jù)可謂意味深遠(yuǎn)。其中,報(bào)告還稱在亞洲人口數(shù)量多的發(fā)展中國家地區(qū)網(wǎng)民人數(shù)還有很大的上升空間,這就意味著網(wǎng)絡(luò)的競爭市場只會(huì)愈演愈烈。與此同時(shí),大眾對(duì)于數(shù)據(jù)存儲(chǔ)的需求也日益增長。美國IDC公司2011年6月的數(shù)據(jù)統(tǒng)計(jì)顯示,僅在當(dāng)年,全球的數(shù)據(jù)產(chǎn)生量已達(dá)到了1.8ZB,未來十年可能會(huì)增長50倍??梢哉f這一龐大的數(shù)字,也就意味著信息時(shí)代也是“大數(shù)據(jù)”時(shí)代。
2.1 分布式存儲(chǔ)
相對(duì)于集中式存儲(chǔ)而言,分布式存儲(chǔ)是是將數(shù)據(jù)存儲(chǔ)在一個(gè)由網(wǎng)絡(luò)連通的多個(gè)結(jié)點(diǎn)構(gòu)成的集群之上,向上層提供存儲(chǔ)接口的一種存儲(chǔ)系統(tǒng)。分布式存儲(chǔ)技術(shù)具備高性能、高擴(kuò)展性等優(yōu)勢,緩解了各個(gè)互聯(lián)網(wǎng)公司面對(duì)海量數(shù)據(jù)存儲(chǔ)的壓力,為其提供了大規(guī)模數(shù)據(jù)的存儲(chǔ)和訪問,而且由于其本非常廉價(jià),受到了各公司企業(yè)的極大青睞。
2.2 結(jié)構(gòu)化與非結(jié)構(gòu)化
存儲(chǔ)系統(tǒng)按其存儲(chǔ)數(shù)據(jù)方式和提供的存取接口,一般地可分為非結(jié)構(gòu)化存儲(chǔ)和結(jié)構(gòu)化存儲(chǔ),鍵值存儲(chǔ)系統(tǒng)屬于典型的非結(jié)構(gòu)化存儲(chǔ)系統(tǒng),它只負(fù)責(zé)基于 key-value 的存取,無法對(duì)value進(jìn)行解析。而結(jié)構(gòu)化存儲(chǔ)系統(tǒng)則不同,典型的就是關(guān)系型數(shù)據(jù)庫,它能夠利用系統(tǒng)所提供的接口在數(shù)據(jù)上進(jìn)行計(jì)算并得到計(jì)算的結(jié)果。當(dāng)用戶使用它所提供的存取接口也就是SQL語言時(shí),可實(shí)現(xiàn)對(duì)存儲(chǔ)的表進(jìn)行各種操作,然后再將操作后的結(jié)果返回給用戶。
2.3 關(guān)系數(shù)據(jù)模型
關(guān)系數(shù)據(jù)模型、層次數(shù)據(jù)模型以及網(wǎng)狀數(shù)據(jù)模型稱為三大數(shù)據(jù)模型,而關(guān)系數(shù)據(jù)模型是三者中應(yīng)用最為廣泛、研究也最為成熟的數(shù)據(jù)模型,數(shù)據(jù)庫的類型也是根據(jù)數(shù)據(jù)模型來劃分的,分布式關(guān)系數(shù)據(jù)庫提供的是基于關(guān)系數(shù)據(jù)模型的數(shù)據(jù)存儲(chǔ)。此外,經(jīng)過多年的發(fā)展,SQL已成為表述關(guān)系操作的標(biāo)準(zhǔn)語言。
3.1 CRDB系統(tǒng)
該系統(tǒng)是用于存儲(chǔ)海量結(jié)構(gòu)化數(shù)據(jù)的分布式關(guān)系型數(shù)據(jù)庫,與傳統(tǒng)數(shù)據(jù)庫相比較,CRDB系統(tǒng)能夠在其基礎(chǔ)上提供額外的高可靠性、高擴(kuò)展性、高并發(fā)和對(duì)分布式事務(wù)的處理。CRDB系統(tǒng)主要由網(wǎng)關(guān)——Gateway、認(rèn)證服務(wù)器——CA、本地?cái)?shù)據(jù)庫——LDB、索引服務(wù)器——IS、元數(shù)據(jù)服務(wù)器——MDSS、分布式事務(wù)執(zhí)行服務(wù)器——DTE等幾部分構(gòu)成,各部分之間關(guān)系密切、不可分割。
本文針對(duì)LDB存儲(chǔ)子系統(tǒng)重點(diǎn)討論,雖然該系統(tǒng)在整個(gè)系統(tǒng)中擔(dān)任最底層的存儲(chǔ)結(jié)點(diǎn)的角色,但是實(shí)際上CRDB整個(gè)系統(tǒng)的性能在很大程度上取決于LDB存儲(chǔ)子系統(tǒng)的性能。關(guān)鍵在于LDB負(fù)責(zé)完成用戶對(duì)數(shù)據(jù)的查詢。而且從性能來看,涉及到數(shù)據(jù)的操作最終都會(huì)由某個(gè)LDB來完成。
3.2 需求分析
在CRDB系統(tǒng)中,LDB能夠在其他子系統(tǒng)處于運(yùn)行狀態(tài)時(shí),任意時(shí)刻運(yùn)行并添加到系統(tǒng)中。當(dāng)剛啟動(dòng)系統(tǒng)時(shí),數(shù)據(jù)存儲(chǔ)量較小,若要滿足數(shù)據(jù)存儲(chǔ)的需求,只需底層一個(gè)LDB即可;當(dāng)運(yùn)行時(shí)間加長時(shí),數(shù)據(jù)量會(huì)增大,為了避免系統(tǒng)一段時(shí)間內(nèi)不可用,LDB必須能夠動(dòng)態(tài)第添加到系統(tǒng)中增加系統(tǒng)的存儲(chǔ)能力。而且,當(dāng)系統(tǒng)存儲(chǔ)需求擴(kuò)大時(shí),管理員只需要針對(duì)一臺(tái)新添加的服務(wù)器配置好XML文件,LDB便可動(dòng)態(tài)地添加到正在運(yùn)行的系統(tǒng)中,同時(shí)也不影響系統(tǒng)的正常運(yùn)行。
4.1 系統(tǒng)模塊劃分
圖1所示即LDB存儲(chǔ)子系統(tǒng)模塊圖。
圖1 系統(tǒng)模塊圖
觀察圖2可知LDB存儲(chǔ)子系統(tǒng)主要包括四個(gè)模塊。一是網(wǎng)絡(luò)通信模塊,該模塊負(fù)責(zé)LDB子系統(tǒng)與其他子系統(tǒng)和其他LDB之間的通信,通過該模塊DTE能夠?yàn)長DB發(fā)起任務(wù)執(zhí)行計(jì)劃,接收任務(wù)并完成情況的回復(fù)。而Gateway若與LDB相連則需要通過此模塊,如此LDB才可以將結(jié)果集發(fā)送給Gateway。二是任務(wù)管理模塊,該模塊負(fù)責(zé)對(duì)LDB接收到的任務(wù)的執(zhí)行情況進(jìn)行管理,一個(gè)LDB同時(shí)可能對(duì)多個(gè)來自不相同或是相同的DTE任務(wù)進(jìn)行執(zhí)行。此外,該模塊有一個(gè)計(jì)時(shí)器子模塊,主要為執(zhí)行的任務(wù)計(jì)時(shí),一旦超出預(yù)期值,該模塊會(huì)將此次任務(wù)取消。三是線程調(diào)度模塊,該模塊主要實(shí)現(xiàn)的是一種異步I/O機(jī)制,筆者及團(tuán)隊(duì)經(jīng)過分析選擇了非阻塞復(fù)用I/O編程框架,并做出了自行實(shí)現(xiàn)異步I/O的決定。四是數(shù)據(jù)庫連接池模塊,當(dāng)任務(wù)在執(zhí)行時(shí)需要對(duì)數(shù)據(jù)庫進(jìn)行訪問時(shí),可由數(shù)據(jù)庫連接池分配一個(gè)已建立的連接,當(dāng)任務(wù)結(jié)束后,連接由數(shù)據(jù)庫連接池維護(hù),如此可大大節(jié)省由連接和關(guān)閉所帶來的開銷。
4.2 系統(tǒng)框架設(shè)計(jì)
圖2所示即LDB存儲(chǔ)子系統(tǒng)架構(gòu)圖。
觀察圖2我們可知,LDB對(duì)于整個(gè)分布式數(shù)據(jù)庫系統(tǒng)來說至關(guān)重要,它負(fù)責(zé)整個(gè)系統(tǒng)的底層存儲(chǔ),而且網(wǎng)絡(luò)模塊監(jiān)聽了來自Gateway、DTE以及其他LDB的連接,一旦它們的被監(jiān)聽的連接上有了可讀或者可寫的事件發(fā)生,任務(wù)管理模塊的TaskManager會(huì)對(duì)這個(gè)事件進(jìn)行處理,并且會(huì)根據(jù)其是否是新任務(wù)對(duì)其進(jìn)行不同的處理方式。
當(dāng)事件的處理不涉及數(shù)據(jù)庫的訪問,主線程可對(duì)這個(gè)事件進(jìn)行直接處理,同時(shí)對(duì)下一個(gè)事件做出監(jiān)聽。反之,為了避免阻塞主線程,事件的處理將會(huì)交由線程池來處理。
4.3 系統(tǒng)的實(shí)現(xiàn)
在LDB上,包括網(wǎng)絡(luò)的讀寫,任務(wù)的調(diào)度以及計(jì)時(shí)器的響應(yīng)都是基于epoll實(shí)現(xiàn)的,它對(duì)網(wǎng)絡(luò)讀寫事件和管道讀寫事件都可進(jìn)行監(jiān)聽。在LDB實(shí)現(xiàn)上,將epoll對(duì)的操作接口三種操作都封裝到EpollEvent類里面,這個(gè)類對(duì)此驅(qū)動(dòng)模型需要的數(shù)據(jù)的操作進(jìn)行了封裝。
綜上所述,分布式關(guān)系型數(shù)據(jù)庫的研發(fā)是一項(xiàng)復(fù)雜的工程,本文僅對(duì)此做出了初步的設(shè)計(jì),最終將理論應(yīng)用于實(shí)踐還需要更深入的探索和研究。
牛園園.分布式數(shù)據(jù)庫有關(guān)連接查詢優(yōu)化算法的研究[D].長沙理工大學(xué)2010
Distributed database storage subsystem design and implementation
Liu Xiaodan
(Shaanxi Radio and TV University,Xi'an,710068)
This paper analyzes the research on distributed relational database,developed the use of highervalue distributed relational database system CRDB,the system is to maximize the use of the network and disk I/O capacity,improve user experience,and using Linux API provides significant savings in overhead.
distributed;database system;structured storage
圖2 LDB架構(gòu)圖