本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,特別是涉及一種數(shù)據(jù)庫更改寫入分區(qū)的方法及裝置。
背景技術(shù):
在MongoDB數(shù)據(jù)庫的分片集群中,片鍵決定了每條數(shù)據(jù)應(yīng)該被寫入到集群中的哪個(gè)分片上,各個(gè)分片之間通過數(shù)據(jù)塊的移動(dòng)達(dá)到分片負(fù)載的均衡,因此在設(shè)置分片時(shí),需要從數(shù)據(jù)集合中選取一個(gè)鍵,用該鍵作為數(shù)據(jù)拆分的依據(jù),這個(gè)鍵就是片鍵。片鍵的選擇非常重要,MongoDB會(huì)根據(jù)選定的片鍵將數(shù)據(jù)劃分到有著相同片鍵的數(shù)據(jù)塊中,而后這些數(shù)據(jù)塊將根據(jù)片鍵的大致順序分散到分片中。然而,當(dāng)數(shù)據(jù)寫入的負(fù)載較大且選擇了單調(diào)遞增片鍵如時(shí)間單調(diào)遞增片鍵時(shí),新的數(shù)據(jù)只會(huì)寫入到時(shí)間最新的一個(gè)數(shù)據(jù)塊中得到信息量巨大的數(shù)據(jù)塊,導(dǎo)致數(shù)據(jù)的不平均分布。由于數(shù)據(jù)寫入的負(fù)載較高,MongoDB在各個(gè)分片中移動(dòng)數(shù)據(jù)塊的速度遠(yuǎn)遠(yuǎn)無法跟上數(shù)據(jù)的寫入速度,而且一旦數(shù)據(jù)塊的信息量大小超過一定數(shù)值,那么就無法在分片之間對其進(jìn)行移動(dòng),從而使得大量數(shù)據(jù)堆積在一個(gè)分片上,導(dǎo)致硬盤的容量迅速達(dá)到極限。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明提出了一種數(shù)據(jù)庫更改寫入分區(qū)的方法及裝置,主要目的在于解決在數(shù)據(jù)庫分片集群中選取單調(diào)遞增片鍵進(jìn)行分區(qū)時(shí)導(dǎo)致數(shù)據(jù)分片不均衡的問題。
依據(jù)本發(fā)明的第一個(gè)方面,本發(fā)明提供了一種數(shù)據(jù)庫更改寫入分區(qū)的方法,包括:
獲取數(shù)據(jù)庫當(dāng)前分片中最新數(shù)據(jù)塊的時(shí)間片鍵范圍,最新數(shù)據(jù)塊為當(dāng)前寫入數(shù)據(jù)的數(shù)據(jù)塊;
在最新數(shù)據(jù)塊的時(shí)間片鍵范圍內(nèi)確定預(yù)分裂時(shí)間點(diǎn);
將最新數(shù)據(jù)塊在預(yù)分裂時(shí)間點(diǎn)進(jìn)行分裂,生成兩個(gè)子數(shù)據(jù)塊;
將以預(yù)分裂時(shí)間點(diǎn)為時(shí)間片鍵范圍起點(diǎn)的子數(shù)據(jù)塊移動(dòng)到另一分片中。
依據(jù)本發(fā)明的第二個(gè)方面,本發(fā)明提供了一種數(shù)據(jù)庫更改寫入分區(qū)的裝置,包括:
獲取單元,用于獲取數(shù)據(jù)庫當(dāng)前分片中最新數(shù)據(jù)塊的時(shí)間片鍵范圍,最新數(shù)據(jù)塊為當(dāng)前寫入數(shù)據(jù)的數(shù)據(jù)塊;
確定單元,用于在獲取單元獲取的最新數(shù)據(jù)塊的時(shí)間片鍵范圍內(nèi)確定預(yù)分裂時(shí)間點(diǎn);
分裂單元,用于將最新數(shù)據(jù)塊在選擇單元選擇的預(yù)分裂時(shí)間點(diǎn)進(jìn)行分裂,生成兩個(gè)子數(shù)據(jù)塊;
移動(dòng)單元,用于將分裂單元生成的以預(yù)分裂時(shí)間點(diǎn)為時(shí)間片鍵范圍起點(diǎn)的子數(shù)據(jù)塊移動(dòng)到另一分片中。
借由上述技術(shù)方案,本發(fā)明實(shí)施例提供的數(shù)據(jù)庫更改寫入分區(qū)的方法及裝置,能夠獲取數(shù)據(jù)庫當(dāng)前分片中最新數(shù)據(jù)塊的時(shí)間片鍵范圍,并在該時(shí)間片鍵范圍內(nèi)確定預(yù)分裂時(shí)間點(diǎn),將所述最新數(shù)據(jù)塊在預(yù)分裂時(shí)間點(diǎn)進(jìn)行分裂,生成兩個(gè)子數(shù)據(jù)塊,其中以預(yù)分裂時(shí)間點(diǎn)為時(shí)間片鍵范圍起點(diǎn)的子數(shù)據(jù)塊由于還未插入數(shù)據(jù),因此將其移動(dòng)到另一分片中,當(dāng)實(shí)際時(shí)間到達(dá)預(yù)分裂時(shí)間點(diǎn)后,新的數(shù)據(jù)會(huì)自動(dòng)寫入到被移動(dòng)的子數(shù)據(jù)塊所在的新的分片中,從而避免了由于分裂前的最新數(shù)據(jù)塊寫入數(shù)據(jù)的速度高于數(shù)據(jù)塊自動(dòng)分裂和移動(dòng)的速度導(dǎo)致當(dāng)前分片的容量過高,確保了數(shù)據(jù)在數(shù)據(jù)庫分片集群中的均衡分布。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式。
附圖說明
通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:
圖1示出了本發(fā)明實(shí)施例提供的一種數(shù)據(jù)庫更改寫入分區(qū)的方法的流程圖;
圖2示出了本發(fā)明實(shí)施例提供的一種數(shù)據(jù)庫更改寫入分區(qū)的裝置的結(jié)構(gòu)示意圖;
圖3示出了本發(fā)明實(shí)施例提供的另一種數(shù)據(jù)庫更改寫入分區(qū)的裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將參照附圖更加詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
在使用數(shù)據(jù)庫的業(yè)務(wù)中,隨著業(yè)務(wù)的發(fā)展,產(chǎn)生的數(shù)據(jù)量也越來越大,因此基于數(shù)據(jù)分片的數(shù)據(jù)庫構(gòu)架應(yīng)運(yùn)而生。數(shù)據(jù)分片就是將整體數(shù)據(jù)分?jǐn)傇诙鄠€(gè)存儲(chǔ)設(shè)備上,這樣每個(gè)存儲(chǔ)設(shè)備的數(shù)據(jù)量相對變小,從而滿足數(shù)據(jù)庫性能需求。在設(shè)置分片時(shí),需要從數(shù)據(jù)集合中選取一個(gè)鍵,用該鍵作為數(shù)據(jù)拆分的依據(jù),這個(gè)鍵被稱為片鍵。最初在數(shù)據(jù)庫中插入數(shù)據(jù)時(shí),數(shù)據(jù)會(huì)被插入到一個(gè)分片中的數(shù)據(jù)塊中,隨著數(shù)據(jù)塊的數(shù)據(jù)量逐漸增大,該分片的負(fù)載逐漸增高,在這種情況下,數(shù)據(jù)庫通常會(huì)自動(dòng)將該數(shù)據(jù)塊已寫入數(shù)據(jù)的部分分裂出去并移動(dòng)到其他分片中,從而保證各個(gè)分片的數(shù)據(jù)分布均衡。
在本發(fā)明實(shí)施例中,由于采用時(shí)間單調(diào)遞增片鍵作為數(shù)據(jù)拆分的依據(jù),這樣會(huì)導(dǎo)致數(shù)據(jù)一直被寫入到最新的分片中,同時(shí)如果數(shù)據(jù)的寫入負(fù)載過高,在各個(gè)分片間移動(dòng)數(shù)據(jù)塊的速度遠(yuǎn)遠(yuǎn)無法跟上數(shù)據(jù)的寫入速度時(shí),會(huì)導(dǎo)致當(dāng)前分片的數(shù)據(jù)量增大,而且一旦數(shù)據(jù)塊的信息量大小超過一定數(shù)值,那么就無法在分片之間對其進(jìn)行移動(dòng),從而使得大量數(shù)據(jù)堆積在一個(gè)分片上,導(dǎo)致硬盤的容量迅速達(dá)到極限。
為了解決在數(shù)據(jù)庫分片集群中選取單調(diào)遞增片鍵進(jìn)行分區(qū)時(shí)導(dǎo)致數(shù)據(jù)分片不均衡的問題,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)庫更改寫入分區(qū)的方法, 如圖1所示,該方法包括:
101、獲取數(shù)據(jù)庫當(dāng)前分片中最新數(shù)據(jù)塊的時(shí)間片鍵范圍。
由于數(shù)據(jù)是被寫入數(shù)據(jù)塊中的,每個(gè)數(shù)據(jù)塊所包含的數(shù)據(jù)范圍是按照片鍵的取值來劃分的,若對數(shù)據(jù)庫進(jìn)行分區(qū),就需要對數(shù)據(jù)塊進(jìn)行操作。因此在本發(fā)明實(shí)施例中,需要執(zhí)行步驟101獲取數(shù)據(jù)庫當(dāng)前分片中最新數(shù)據(jù)塊的時(shí)間片鍵范圍,當(dāng)前分片為數(shù)據(jù)庫分片集群中當(dāng)前正在寫入數(shù)據(jù)的分片,其中,當(dāng)前分片中最新數(shù)據(jù)塊的時(shí)間片鍵范圍為該分片中當(dāng)前正在寫入數(shù)據(jù)的數(shù)據(jù)塊的時(shí)間片鍵范圍。
102、在最新數(shù)據(jù)塊的時(shí)間片鍵范圍內(nèi)確定預(yù)分裂時(shí)間點(diǎn)。
當(dāng)獲取到最新數(shù)據(jù)塊的時(shí)間片鍵范圍后,為了防止最新數(shù)據(jù)塊自動(dòng)分裂和移動(dòng)的速度慢于數(shù)據(jù)寫入速度導(dǎo)致的當(dāng)前分片負(fù)載過高情況的發(fā)生,因此本發(fā)明實(shí)施例需要提前對最新數(shù)據(jù)塊中未寫入數(shù)據(jù)的部分進(jìn)行分裂,得到未寫入數(shù)據(jù)的空數(shù)據(jù)塊,進(jìn)行分裂的前提是需要知道分裂的節(jié)點(diǎn),因此本發(fā)明實(shí)施例需要執(zhí)行步驟102在最新數(shù)據(jù)塊的時(shí)間片鍵范圍內(nèi)確定預(yù)分裂時(shí)間點(diǎn)。這里需要說明的是,選擇的該預(yù)分裂時(shí)間點(diǎn)一定要確保在該預(yù)分裂時(shí)間點(diǎn)之后的數(shù)據(jù)塊未被寫入數(shù)據(jù),也就是該預(yù)分裂時(shí)間點(diǎn)之后的數(shù)據(jù)塊為空數(shù)據(jù)塊。
103、將最新數(shù)據(jù)塊在預(yù)分裂時(shí)間點(diǎn)進(jìn)行分裂,生成兩個(gè)子數(shù)據(jù)塊。
當(dāng)在步驟102中得到最新數(shù)據(jù)塊的預(yù)分裂時(shí)間點(diǎn)后,需要在該預(yù)分裂時(shí)間點(diǎn)將最新數(shù)據(jù)塊進(jìn)行分裂操作,生成兩個(gè)子數(shù)據(jù)塊,其中一個(gè)子數(shù)據(jù)塊為空數(shù)據(jù)塊,未被寫入數(shù)據(jù),另一個(gè)子數(shù)據(jù)塊為分裂前最新數(shù)據(jù)塊中已寫入數(shù)據(jù)的部分,將繼續(xù)寫入數(shù)據(jù)。
104、將以預(yù)分裂時(shí)間點(diǎn)為時(shí)間片鍵范圍起點(diǎn)的子數(shù)據(jù)塊移動(dòng)到另一分片中。
當(dāng)最新數(shù)據(jù)塊在預(yù)分裂時(shí)間點(diǎn)被分裂后,需要將未被寫入數(shù)據(jù)的子數(shù)據(jù)塊,也就是以預(yù)分裂時(shí)間點(diǎn)為時(shí)間片鍵范圍起點(diǎn)的子數(shù)據(jù)塊移動(dòng)到另一分片中,當(dāng)系統(tǒng)時(shí)間到達(dá)預(yù)分裂時(shí)間點(diǎn)后,新的數(shù)據(jù)會(huì)被自動(dòng)寫入到以預(yù)分裂時(shí)間點(diǎn)為時(shí)間片鍵范圍起點(diǎn)的子數(shù)據(jù)塊所在的分片中,從而保證分裂前的最新數(shù)據(jù)塊所在的分片的負(fù)載不會(huì)超過極限。
本發(fā)明實(shí)施例提供的數(shù)據(jù)庫更改寫入分區(qū)的方法,能夠獲取數(shù)據(jù)庫當(dāng)前分片中最新數(shù)據(jù)塊的時(shí)間片鍵范圍,并在該時(shí)間片鍵范圍內(nèi)確定預(yù)分裂時(shí)間點(diǎn),將所述最新數(shù)據(jù)塊在預(yù)分裂時(shí)間點(diǎn)進(jìn)行分裂,生成兩個(gè)子數(shù)據(jù)塊,其中以預(yù)分裂時(shí)間點(diǎn)為時(shí)間片鍵范圍起點(diǎn)的子數(shù)據(jù)塊由于還未插入數(shù)據(jù),因此將其移動(dòng)到另一分片中,當(dāng)實(shí)際時(shí)間到達(dá)預(yù)分裂時(shí)間點(diǎn)后,新的數(shù)據(jù)會(huì)自動(dòng)寫入到被移動(dòng)的子數(shù)據(jù)塊所在的新的分片中,從而避免了由于分裂前的最新數(shù)據(jù)塊寫入數(shù)據(jù)的速度高于數(shù)據(jù)塊自動(dòng)分裂和移動(dòng)的速度導(dǎo)致當(dāng)前分片的容量過高,確保了數(shù)據(jù)在數(shù)據(jù)庫分片集群中的均衡分布。
進(jìn)一步的,為了更好的對上述圖1所示的方法進(jìn)行理解,作為對上述實(shí)施方式的細(xì)化和擴(kuò)展,本發(fā)明實(shí)施例將針對圖1中的步驟進(jìn)行詳細(xì)說明。
在本發(fā)明實(shí)施例中以時(shí)間單調(diào)遞增片鍵為例,數(shù)據(jù)庫分片集群中當(dāng)前分片的最新數(shù)據(jù)塊也就是當(dāng)前被寫入數(shù)據(jù)的數(shù)據(jù)塊,例如當(dāng)前被寫入數(shù)據(jù)的數(shù)據(jù)塊為最新數(shù)據(jù)塊M,其時(shí)間片鍵范圍為[Tm,T∞),則獲取數(shù)據(jù)庫當(dāng)前分片中最新數(shù)據(jù)塊的時(shí)間片鍵范圍為[Tm,T∞)。
由于時(shí)間片鍵位于[Tm,T∞)內(nèi)的數(shù)據(jù)都被寫入該最新數(shù)據(jù)塊M中,因此隨著時(shí)間的推移,該最新數(shù)據(jù)塊M的容量為越來越大,導(dǎo)致其所在分片的容量逐漸接近極限。為了避免上述問題的發(fā)生,現(xiàn)有技術(shù)中數(shù)據(jù)庫提供了自動(dòng)拆分?jǐn)?shù)據(jù)塊的功能,將數(shù)據(jù)塊中已經(jīng)寫入數(shù)據(jù)的部分拆分出來并移動(dòng)到其他分片中,從而防止當(dāng)前分片的容量達(dá)到極限。但是數(shù)據(jù)庫提供的自動(dòng)拆分?jǐn)?shù)據(jù)塊的功能并不能拆分并移動(dòng)數(shù)據(jù)塊中未寫入數(shù)據(jù)的部分,因此當(dāng)數(shù)據(jù)寫入該最新數(shù)據(jù)塊M的速度遠(yuǎn)大于數(shù)據(jù)庫自動(dòng)拆分該最新數(shù)據(jù)塊M并將拆分后的數(shù)據(jù)塊移動(dòng)到其他分片中的速度時(shí),該分片的容量將迅速達(dá)到極限。為了解決上述問題,本發(fā)明實(shí)施例需要將該最新數(shù)據(jù)塊M中未寫入數(shù)據(jù)的部分提前進(jìn)行拆分,獲取該最新數(shù)據(jù)塊M中未寫入數(shù)據(jù)的部分并將其進(jìn)行移動(dòng),從而保證當(dāng)前分片的容量不會(huì)達(dá)到極限。
作為一種可選的實(shí)施方式,本發(fā)明實(shí)施例會(huì)實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)庫分片集群中當(dāng)前分片的數(shù)據(jù)量,當(dāng)當(dāng)前分片的數(shù)據(jù)量大于預(yù)設(shè)閾值時(shí),會(huì)獲取當(dāng)前分片中最新數(shù)據(jù)塊M的時(shí)間片鍵范圍[Tm,T∞),并在該時(shí)間片鍵范圍內(nèi)確定預(yù)分裂時(shí)間點(diǎn),從而將最新數(shù)據(jù)塊M在預(yù)分裂時(shí)間點(diǎn)進(jìn)行拆分。
由于本發(fā)明實(shí)施例的關(guān)鍵在于拆分并移動(dòng)最新數(shù)據(jù)塊中未寫入數(shù)據(jù)的部分,因此在最新數(shù)據(jù)塊M的時(shí)間片鍵范圍[Tm,T∞)內(nèi)確定的預(yù)分裂時(shí)間點(diǎn)必須能夠?qū)⒃撟钚聰?shù)據(jù)塊M分裂為兩個(gè)部分,其中一部分從未寫入數(shù)據(jù)。作為一種可選的實(shí)施方式,本發(fā)明實(shí)施例可以將當(dāng)前時(shí)間點(diǎn)Tnow之后的一個(gè)時(shí)間點(diǎn)Tfuture確定為預(yù)分裂時(shí)間點(diǎn)。由于在當(dāng)前時(shí)間點(diǎn)Tnow處,數(shù)據(jù)寫入狀態(tài)只有兩種,一種為正在寫入數(shù)據(jù),一種為未寫入數(shù)據(jù),如果在當(dāng)前時(shí)間點(diǎn)Tnow處對最新數(shù)據(jù)塊M進(jìn)行分裂,則很有可能被正在寫入數(shù)據(jù)的情況所干擾,導(dǎo)致無法正確對最新數(shù)據(jù)塊M進(jìn)行分裂。而在當(dāng)前時(shí)間點(diǎn)Tnow之后的時(shí)間點(diǎn)Tfuture處的數(shù)據(jù)寫入狀態(tài)只有一種情況,即未寫入數(shù)據(jù)狀態(tài)。因此在時(shí)間點(diǎn)Tfuture處一定能夠?qū)⒆钚聰?shù)據(jù)塊M進(jìn)行分裂得到未寫入數(shù)據(jù)的部分。
當(dāng)在最新數(shù)據(jù)塊M的時(shí)間片鍵范圍[Tm,T∞)內(nèi)確定預(yù)分裂時(shí)間點(diǎn)Tfuture后,就可以在預(yù)分裂時(shí)間點(diǎn)Tfuture處將最新數(shù)據(jù)塊M進(jìn)行分裂,由于數(shù)據(jù)庫無法對空數(shù)據(jù)塊也就是數(shù)據(jù)塊中未寫入數(shù)據(jù)的部分進(jìn)行自動(dòng)分裂,因此,本發(fā)明實(shí)施例提供了一種可選的實(shí)施方式,由數(shù)據(jù)庫基于分裂操作指令的觸發(fā)將最新數(shù)據(jù)塊M在預(yù)分裂時(shí)間點(diǎn)Tfuture處進(jìn)行分裂。在具體實(shí)施過程中,可以使用sp l it命令在預(yù)分裂時(shí)間點(diǎn)Tfuture處將最新數(shù)據(jù)塊M進(jìn)行分裂,生成兩個(gè)子數(shù)據(jù)塊,子數(shù)據(jù)塊A和子數(shù)據(jù)塊B。其中,兩個(gè)子數(shù)據(jù)塊具有各自新的時(shí)間片鍵范圍,若子數(shù)據(jù)塊B為未寫入數(shù)據(jù)的部分,那么子數(shù)據(jù)塊B的時(shí)間片鍵范圍為[Tfuture,T∞),以預(yù)分裂時(shí)間點(diǎn)Tfuture和分裂前的最新數(shù)據(jù)塊M的時(shí)間片鍵范圍的終點(diǎn)T∞作為自身時(shí)間片鍵范圍的起點(diǎn)和終點(diǎn);子數(shù)據(jù)塊A的時(shí)間片鍵范圍為[Tm,Tfuture),以分裂前的最新數(shù)據(jù)塊M的時(shí)間片鍵范圍的起點(diǎn)Tm和預(yù)分裂時(shí)間點(diǎn)Tfuture作為自身時(shí)間片鍵范圍的起點(diǎn)和終點(diǎn)。
當(dāng)將最新數(shù)據(jù)塊M在預(yù)分裂時(shí)間點(diǎn)Tfuture處進(jìn)行分裂得到未寫入數(shù)據(jù)的子數(shù)據(jù)塊B后,需要將子數(shù)據(jù)塊B移動(dòng)到另一分片中,從而避免分裂前最新數(shù)據(jù)塊M所在分片的容量達(dá)到極限。由于數(shù)據(jù)庫無法對分裂后得到的空數(shù)據(jù)塊也就是數(shù)據(jù)塊中未寫入數(shù)據(jù)的部分進(jìn)行自動(dòng)遷移,因此,本發(fā)明實(shí)施例提供了一種可選的實(shí)施方式,由數(shù)據(jù)庫基于移動(dòng)操作指令的觸發(fā)將以預(yù)分裂時(shí)間點(diǎn)Tfuture為時(shí)間片鍵范圍起點(diǎn)的子數(shù)據(jù)塊B移動(dòng)到另一分片中。在具體實(shí)施過程中,可以使用moveChunk命令來遷移子數(shù)據(jù)塊B,將其移動(dòng) 到另一分片中。當(dāng)將子數(shù)據(jù)塊B移動(dòng)到另一分片中后,若實(shí)際時(shí)間在到達(dá)預(yù)分裂時(shí)間點(diǎn)Tfuture之前,新的數(shù)據(jù)會(huì)被數(shù)據(jù)庫繼續(xù)自動(dòng)寫入子數(shù)據(jù)塊A所在的分片中;若實(shí)際時(shí)間到達(dá)預(yù)分裂時(shí)間點(diǎn)Tfuture之后,新的數(shù)據(jù)會(huì)被數(shù)據(jù)庫自動(dòng)寫入子數(shù)據(jù)塊B所在的分片中,從而避免分裂前最新數(shù)據(jù)塊M所在分片的容量達(dá)到極限。
本發(fā)明實(shí)施例通過監(jiān)控?cái)?shù)據(jù)庫分片集群中當(dāng)前分片的數(shù)據(jù)量,當(dāng)當(dāng)前分片的數(shù)據(jù)量大于預(yù)設(shè)閾值時(shí),觸發(fā)對最新數(shù)據(jù)塊的預(yù)分裂和遷移,從而避免最新數(shù)據(jù)塊所在分片的容量達(dá)到極限。此外,通過多次在未來時(shí)間點(diǎn)觸發(fā)數(shù)據(jù)塊的分裂和遷移操作,能夠均衡的在數(shù)據(jù)庫分片集群中分布寫入的數(shù)據(jù)。
作為對上述圖1所示方法的應(yīng)用,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)庫更改寫入分區(qū)的裝置,如圖2所示,該裝置包括:獲取單元21、確定單元22、分裂單元23及移動(dòng)單元24,其中,
獲取單元21,用于獲取數(shù)據(jù)庫當(dāng)前分片中最新數(shù)據(jù)塊的時(shí)間片鍵范圍,最新數(shù)據(jù)塊為當(dāng)前寫入數(shù)據(jù)的數(shù)據(jù)塊;
確定單元22,用于在獲取單元21獲取的最新數(shù)據(jù)塊的時(shí)間片鍵范圍內(nèi)確定預(yù)分裂時(shí)間點(diǎn);
分裂單元23,用于將最新數(shù)據(jù)塊在確定單元22確定的預(yù)分裂時(shí)間點(diǎn)進(jìn)行分裂,生成兩個(gè)子數(shù)據(jù)塊;
移動(dòng)單元24,用于將分裂單元23生成的以預(yù)分裂時(shí)間點(diǎn)為時(shí)間片鍵范圍起點(diǎn)的子數(shù)據(jù)塊移動(dòng)到另一分片中。
進(jìn)一步的,如圖3所示,獲取單元21包括:
監(jiān)控模塊211,用于監(jiān)控?cái)?shù)據(jù)庫分片集群中當(dāng)前分片的數(shù)據(jù)量;
獲取模塊212,用于當(dāng)當(dāng)前分片的數(shù)據(jù)量大于預(yù)設(shè)閾值時(shí),獲取當(dāng)前分片中最新數(shù)據(jù)塊的時(shí)間片鍵范圍。
進(jìn)一步的,確定單元22用于在最新數(shù)據(jù)塊的時(shí)間片鍵范圍內(nèi),將當(dāng)前時(shí)間點(diǎn)之后的任一個(gè)時(shí)間點(diǎn)確定為預(yù)分裂時(shí)間點(diǎn)。
進(jìn)一步的,分裂單元23用于基于分裂操作指令的觸發(fā)將最新數(shù)據(jù)塊在預(yù)分裂時(shí)間點(diǎn)進(jìn)行分裂。
進(jìn)一步的,移動(dòng)單元24用于基于移動(dòng)操作指令的觸發(fā)將以預(yù)分裂時(shí)間點(diǎn)為時(shí)間片鍵范圍起點(diǎn)的子數(shù)據(jù)塊移動(dòng)到另一分片中。
本發(fā)明實(shí)施例提供的數(shù)據(jù)庫更改寫入分區(qū)的裝置,能夠獲取數(shù)據(jù)庫當(dāng)前分片中最新數(shù)據(jù)塊的時(shí)間片鍵范圍,并在該時(shí)間片鍵范圍內(nèi)確定預(yù)分裂時(shí)間點(diǎn),將所述最新數(shù)據(jù)塊在預(yù)分裂時(shí)間點(diǎn)進(jìn)行分裂,生成兩個(gè)子數(shù)據(jù)塊,其中以預(yù)分裂時(shí)間點(diǎn)為時(shí)間片鍵范圍起點(diǎn)的子數(shù)據(jù)塊由于還未插入數(shù)據(jù),因此將其移動(dòng)到另一分片中,當(dāng)實(shí)際時(shí)間到達(dá)預(yù)分裂時(shí)間點(diǎn)后,新的數(shù)據(jù)會(huì)自動(dòng)寫入到被移動(dòng)的子數(shù)據(jù)塊所在的新的分片中,從而避免了由于分裂前的最新數(shù)據(jù)塊寫入數(shù)據(jù)的速度高于數(shù)據(jù)塊自動(dòng)分裂和移動(dòng)的速度導(dǎo)致當(dāng)前分片的容量過高,確保了數(shù)據(jù)在數(shù)據(jù)庫分片集群中的均衡分布。
此外,本發(fā)明實(shí)施例通過實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)庫分片集群中當(dāng)前分片的數(shù)據(jù)量,當(dāng)當(dāng)前分片的數(shù)據(jù)量大于預(yù)設(shè)閾值時(shí),觸發(fā)對最新數(shù)據(jù)塊的預(yù)分裂和遷移,從而避免最新數(shù)據(jù)塊所在分片的容量達(dá)到極限。同時(shí),通過多次在未來時(shí)間點(diǎn)觸發(fā)數(shù)據(jù)塊的分裂和遷移操作,能夠均衡的在數(shù)據(jù)庫分片集群中分布寫入的數(shù)據(jù)。
在上述實(shí)施例中,對各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒有詳述的部分,可以參見其他實(shí)施例的相關(guān)描述。
可以理解的是,上述方法及裝置中的相關(guān)特征可以相互參考。另外,上述實(shí)施例中的“第一”、“第二”等是用于區(qū)分各實(shí)施例,而并不代表各實(shí)施例的優(yōu)劣。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對應(yīng)過程,在此不再贅述。
在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書由此明確地并入該具體實(shí)施方式,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們設(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。
本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的發(fā)明名稱(如確定網(wǎng)站內(nèi)鏈接等級(jí)的裝置)中的一些 或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實(shí)施例對本發(fā)明進(jìn)行說明而不是對本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。