石永超,任利峰
分布式數(shù)據(jù)庫系統(tǒng)有兩種,一種是一個邏輯上完整而物理上分散的多個數(shù)據(jù)庫的集群,通過網(wǎng)絡(luò)將多臺數(shù)據(jù)庫進行連接,依靠專業(yè)的數(shù)據(jù)庫管理軟件進行管理的分布式系統(tǒng)。這種系統(tǒng)只適用于一個用途比較單一的,不太大的單位或部門;另一種是在物理上和邏輯上都是分布的,這種系統(tǒng)可容納多個不同用途、差異較大的數(shù)據(jù)庫,適宜較大的數(shù)據(jù)庫系統(tǒng)的集成。物理上分布指的是各個數(shù)據(jù)庫可以單獨存在于不同的地理位置,通過網(wǎng)絡(luò)將各個數(shù)據(jù)庫連接起來; 邏輯上完整指的是各個數(shù)據(jù)庫通過網(wǎng)絡(luò)連接起來后,可以調(diào)整配置,使用統(tǒng)一的數(shù)據(jù)庫管理軟件進行整體的操縱,同時各個單獨的數(shù)據(jù)庫也具有自制能力。
分布式數(shù)據(jù)庫查詢優(yōu)化通??梢詮膬蓚€方面考慮: 一個是減少響應(yīng)時間,另一個是減少網(wǎng)絡(luò)數(shù)據(jù)的傳輸量。從傳統(tǒng)的分布式數(shù)據(jù)庫系統(tǒng)來看,計算機內(nèi)部處理數(shù)據(jù)的速度和網(wǎng)絡(luò)傳輸?shù)乃俣扔泻秃艽蟮膽沂?。但是大量的?shù)據(jù)傳輸會使網(wǎng)絡(luò)承受的壓力太大,這個就是目前分布式數(shù)據(jù)庫查詢優(yōu)化所要面臨的主要問題,所以分布式數(shù)據(jù)庫查詢優(yōu)化目標(biāo)的一個方面就是減少網(wǎng)絡(luò)數(shù)據(jù)的傳遞量。 另一方面,數(shù)據(jù)庫之間的數(shù)據(jù)傳輸?shù)乃俣仁遣灰粯拥?,單獨的一個數(shù)據(jù)庫內(nèi)部查詢數(shù)據(jù)的速度也是不一樣。同時,單個數(shù)據(jù)庫查詢的時間也不是確定的,這就會影響整體的查詢效率。在這種情況下,不應(yīng)該將數(shù)據(jù)的傳輸數(shù)量作為查詢數(shù)據(jù)質(zhì)量的標(biāo)準(zhǔn),應(yīng)該更多的去研究每一條請求的響應(yīng)時間。 在一些特殊情況下,我們也得同時考慮響應(yīng)時間和傳輸速度。 這就需要設(shè)計的算法去權(quán)衡這兩點。 雖然分布式數(shù)據(jù)庫技術(shù)如此復(fù)雜,算法設(shè)計需要考慮的因素很多,但是并沒有能停止人們對他探索的腳步, 也正是因為他的復(fù)雜性和多樣性才使這種技術(shù)不斷地被修改創(chuàng)新,這種靈活性也決定它會被廣泛應(yīng)用?;诜植际郊軜?gòu)所具有的優(yōu)點和可靠性、靈活性、可用性,吸引著越來也多的人對它進行不斷的探索,使之成為如此熱門的技術(shù)。 許多研究所、大學(xué)的專家學(xué)者經(jīng)過不懈努力,使這種技術(shù)越來越成熟。
研究數(shù)據(jù)庫系統(tǒng)的一個方面就是要向用戶盡可能多的封裝數(shù)據(jù)庫的操作,使數(shù)據(jù)庫系統(tǒng)更具有通用性[1]。另一方面,分布式數(shù)據(jù)庫系統(tǒng)還得向用戶隱藏系統(tǒng)內(nèi)部的一些細節(jié),使得系統(tǒng)用起來更加安全,方便。關(guān)系型數(shù)據(jù)庫可以為用戶集中的提供一個數(shù)據(jù)接口,所有的數(shù)據(jù)都通過這個接口傳送。使用SQL語句進行數(shù)據(jù)查詢時,只需簡單的描述所要查詢的數(shù)據(jù),無需知道系統(tǒng)內(nèi)部如何獲得數(shù)據(jù)的。當(dāng)用戶發(fā)來請求時,分布式系統(tǒng)會先檢查訪問的數(shù)據(jù)庫是否存在于本地,如果存在則運行命令;如果沒有存在,將請求廣播給其他數(shù)據(jù)庫,根據(jù)查詢信息選擇一個最優(yōu)的查詢節(jié)點(單獨的數(shù)據(jù)庫)進行查詢,即選擇一個有查詢信息所需的數(shù)據(jù)的數(shù)據(jù)庫進行查詢,并且保證查詢所需資源最少。然后將查詢命令按地址發(fā)送到該數(shù)據(jù)庫上,返回該數(shù)據(jù)庫的IP地址,客戶端接受到返回信息,馬上與該數(shù)據(jù)庫建立連接。當(dāng)數(shù)據(jù)庫內(nèi)部查詢結(jié)束后,將查詢的信息發(fā)回客戶端。如圖1所示。但是通過這種方式進行信息的更改與查詢時,需要使用SQL語句,所以更好的查詢算法也正在發(fā)展和討論。我們所說的查詢優(yōu)化,就是要保證在查詢結(jié)果準(zhǔn)確的前提下,最大程度的減少網(wǎng)絡(luò)數(shù)據(jù)傳遞量,最快的查詢出結(jié)果。
圖1 分布式數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)查詢
分布式查詢就是將一個分布式數(shù)據(jù)庫上的整體查詢轉(zhuǎn)換成可以被單個數(shù)據(jù)庫節(jié)點識別的查詢。轉(zhuǎn)換之后要使得整體的數(shù)據(jù)庫系統(tǒng)和單獨的數(shù)據(jù)庫都可以識別,并通過代數(shù)運算優(yōu)化這個過程[2]。全局查詢優(yōu)化是通過優(yōu)化算法來操作數(shù)據(jù)庫間的數(shù)據(jù)移動順序從而形成的一個優(yōu)化方案, 主要是決策選擇操作的順序。選擇連接順序是分布式數(shù)據(jù)庫優(yōu)化的一個重要的問題,但是由于數(shù)據(jù)冗余的特點,傳統(tǒng)的查詢會關(guān)聯(lián)到多個節(jié)點,十分浪費資源。在傳統(tǒng)數(shù)據(jù)庫的發(fā)展過程中,雖然已經(jīng)不斷優(yōu)化這個問題,但是還沒得到很好的解決。 對于多表查詢這個問題,必須很好地考慮如何搜索,才能知道近似最優(yōu)解。
粒子群優(yōu)化算法是一種全局隨機優(yōu)化算法。 與一般算法不同的是,粒子群優(yōu)化算法是將一個個數(shù)據(jù)庫抽象為粒子,從而進行整體的排列,而不是傳統(tǒng)的單點的操作。 “學(xué)習(xí)”和“記憶”是粒子自身所具有的能力,基于這個特性,可以通過粒子間的學(xué)習(xí)幫助,使整個粒子群不斷搜索最優(yōu)的區(qū)域,從而找到最優(yōu)解。 通過這種手段,可以使數(shù)據(jù)庫找到最優(yōu)算法或者近似最優(yōu)的算法,從以往的研究來看,粒子群優(yōu)化算法能很好地解決一些問題。
一個良好的分布式數(shù)據(jù)庫系統(tǒng)的設(shè)計,一般包括一些關(guān)聯(lián): 整個分布式系統(tǒng)可以被分成多少個分片; 這些分片里有多少分片的副本; 如何確定這些分片在哪個站點。 這些問題使數(shù)據(jù)庫設(shè)計變得復(fù)雜,甚至還要分析每一個單獨的站點,這也是一個問題。 為了簡化以上的問題,我們找到一個接近最優(yōu)解的算法,分片復(fù)制算法。 此算法的核心思想是: 先將參加查詢的關(guān)系進行分片化,然后在分布式系統(tǒng)中選擇一組站點,將分片放到這個站點上,每個單獨的站點都可以與其他站點進行連接,最后再將查詢的結(jié)果做并集,即得到最優(yōu)解。
在處理多表關(guān)系連接的問題時, Partition算法可以抽取兩個或者多個關(guān)系共有的屬性,然后進行片段的劃分,這樣處理后可以進行并集運算,從而提高查詢效率?;诜植际綌?shù)據(jù)庫系統(tǒng)獨有的特征,這種查詢方式可以在多個數(shù)據(jù)庫同時操作,從而提高數(shù)據(jù)查詢的速度[3]。 但是對于大量數(shù)據(jù)的處理以及對要求復(fù)雜的查詢?nèi)蝿?wù)來說,這種查詢方式還不是最好的。因此,在下面我們將結(jié)合查詢圖劃分改進原有的Partition算法。在傳統(tǒng)的Partition算法中,人們通常只用到其中一種的劃分方案,僅對一種方案進行研究,而忽略其他的劃分方案。就此問題,我們通過查詢圖劃分的思想,將一個完整的查詢圖劃分成多個子圖,這樣再通過 Partition算法將這些子圖連接起來,就可以大大解決數(shù)據(jù)冗余的問題。為了方便,我們?yōu)楦倪M的算法進行了一個構(gòu)思: 每一個查詢子圖對應(yīng)分布式系統(tǒng)的一個站點,那么改進的算法就有一下幾步:
劃分查詢圖:借助查詢圖劃分的思想,對整體進行劃分,得到多個子圖。
Partition算法操作:每一個子圖都進行Partition算法運算,再將每個子圖上所有節(jié)點的結(jié)果進行并集運算,就可得到結(jié)果。但經(jīng)過Partition算法運算后,每個子圖的節(jié)點數(shù)不會有任何變化。
循環(huán):循環(huán)執(zhí)行(1)(2)步的操作,直到將所有的子圖合并為一個圖,在將此圖上所有結(jié)果取并集就可得到查詢結(jié)果。
通過以上對分布式數(shù)據(jù)庫系統(tǒng)的優(yōu)化,我們解決了一部分分布式系統(tǒng)查詢的問題??梢愿鶕?jù)不同的需求,選擇不同的方案進行處理,從而提高數(shù)據(jù)的檢索速度,滿足當(dāng)今對數(shù)據(jù)查詢效率的需求,提升用戶體驗。