亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種基于PostgreSQL塊存儲設備的遷移方法

文檔序號:10471172閱讀:274來源:國知局
一種基于PostgreSQL塊存儲設備的遷移方法【專利摘要】本發(fā)明公開了一種基于PostgreSQL塊存儲設備的遷移方法,利用PostgreSQL塊存儲設備讀寫模塊對PostgreSQL塊進行讀寫,所述PostgreSQL塊存儲設備讀寫模塊通過PostgreSQL塊?數據表之間的映射關系表和空閑PostgreSQL塊表對PostgreSQL塊存儲設備中的PostgreSQL塊進行管理,將所述PostgreSQL塊?數據表之間的映射關系表和所述空閑PostgreSQL塊表從原庫復制到新庫,將PostgreSQL塊存儲設備從原庫所在的計算機遷移到新庫所在的計算機。本發(fā)明基于PostgreSQL塊存儲設備的遷移方法將數據庫在不同的系統(tǒng)之間進行遷移及其簡單,對操作人員專業(yè)知識要求不高。查詢速度、讀寫速度能夠有極大提升,在相同的后端存儲情況下能夠達到10%~20%的速度提升。這個提升對于數據庫而言是十分可觀的?!緦@f明】-種基于PostgreSQL塊存儲設備的遷移方法
技術領域
[0001]本發(fā)明設及一種PostgreS化數據庫存儲設備的遷移方法,尤其設及一種基于化stgreS化塊存儲設備的遷移方法。【
背景技術
】[0002]隨著互聯(lián)網、移動互聯(lián)網和物聯(lián)網的發(fā)展,我們迎來了一個海量數據的時代,而數據庫內保存的數據也越來越多,而我們需要的查詢時間反而要越來越小。現(xiàn)在的眾多應用場景都需要后臺的存儲具有高并發(fā),高容量,高響應。高速的入庫需求迫使我們不得不放棄實時索引,而大數據量的數據掃描又被存儲端的I/O所限制?,F(xiàn)在的化stgreS化數據庫系統(tǒng)中,高并發(fā)的多數據庫掃描需要碰到基本都是隨機讀,而與此同時,普通磁盤的吞吐量已經不能滿足需求。[0003]為了適應大數據量的應用場景,官方推出的PostgreS化-XC、PostgreS化-化運兩個MPP數據庫還沒有成熟,而且還存在很多安全性問題。而傳統(tǒng)的提速方案僅僅是利用集中式存儲的高1/〇(輸入/輸出)來在一定程度上提高整個系統(tǒng)的。但運種提升依舊存在很大的資源浪費。[0004]如圖1所示,原有的化stgreS化數據庫系統(tǒng)底層存儲架構在文件系統(tǒng)上,從表到磁盤需要經過:表空間,文件系統(tǒng),邏輯卷、磁盤運四層最終才會寫入到物理磁盤內。[0005]運樣的架構首先會使得磁盤的I/O形成衰減。最終的磁盤I/O利用率只能達到80%左右,甚至更低。其次,當數據庫表存在大量小表的情況下,勢必會增加文件系統(tǒng)的壓力。而且對于數據庫操作而言,表的寫入讀出都較為隨機,極容易造成磁盤碎片,而大量的隨機讀寫,也必將會使得整個數據的讀寫性能下降。對于小數據量的數據庫而言,現(xiàn)有的缺點也許不明顯。但現(xiàn)在更多的使用場景是大數據量、高并發(fā)、高I/O。運些使用場景下,運些缺點將會大大影響數據庫性能。此外在不同的操作系統(tǒng)遷移中也需要極復雜的數據庫遷移操作。[0006]普通磁盤的I/O速度較低,傳統(tǒng)的解決方法是使用集中式存儲(即磁盤陣列)。運種方式只是簡單的提高磁盤的I/O速度,而且成本極高,具有一定的局限性。[0007]如圖2和圖3所示,PostgreSQL數據庫系統(tǒng)現(xiàn)有的后臺存儲架構:[000引數據庫的數據操作每條記錄都有幾個主要標識。表1D、記錄所在blackid、文件類型、行記錄對應的標識?,F(xiàn)有的化stgreS化數據庫系統(tǒng)讀寫表操作需要:[0009]a根據表1D查找到運個表的表空間,然后定位到文件系統(tǒng)中表空間的位置。[0010]b根據文件類型要獲取到指定的表文件。一般一個表會包含巧巾類型的文件。[001。fsm文件:其中存放了數據表文件中空閑空間的信息。[0012]vm文件:標記了數據表文件中哪些文件塊沒有失效的元組。[0013]表數據文件:此文件主要用于存儲數據,但是此文件大小會有一定的限制,普通情況下會保存2G,超過2G的文件會分文件保存。[0014]C根據記錄號W及fsm文件,定位page。[0015]而一般的操作系統(tǒng)對于打開的文件數會有限制。PostgreS化數據庫系統(tǒng)內部使用自己的虛擬文件管理來管理文件句柄,來保證能夠同時打開很多的表。對于數據庫而言可能同時存在很多的表,而化stgreS化數據庫系統(tǒng)采用1個表多個文件方式來保存數據。當打開一個文件的時候,會首先到文件句柄管理中找一下是不是存在已經打開的文件句柄。根據文件句柄設定一下offset。[0016]d從文件中取到對應的page,并取到對應的行。[0017]根據記錄的blockid定位到文件,讀取指定大小的塊。而運些記錄就保存在page內。[0018]現(xiàn)有技術中,采用集中式存儲作為數據庫后端。[0019]1、采用集中式存儲(磁盤陣列等)做為存儲后端。把集中式存儲提供的磁盤掛載到化stgreS化數據庫系統(tǒng)所安裝的機器。并根據不同的操作系統(tǒng)格式化成不同的文件系統(tǒng)。[0020]2、把數據庫中的數據指定到集中式存儲提供的磁盤。[0021]此種方法僅僅硬性提高后端的I/O吞吐量,并沒有從原理上提高底層I/O的利用率。而且就安全性而言,運種方法并沒有對數據做任何層面的保護,依舊讓數據暴露在外。只能夠在一定程度上實現(xiàn)數據庫系統(tǒng)的提速。但是對于高安全高性能的需求來說,我們不能僅僅依靠運種純硬件的加速而忽略軟件本身的優(yōu)化。[0022]W上是原有的化stgreSQL數據庫系統(tǒng)存儲架構。W上結構存在W下幾個缺點:[0023]第一、數據庫在不同的系統(tǒng)之間進行遷移及其復雜,對操作人員專業(yè)知識要求較局。[0024]第二、對磁盤的使用必經過文件系統(tǒng)層。[0025]就linux系統(tǒng)下較為流行的文件系統(tǒng)而言,采用64位空間來記錄塊數量和i-節(jié)點數量,對于數據庫系統(tǒng),可能存在及大量的表,每個表都將可能至少存在3個W上的文件,導致一個文件夾內存在極多的文件。[0026]文件系統(tǒng)進行塊分配時,基本上都是按照4K一個塊的模式進行分配。同時我們數據庫申請的時候都是W8K為單位進行申請。也就是說系統(tǒng)分配的塊總是比我們的表的塊要小。運樣導致的直接問題就是數據庫的業(yè)務塊雜亂的分配到磁盤上。導致的直接問題就是磁盤尋道時間長,讀寫速度減慢。[0027]假如我們的數據庫中存在一個極大的表,文件系統(tǒng)在處理的時候效率極其低。例如,在ext3文件系統(tǒng)中100MB的文件就需要近25600個數據塊。而對于PostgreS化數據庫系統(tǒng)而言,達到或超過GB級別的表處理會很常見,而且是隨機的讀寫。[0028]第Ξ、文件系統(tǒng)的擴容也非常麻煩。除了已知的極個別商業(yè)文件系統(tǒng)外,其他的文件系統(tǒng)擴容多會要求關閉數據庫。[0029]第四、數據庫數據文件直接暴露在操作系統(tǒng)中,數據存在安全隱患,數據安全也就得不到保證,對于一些對安全級別要求較高的使用環(huán)境而言是個極大的安全漏桐。【
發(fā)明內容】[0030]本發(fā)明要解決的技術問題是提供一種基于化stgreS化塊存儲設備的遷移方法,該方法將數據庫在不同的系統(tǒng)之間進行遷移及其簡單,對操作人員專業(yè)知識要求較高。[0031]為了解決上述技術問題,本發(fā)明基于PostgreS化塊存儲設備的遷移方法,利用化stgreS化塊存儲設備讀寫模塊對化stgreS化塊進行讀寫,所述化stgreS化塊存儲設備讀寫模塊通過化stgreS化塊-數據表之間的映射關系表和空閑化stgreS化塊表對化stgreS化塊存儲設備中的PostgreS化塊進行管理,將所述化stgreS化塊-數據表之間的映射關系表和所述空閑化stgreS化塊表從原庫復制到新庫,將化stgreS化塊存儲設備從原庫所在的計算機遷移到新庫所在的計算機。[0032]A、在數據庫后臺驅動層中,PostgreSQL塊存儲設備讀寫模塊的驅動完成對塊文件的操作,其主要任務為:[0033]a、通過文件句柄管理器管理上層業(yè)務對底層設備的讀寫接口,實現(xiàn)提供高并發(fā)的讀寫接口;[0034]b、實現(xiàn)對化stgreS化塊存儲設備的覆蓋寫,直接定位到化stgreS化塊存儲設備的指定位置,并寫入指定長度的數據;[0035]B、根據所述化stgreS化塊-數據表之間的映射關系表oid、表空間定位到指定塊設備的指定位置,通過表的pageid定位到塊設備的某個偏移。[0036]化stgreS化數據庫系統(tǒng)中的每一個表分配有至少一個所述化stgreS化塊,而且可動態(tài)地增量分配化stgreS化塊;[0037]每個化stgreS化塊可寫入512個8邸的化stgreS化塊數據庫系統(tǒng)的頁,一個塊設備可W包含無數多個表,一個表將可W包含無限多個化stgreS化塊,運些塊文件信息被保存在化stgreS化塊-數據表之間的映射關系表內;[0038]通過1個oid能獲取到一個數據表的所有化stgreS化塊的信息,而運些化stgreS化塊信息會順序地組成整個的所述化stgreS化塊-數據表的文件,運個表的pageid郵k就是運個表內部的偏移,同時也就能夠確定是運個塊文件的第幾個塊,至此獲得我們想要獲取的頁在塊設備內位置。[0039]在化stgreS化塊的初始頁新增驗證碼,并在新增數據加載模塊,W及驗證模塊。[0040]化stgreS化存儲設備中的第一個化stgreS化塊被分配為用于驗證的化stgreS化塊,此塊內保存化stgreS化數據庫的唯一驗證碼,此驗證碼為128位,在集群遷移或者數據庫靜態(tài)恢復時候,可W通過提供驗證碼來通過驗證,獲取化stgreS化數據庫中的數據。[0041]所述化stgreS化塊存儲設備讀寫模塊架構在化stgreSQL數據庫系統(tǒng)上。[0042]所述PostgreSQL塊-數據表之間的映射關系表包括字段ReIfilenode、Rel1:ablespace、Forknum、Blockid、Blockno,所述空閑化stgreSQL塊表包括字段Blockid、Isfree^Devo[0043]所述化stgreS化塊存儲設備讀寫模塊,具有W下子模塊:[0044]分配化stgreS化塊的子模塊,[0045]回收化stgreS化塊的子模塊,[0046]定位化stgreS化塊的子模塊,[0047]讀出化StgreS化塊中數據的子模塊,[004引寫入化StgreS化塊中數據的子模塊。[0049]所述分配PostgreS化塊的子模塊采用就近分配策略或冷熱數據分層分配策略給化stgreS化數據表分配化stgreS化塊,所述就近分配策略是化stgreS化塊就近分配策略或空閑化stgreS化塊表記錄就近分配策略,所述冷熱數據表分層分配策略是常用數據表分配策略或近期使用數據表分配策略,所述化stgreS化塊就近分配策略是在數據表上次分配的化stgreS化塊前后就近尋找空閑化stgreS化塊分配給數據表,所述空閑化stgreS化塊表記錄就近分配策略是從空閑化stgreS化塊表記錄中尋找第一個空閑化stgreS化塊,所述常用數據表分配策略是經常使用的數據表優(yōu)先分配到較快的化stgreS化塊設備上,所述近期使用數據表分配策略是將近期使用數據表優(yōu)先分配到較快的化stgreS化塊設備上,所述冷熱數據表分層分配策略用于具有兩塊W上不同讀寫速度的化stgreS化塊設備上;[0050]所述回收PostgreS化塊的子模塊用于回收數據表不再使用的PostgreS化塊,從化stgreS化塊-數據表之間的映射關系表中刪除對應的PostgreS化塊記錄,到空閑表中將相應化stgreS化塊的記錄設置為空閑;[0051]所述定位化stgreS化塊的子模塊用于將數據表中的頁定位到化stgreS化塊設備指定的位置上;[0052]所述讀出PostgreS化塊中數據的子模塊用于讀取指定塊內指定位置指定大小的數據;[0053]所述寫入PostgreS化塊中數據的子模塊用于寫入指定塊內指定位置指定大小的數據。[0054]所述寫入化stgreS化塊中數據的子模塊W加密方式將數據寫入化stgreS化塊中;相應地,[0055]所述讀出PostgreS化塊中數據的子模塊W解密的方式將數據讀出返回給數據庫業(yè)務層。[0056]所述加密的方式是采用將用戶密碼與數據異或計算后進行存儲加密的方式;[0057]所述解密的方式是采用將用戶密碼與從PostgreS化塊中讀出的數據異或計算后反回給數據庫業(yè)務層加密的方式。[005引所述空閑化stgreS化塊表中的Dev字段對不同的存儲設備進行標識實現(xiàn)擴容。[0059]所述化stgreS化塊是分配給化stgreS化數據庫系統(tǒng)中數據表的最小單位,其特征在于:所述化stgreS化塊的存儲容量大于4邸。[0060]所述化stgreS化塊的存儲容量是8邸的正整數倍。[0061]所述化stgreS化塊的存儲容量是8邸之2的自然數次方倍。[0062]所述PostgreS化塊的存儲容量是1MB、2MB、4MB、8MB、16MB、32MB、64MB、128MB、256MB、512MB或1024MB。[0063]本發(fā)明基于PostgreS化塊存儲設備的遷移方法與現(xiàn)有技術相比具有W下有益效果。[0064]1)數據庫在不同的系統(tǒng)之間進行遷移及其簡單,對操作人員專業(yè)知識要求不高。[0065]2)數據庫業(yè)務和數據分離。只要是同一個版本的數據庫,就能夠在不同的操作系統(tǒng)中自由遷移。只要能夠通過設定在數據塊頭部的驗證碼,就能夠實現(xiàn)數據庫的直接掛載。能夠自由的從linux不同版本之間進行遷移,也能夠和windows操作系統(tǒng)平臺進行相互遷移。[0066]3)數據庫的數據將會更為安全。數據庫的數據將按照我們制定的規(guī)則保存到塊設備內,從安全上來說更為安全。而且,由于使用分布式存儲,將會使得數據將會分片保存,并保存多份到不同的數據節(jié)點內,就安全度而言是單磁盤百倍W上。[0067]4)查詢速度、讀寫速度能夠有極大提升,在相同的后端存儲情況下能夠達到10%~20%的速度提升。運個提升對于數據庫而言是十分可觀的。【附圖說明】[0068]下面結合附圖和【具體實施方式】對本發(fā)明的化stgreS化塊、PostgreS化塊設備讀寫存儲模塊及基于化stgreS化塊存儲設備的遷移方法作進一步的詳細描述。[0069]圖1是現(xiàn)有技術中操作系統(tǒng)的文件系統(tǒng)讀寫分層結構示意圖。[0070]圖2是現(xiàn)有技術中操作系統(tǒng)的文件系統(tǒng)存儲空間分配結構示意圖。[0071]圖3是現(xiàn)有技術中操作系統(tǒng)的文件系統(tǒng)磁頭讀寫原理示意圖。[0072]圖4是本發(fā)明的PostgreSQL塊、PostgreSQL塊設備讀寫存儲模塊及基于化stgreS化塊存儲設備的遷移方法的結構、原理示意圖?!揪唧w實施方式】[0073]實施例一:[0074]如圖4所示,本發(fā)明的PostgreS化塊是分配給化stgreS化數據庫系統(tǒng)中數據表的最小單位,所述化stgreS化塊的存儲容量等于4MB。[00巧]當然,也可W是,所述化stgreS化塊的存儲容量大于4邸。[0076]還可W是,所述化stgreS化塊的存儲容量是8邸的正整數倍。[0077]又可W是,所述化stgreS化塊的存儲容量是8邸之2的自然數次方倍。[007引更可W是,所述PostgreS化塊的存儲容量是1MB、2MB、8MB、16MB、32MB、64MB、128MB、256MB、512MB或1024MB。[0079]實施例二:[0080]如圖4所示,本發(fā)明的PostgreS化塊存儲設備讀寫模塊是對PostgreS化塊存儲設備中如前面所述的化stgreS化塊進行管理的化stgreS化塊存儲設備讀寫模塊。[0081]所述化stgreS化塊存儲設備讀寫模塊可W架構在化stgreSQL數據庫系統(tǒng)上。[0082]所述化stgreS化塊存儲設備讀寫模塊通過化stgreS化塊-數據表之間的映射關系表和空閑化stgreS化塊表對化stgreS化塊存儲設備中的化stgreS化塊進行管理。[0083]所述PostgreSQL塊-數據表之間的映射關系表包括字段ReIfilenode、Rel1:ablespace、Forknum、Blockid、Blockno,所述空閑化stgreSQL塊表包括字段Blockid、Isfree^Devo[0084]所述化stgreS化塊存儲設備讀寫模塊,具有W下子模塊:[00化]分配化stgreS化塊的子模塊,[00化]回收化stgreS化塊的子模塊,[0087]定位化stgreS化塊的子模塊,[0088]讀出化stgreS化塊中數據的子模塊,[0089]寫入化StgreS化塊中數據的子模塊。[0090]所述分配PostgreS化塊的子模塊采用就近分配策略或冷熱數據分層分配策略給化stgreS化數據表分配化stgreS化塊,所述就近分配策略是化stgreS化塊就近分配策略或空閑化stgreS化塊表記錄就近分配策略,所述冷熱數據表分層分配策略是常用數據表分配策略或近期使用數據表分配策略,所述化stgreS化塊就近分配策略是在數據表上次分配的化stgreS化塊前后就近尋找空閑化stgreS化塊分配給數據表,所述空閑化stgreS化塊表記錄就近分配策略是從空閑化stgreS化塊表記錄中尋找第一個空閑化stgreS化塊,所述常用數據表分配策略是經常使用的數據表優(yōu)先分配到較快的化stgreS化塊設備上,所述近期使用數據表分配策略是將近期使用數據表優(yōu)先分配到較快的化stgreS化塊設備上,所述冷熱數據表分層分配策略用于具有兩塊W上不同讀寫速度的化stgreS化塊設備上;[0091]所述回收PostgreS化塊的子模塊用于回收數據表不再使用的PostgreS化塊,從化stgreS化塊-數據表之間的映射關系表中刪除對應的PostgreS化塊記錄,到空閑表中將相應化stgreS化塊的記錄設置為空閑;[0092]所述定位化stgreS化塊的子模塊用于將數據表中的頁定位到化stgreS化塊設備指定的位置上;[0093]所述讀出PostgreS化塊中數據的子模塊用于讀取指定塊內指定位置指定大小的數據;[0094]所述寫入PostgreS化塊中數據的子模塊用于寫入指定塊內指定位置指定大小的數據。[00M]所述寫入化stgreS化塊中數據的子模塊W加密方式將數據寫入化stgreS化塊中;相應地,[0096]所述讀出PostgreS化塊中數據的子模塊W解密的方式將數據讀出返回給數據庫業(yè)務層。[0097]所述加密的方式是采用將用戶密碼與數據異或計算后進行存儲加密的方式;[0098]所述解密的方式是采用將用戶密碼與從PostgreS化塊中讀出的數據異或計算后反回給數據庫業(yè)務層解密的方式。[0099]所述空閑化stgreS化塊表中的Dev字段對不同的存儲設備進行標識實現(xiàn)擴容。[0100]將所述化stgreS化塊-數據表之間的映射關系表和所述空閑化stgreS化塊表從原庫復制到新庫,將化stgreS化塊存儲設備從原庫所在的計算機遷移到新庫所在的計算機。[0101]實施例[0102]如圖4所示,本發(fā)明基于PostgreS化塊存儲設備的遷移方法,利用如前面所述的化stgreS化塊存儲設備讀寫模塊對如前面所述的化stgreS化塊進行讀寫。[0103]A、在數據庫后臺驅動層中,PostgreSQL塊存儲設備讀寫模塊的驅動完成對塊文件的操作,其主要任務為:[0104]a、通過文件句柄管理器管理上層業(yè)務對底層設備的讀寫接口,實現(xiàn)提供高并發(fā)的讀寫接口;[0105]b、實現(xiàn)對化stgreS化塊存儲設備的覆蓋寫,直接定位到化stgreS化塊存儲設備的指定位置,并寫入指定長度的數據;[0106]B、根據所述化stgreS化塊-數據表之間的映射關系表oid、表空間定位到指定塊設備的指定位置,通過表的pageid定位到塊設備的某個偏移。[0107]化stgreS化數據庫系統(tǒng)中的每一個表分配有至少一個所述化stgreS化塊,而且可動態(tài)地增量分配化stgreS化塊;[0108]每個化stgreS化塊可寫入512個8邸的化stgreS化塊數據庫系統(tǒng)的頁,一個塊設備可W包含無數多個表,一個表將可W包含無限多個化stgreS化塊,運些塊文件信息被保存在化stgreS化塊-數據表之間的映射關系表內;[0109]通過1個oid能獲取到一個數據表的所有化stgreS化塊的信息,而運些化stgreS化塊信息會順序地組成整個的所述化stgreS化塊-數據表的文件,運個表的pageid郵k就是運個表內部的偏移,同時也就能夠確定是運個塊文件的第幾個塊,至此獲得我們想要獲取的頁在塊設備內位置。[0110]如圖4所示,詳細設計如下:[0111]創(chuàng)建化stgreS化塊-數據表之間的映射關系表和空閑化stgreS化塊表。[0112]表一:PostgreSQL塊-數據表之間映射關系表[0113][0116]~~A首先我們把化stgreS化塊存儲設備在邏輯上W4MB為單位分割為N個PostgreSQL塊。[0117]一般情況下我們把PostgreS化塊存儲設備按照4MB為單位進行分割。我們只需要通過PostgreS化塊存儲設備的總容量除W-個化stgreS化塊的容量計算出化stgreS化塊存儲設備的總塊數即可,不需要對化stgreS化塊存儲設備進行掃描,運個分配時間極短。比如2T的PostgreS化塊存儲設備只需要分成524288個PostgreS化塊,我們只需要在空閑化stgreSQL塊表中新增524288條記錄,blockid從0-524287遞增即可。同時標注isfree為true〇[0118]B、數據表的存儲空間W4MB為單位進行分配。[0119]按照PostgreS化數據庫系統(tǒng)的流程而言,一個表實際占用空間是按需分配的。我們修改PostgreSQL數據庫系統(tǒng)后臺驅動文件Storage/smgr/smgr·C類型typedefstructf_smgr中需要的方法進行重寫。[0120]包括{[0121]mdinit,[0122]mdclose,[0123]mdcreate,[0124]mdexists,[0125]mdunlink,[0126]mdextend,[0127]mdprefetch,[012引mclread,[0129]mdwrite,[0130]mdnblocks,[0131]mdtruncate,[0132]mdimmedsync,[0133]mdpreckpt,[0134]mdsync,[01巧]mdpostckpt[0136]}[0137]運些方法的具體實現(xiàn)在md.c文件中。(此文件中的其他方法也要進行修改)[0138]把各個方法中設及到的Μ壯dVec進行修改。[0139]修改的主要思想為:[0140]原本SMgrRelationreln,ForkNumberforknum兩個參數定位到文件系統(tǒng)的表文件修改為定位到塊設備的offset。我們能根據rein獲取到relfilenode,reltablespace,forknum我們從PostgreS化塊-數據表之間的映射關系表中能夠定位到我們的表所占用的數據。保證(pageno+l)*4*1024KB〉reln.pageid*8KB〉pageno*4*1024KB。[0141]假如PostgreS化塊-數據表之間的映射關系表中不存在,說明我們需要新增一個化stgreS化塊給數據表。運時我們從空閑化stgreS化塊表中直接捜到一個沒被使用的塊設備就可W直接使用。直接避免文件系統(tǒng)在處理大文件時候的繁雜分配過程。[0142]假如化stgreS化塊-數據表之間的映射關系表中存在,我們就能把化stgreS化塊存儲設備直接定位到pageno*4*1024邸+(reln.pageid%512)*8邸。讀出運個8K數據即可。[0143]PostgreSQL數據庫業(yè)務到磁盤的中間過程及其簡單。磁盤利用率極高。[0144]CJostgreS化塊存儲設備的擴容。[0145]當我們的化stgreS化塊存儲設備容量不夠的時候,我們的分布式存儲能夠極容易給其擴容。只需要在空閑化stgreS化塊表新增新條目即可。擴容的方式有兩種:一種方式是原有的塊設備擴容;另一種方式是新增塊設備。對于前者我們更新化stgreS化塊-數據表之間的映射關系表,比如從2TB新增到4TB,我們只需要新插入524288條記錄,524288-1048575遞增即可。對于后者,比如新增2T塊設備。我們新增524287條記錄,blockid從0-524287遞增,dev能夠定位即可。[0146]D、數據庫遷移。[0147]數據庫業(yè)務層跟數據層分割。把塊設備直接掛載到新的節(jié)點上。運樣上層的系統(tǒng)錯誤不會影響到底層數據。[014引E、數據安全。[0149]PostgreS化塊存儲設備選擇規(guī)則可自定義,在B步驟中,我們是順序的選擇,我們也可W在我們的選擇方法中添加一些規(guī)則(比如我們可W在其中插入一致性hash算法),打亂我們數據庫的存儲規(guī)則,保證數據安全。[0150]本發(fā)明的關鍵點如下。[0151]DPostgreSQL數據庫系統(tǒng)后臺存儲W裸盤為基礎進行保存。[0152]2)PostgreSQL數據庫系統(tǒng)遷移的跨操作系統(tǒng)直接遷移,W及驗證。[0153]3)PostgreSQL數據庫系統(tǒng)對分布式文件系統(tǒng)(ceph)塊設備的直接支持。[0154]與現(xiàn)有技術相比,本發(fā)明的有益效果如下。[0K5]1)插入和查詢速度更快。[0156]2)遷移更靈活。[0157]3)數據更為安全。[0158]4)PostgreSQL數據庫系統(tǒng)業(yè)務和數據存儲相分離。[0159]需要說明的是,W上參照附圖所描述的各個實施例僅用W說明本發(fā)明而非限制本發(fā)明的范圍,本領域的普通技術人員應當理解,在不脫離本發(fā)明的精神和范圍的前提下對本發(fā)明進行的修改或者等同替換,均應涵蓋在本發(fā)明的范圍之內。此外,除上下文另有所指夕hW單數形式出現(xiàn)的詞包括復數形式,反之亦然。另外,除非特別說明,那么任何實施例的全部或一部分可結合任何其它實施例的全部或一部分來使用?!局鳈囗棥?.一種基于PostgreSQL塊存儲設備的迀移方法,其特征在于:利用PostgreSQL塊存儲設備讀寫模塊對PostgreSQL塊進行讀寫,所述PostgreSQL塊存儲設備讀寫模塊通過PostgreSQL塊-數據表之間的映射關系表和空閑PostgreSQL塊表對PostgreSQL塊存儲設備中的PostgreSQL塊進行管理,將所述PostgreSQL塊-數據表之間的映射關系表和所述空閑PostgreSQL塊表從原庫復制到新庫,將PostgreSQL塊存儲設備從原庫所在的計算機迀移到新庫所在的計算機。2.根據權利要求1所述的基于PostgreSQL塊存儲設備的迀移方法,其特征在于:A、在數據庫后臺驅動層中,PostgreSQL塊存儲設備讀寫模塊的驅動完成對塊文件的操作,其主要任務為:a、通過文件句柄管理器管理上層業(yè)務對底層設備的讀寫接口,實現(xiàn)提供高并發(fā)的讀寫接口;b、實現(xiàn)對PostgreSQL塊存儲設備的覆蓋寫,直接定位到PostgreSQL塊存儲設備的指定位置,并寫入指定長度的數據;B、根據所述PostgreSQL塊-數據表之間的映射關系表oid、表空間定位到指定塊設備的指定位置,通過表的pageid定位到塊設備的某個偏移。3.根據權利要求1所述的基于PostgreSQL塊存儲設備的迀移方法,其特征在于:PostgreSQL數據庫系統(tǒng)中的每一個表分配有至少一個所述PostgreSQL塊,而且可動態(tài)地增量分配PostgreSQL塊;每個PostgreSQL塊可寫入512個8KB的PostgreSQL塊數據庫系統(tǒng)的頁,一個塊設備可以包含無數多個表,一個表將可以包含無限多個PostgreSQL塊,這些塊文件信息被保存在PostgreSQL塊-數據表之間的映射關系表內;通過1個oid能獲取到一個數據表的所有PostgreSQL塊的信息,而這些PostgreSQL塊信息會順序地組成整個的所述PostgreSQL塊-數據表的文件,這個表的pageid*8k就是這個表內部的偏移,同時也就能夠確定是這個塊文件的第幾個塊,至此獲得我們想要獲取的頁在塊設備內位置。4.根據權利要求1所述的基于PostgreSQL塊存儲設備的迀移方法,其特征在于:在PostgreSQL塊的初始頁新增驗證碼,并在新增數據加載模塊,以及驗證模塊。5.根據權利要求1所述的基于PostgreSQL塊存儲設備的迀移方法,其特征在于:PostgreSQL存儲設備中的第一個PostgreSQL塊被分配為用于驗證的PostgreSQL塊,此塊內保存PostgreSQL數據庫的唯一驗證碼,此驗證碼為128位,在集群迀移或者數據庫靜態(tài)恢復時候,可以通過提供驗證碼來通過驗證,獲取PostgreSQL數據庫中的數據。6.根據權利要求1至5之一所述的基于PostgreSQL塊存儲設備的迀移方法,其特征在于:所述PostgreSQL塊存儲設備讀寫模塊架構在PostgreSQL數據庫系統(tǒng)上。7.根據權利要求6所述的基于PostgreSQL塊存儲設備的迀移方法,其特征在于:所述PostgreSQL塊-數據表之間的映射關系表包括字段Relfilenode、Reltablespace、Forknum、BlockicUBlockno,所述空閑PostgreSQL塊表包括字段Blockid、Isfree、Dev。8.根據權利要求7所述的基于PostgreSQL塊存儲設備的迀移方法,其特征在于:所述PostgreSQL塊存儲設備讀寫模塊,具有以下子模塊:分配PostgreSQL塊的子模塊,回收PostgreSQL塊的子模塊,定位PostgreSQL塊的子模塊,讀出PostgreSQL塊中數據的子模塊,寫入PostgreSQL塊中數據的子模塊。9.根據權利要求8所述的基于PostgreSQL塊存儲設備的迀移方法,其特征在于:所述分配PostgreSQL塊的子模塊采用就近分配策略或冷熱數據分層分配策略給PostgreSQL數據表分配PostgreSQL塊,所述就近分配策略是PostgreSQL塊就近分配策略或空閑PostgreSQL塊表記錄就近分配策略,所述冷熱數據表分層分配策略是常用數據表分配策略或近期使用數據表分配策略,所述PostgreSQL塊就近分配策略是在數據表上次分配的PostgreSQL塊前后就近尋找空閑PostgreSQL塊分配給數據表,所述空閑PostgreSQL塊表記錄就近分配策略是從空閑PostgreSQL塊表記錄中尋找第一個空閑PostgreSQL塊,所述常用數據表分配策略是經常使用的數據表優(yōu)先分配到較快的PostgreSQL塊設備上,所述近期使用數據表分配策略是將近期使用數據表優(yōu)先分配到較快的PostgreSQL塊設備上,所述冷熱數據表分層分配策略用于具有兩塊以上不同讀寫速度的PostgreSQL塊設備上;所述回收PostgreSQL塊的子模塊用于回收數據表不再使用的PostgreSQL塊,從PostgreSQL塊-數據表之間的映射關系表中刪除對應的PostgreSQL塊記錄,至I」空閑表中將相應PostgreSQL塊的記錄設置為空閑;所述定位PostgreSQL塊的子模塊用于將數據表中的頁定位到PostgreSQL塊設備指定的位置上;所述讀出PostgreSQL塊中數據的子模塊用于讀取指定塊內指定位置指定大小的數據;所述寫入PostgreSQL塊中數據的子模塊用于寫入指定塊內指定位置指定大小的數據。10.根據權利要求9所述的基于PostgreSQL塊存儲設備的迀移方法,其特征在于:所述PostgreSQL塊的存儲容量大于4KB?!疚臋n編號】G06F17/30GK105824879SQ201610133040【公開日】2016年8月3日【申請日】2016年3月9日【發(fā)明人】朱曉偉【申請人】深圳市華訊方舟軟件技術有限公司,深圳市華訊方舟科技有限公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1