王建軍 趙銀剛 劉高川



摘要:針對(duì)目前地震前兆Oracle數(shù)據(jù)庫存在的存儲(chǔ)空間大、交換速度慢、讀寫速度慢等問題,分別用Bzip2,Gzip,GzipIO這3種壓縮算法對(duì)Clob和Blob的壓縮和未壓縮數(shù)據(jù)進(jìn)行讀寫和交換速度測試,使用直接讀取、分段讀取、分段+線程池讀取3種方法進(jìn)行了讀庫速度測試。結(jié)果表明:①無論在存儲(chǔ)、交換還是讀寫速度方面Blob均優(yōu)于Clob;②Blob+Gzip為地震前兆分秒數(shù)據(jù)的“最佳”存儲(chǔ)結(jié)構(gòu),讀寫和交換速度有大幅度提升,數(shù)據(jù)庫整體容量降至目前的7%(或更少),秒數(shù)據(jù)的交換速率至少是目前的789倍;③最簡單且被軟件開發(fā)者廣泛使用的直接讀取方法讀庫效率較差,分段+線程池技術(shù)無論在Clob還是Blob、壓縮還是未壓縮時(shí)都表現(xiàn)出較高的讀庫效率,給LOB數(shù)據(jù)讀取速度帶來飛躍式的提升。
關(guān)鍵詞:Oracle;LOB;數(shù)據(jù)壓縮;交換效率;訪問效率
中圖分類號(hào):P31573?? 文獻(xiàn)標(biāo)識(shí)碼:A?? 文章編號(hào):1000-0666(2019)03-0447-07
0 引言
隨著信息化社會(huì)的發(fā)展,存儲(chǔ)、傳輸和處理急劇增長的海量信息的壓力越來越大。為了節(jié)省信息的存儲(chǔ)空間和提高信息的傳輸效率,數(shù)據(jù)壓縮作為解決海量信息存儲(chǔ)和傳輸?shù)闹С旨夹g(shù)受到極大重視(鄭翠芳,2011)。數(shù)據(jù)壓縮技術(shù)一般分為有損壓縮和無損壓縮。無損壓縮是指重構(gòu)壓縮數(shù)據(jù)(還原、解壓縮)與原數(shù)據(jù)必須完全相同,適用于要求重構(gòu)信號(hào)與原始信號(hào)完全一致的場合(李雷定等,2009;鄭翠芳,2011)。壓縮算法必須能夠提供較高的數(shù)據(jù)壓縮率以支持實(shí)時(shí)數(shù)據(jù)庫海量存儲(chǔ)的特點(diǎn),壓縮和解壓縮兩個(gè)過程都必須具有較好的速度性能(劉紅霞,牛富麗,2010)。
Bzip2是基于Burrows-Wheeler變換(BWT)的無損壓縮算法,是一種不依賴于數(shù)據(jù)內(nèi)部重復(fù)性的變換方法,它能將數(shù)據(jù)中相同的字符有效地聚集到一起,為進(jìn)一步壓縮創(chuàng)造條件(李冰等,2015;Seward,2002,2007)。它能夠把普通的數(shù)據(jù)壓縮至10%~15%,壓縮和解壓效率都非常高,按照開源軟件協(xié)議在其網(wǎng)站上可下載完整的C,Java,C#源代碼及相應(yīng)的dll接口文件。它因?yàn)檩^高的壓縮比和速度性能在國外被廣泛應(yīng)用(Gilchrist,2008;Pankratius et al,2009;Mccool et al,2012;Salazar,Sánchez,2017),但在國內(nèi)的應(yīng)用仍然偏少(李冰等,2015)。數(shù)據(jù)壓縮算法有Bzip2和Gzip兩種,Net的SystemIOCompression提供另一種Gzip壓縮算法,本文簡稱為GzipIO。
2007年底地震前兆臺(tái)網(wǎng)“十五”系統(tǒng)正式建成并投入運(yùn)行,該軟件系統(tǒng)是一個(gè)分層的4級(jí)互聯(lián)互通分布式系統(tǒng),由臺(tái)站、省局、國家中心和學(xué)科中心4級(jí)構(gòu)成。為便于各級(jí)數(shù)據(jù)交換,全國采用統(tǒng)一的數(shù)據(jù)庫管理系統(tǒng)(Oracle10g)和統(tǒng)一的數(shù)據(jù)庫表結(jié)構(gòu)(周克昌等,2009,2010;劉高川,2008)。軟件系統(tǒng)主要有2個(gè):管理系統(tǒng)(B/S架構(gòu),服務(wù)器運(yùn)行)和處理系統(tǒng)(C/S架構(gòu),客戶端PC機(jī)運(yùn)行),前者每天定時(shí)將臺(tái)站數(shù)據(jù)逐級(jí)交換至省局、國家中心和學(xué)科中心(劉高川,2008),后者負(fù)責(zé)每天的數(shù)據(jù)預(yù)處理和產(chǎn)品數(shù)據(jù)計(jì)算。
中國地震臺(tái)網(wǎng)中心前兆臺(tái)網(wǎng)部是全國地震前兆數(shù)據(jù)的匯集中心,同時(shí)也是容量最大的前兆數(shù)據(jù)庫。截至2018年8月,該數(shù)據(jù)庫中存儲(chǔ)了3 328套觀測儀器(秒采樣儀器364套,分采樣儀器2 126套,時(shí)、日采樣儀器838套)的產(chǎn)出數(shù)據(jù),數(shù)據(jù)庫總量約8 000 GB,目前仍在以每年約800 GB的速度遞增,其中時(shí)間分辨率為分和秒的數(shù)據(jù)(以下簡稱為分秒數(shù)據(jù))總量占到數(shù)據(jù)庫總是的95%以上。因?yàn)樗蟹置霐?shù)據(jù)全部采用Clob+ASCII未壓縮的存儲(chǔ)格式,數(shù)據(jù)庫出現(xiàn)了存儲(chǔ)空間大、交換速度慢、讀寫速度慢、運(yùn)維困難等問題。如“處理系統(tǒng)”遠(yuǎn)程讀取FHDZ-M15地磁儀器1天6個(gè)要素的秒采樣數(shù)據(jù)需要約4 min;中國地震臺(tái)網(wǎng)中心前兆臺(tái)網(wǎng)部(8 000 GB)冷備份到另一臺(tái)服務(wù)器需要連續(xù)拷貝10天左右,這10天必須關(guān)閉數(shù)據(jù)庫并停止所有服務(wù),這種冷備份方式顯然不實(shí)用;而熱備份系統(tǒng)(由地震系統(tǒng)自主研發(fā))因?yàn)檐浖蛑荒軐?duì)應(yīng)一臺(tái)服務(wù)器,如果主庫和備庫同時(shí)出現(xiàn)問題導(dǎo)致數(shù)據(jù)丟失,結(jié)果將是災(zāi)難性的。
Oracle數(shù)據(jù)庫中,Clob和Blob(簡稱LOB)是2個(gè)典型的大對(duì)象數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),在各級(jí)數(shù)據(jù)庫中都有廣泛使用。Clob只能存儲(chǔ)單字節(jié)字符數(shù)據(jù),多用于存儲(chǔ)長文本數(shù)據(jù);Blob用于存儲(chǔ)無結(jié)構(gòu)的二進(jìn)制數(shù)據(jù),主要存儲(chǔ)圖像、視頻、音頻及Word文檔等帶格式數(shù)據(jù)(張靜,王永敏,2011)。為提高地震前兆數(shù)據(jù)庫的存取效率,國內(nèi)地震行業(yè)學(xué)者分別進(jìn)行了如下研究:姚運(yùn)生等(2006)提出把一串觀測數(shù)據(jù)以二進(jìn)制存儲(chǔ)為一個(gè)記錄的新的數(shù)據(jù)庫表結(jié)構(gòu);李井岡等(2008)對(duì)比了Clob和Blob的存取速度,發(fā)現(xiàn)Blob具有更高的效率,主要原因如下:一是二進(jìn)制數(shù)據(jù)比字符串型數(shù)據(jù)存取快;二是Blob類型占用更少的空間,網(wǎng)絡(luò)傳輸快;劉堅(jiān)等(2009)把LZMA壓縮算法封裝成API動(dòng)態(tài)鏈接庫,調(diào)用接口函數(shù)壓縮大數(shù)據(jù)后保存至Blob字段,調(diào)用數(shù)據(jù)時(shí)將數(shù)據(jù)解壓縮還原,不僅節(jié)省了數(shù)據(jù)庫的磁盤空間,同時(shí)也提高了數(shù)據(jù)存取效率。
本文基于NET開發(fā)平臺(tái),分別使用Bzip2,Gzip,GzipIO這3種壓縮算法對(duì)Clob和Blob的壓縮和未壓縮數(shù)據(jù)進(jìn)行了讀寫速度、交換速度測試和比較,使用直接讀取、分段讀取、分段+線程池讀取3種技術(shù)進(jìn)行了讀庫速度測試,對(duì)每種壓縮算法和讀庫方法的優(yōu)缺點(diǎn)進(jìn)行了歸納和總結(jié),以此檢驗(yàn)適用于地震前兆數(shù)據(jù)庫的“最佳”壓縮算法和讀庫方法。
1 測試數(shù)據(jù)和研究方法
11 測試數(shù)據(jù)選取
本文選用的測試數(shù)據(jù)全部為2009年1月1日至蘭州FHDZ-M15地磁儀器記錄的共31天的6個(gè)要素分秒數(shù)據(jù)。該儀器為秒采樣,每個(gè)要素每天包括86 400個(gè)秒采樣數(shù)據(jù),分?jǐn)?shù)據(jù)由秒采樣數(shù)據(jù)通過高斯濾波計(jì)算得到,每個(gè)要素每天包括1 440個(gè)分?jǐn)?shù)據(jù)。
本文測試選用的本地服務(wù)器位于甘肅省地震局信息機(jī)房,遠(yuǎn)程服務(wù)器位于中國地震局地球物理研究所信息機(jī)房,本地和遠(yuǎn)程的測試數(shù)據(jù)和表結(jié)構(gòu)完全相同。測試軟件為Net開發(fā)平臺(tái)編寫的客戶端軟件(運(yùn)行在辦公室的PC機(jī)上)。
地震前兆數(shù)據(jù)庫中分秒數(shù)據(jù)的表結(jié)構(gòu)見表1,觀測數(shù)據(jù)用Clob+ASCII未壓縮的存儲(chǔ)格式,每套儀器每個(gè)要素每天一條記錄。
12 LOB數(shù)據(jù)壓縮和解壓縮方法
Net中引用Bzip2提供的接口文件ICSharp CodeSharpZipLibdll后,通過命名空間ICSharpCodeSharpZipLib,調(diào)用BZip2OutputStream和BZip2InputStream分別完成Bzip2壓縮和解壓過程,調(diào)用GzipOutputStream和GzipInputStream分別完成Gzip壓縮和解壓過程,通過調(diào)用SystemIO CompressionGzipStream分別完成GzipIO壓縮和解壓過程。
13 數(shù)據(jù)庫連接和LOB讀寫方法
Net使用ADONET完成數(shù)據(jù)庫訪問,OracleConnection進(jìn)行數(shù)據(jù)庫連接,OracleDataAdapter和DataTable完成LOB數(shù)據(jù)讀取和暫存,OracleCommand完成LOB數(shù)據(jù)寫入。
14 3種LOB讀庫方法
(1)直接讀取:對(duì)軟件開發(fā)者而言,LOB數(shù)據(jù)最簡單最常用的讀庫方法就是直接使用Select LobName讀取。
(2)分段讀取:無論Clob還是Blob都可以使用Oracle自帶的DBMS_LOB包中的substr函數(shù)來分段讀取數(shù)據(jù),即DBMS_LOBsubstr(lobName,n,pos),lobName為Lob字段名,n為讀取的字節(jié)數(shù),pos為讀取的起始位置。分段讀取時(shí)Clob每次可讀取的最大長度為4 000字節(jié),Blob為2 000字節(jié),因此必須循環(huán)多次執(zhí)行,每次循環(huán)都要重新設(shè)置讀取的起始位置(pos),循環(huán)結(jié)束后需要把同一條記錄的LOB數(shù)據(jù)按先后順序拼接起來。
(3)分段+線程池讀取:NET的ThreadPool類提供線程池管理,將分段讀取的SQL語句依次放入線程池中,可以實(shí)現(xiàn)分段讀取并行執(zhí)行(多個(gè)線程同時(shí)讀取)。圖1為該方法讀庫流程圖,使用時(shí)還需要編寫一個(gè)單獨(dú)的子線程類,該類中需要?jiǎng)?chuàng)建新的數(shù)據(jù)庫連接,執(zhí)行分段讀取的SQL語句;任務(wù)全部添加進(jìn)線程池后,還需要一個(gè)while循環(huán),判斷所有線程全部執(zhí)行結(jié)束后才能退出循環(huán)執(zhí)行后續(xù)操作。
2 LOB數(shù)據(jù)壓縮和交換速度測試
21 LOB數(shù)據(jù)壓縮測試
分別使用Bzip2,Gzip,GzipIO這3種壓縮算法,對(duì)蘭州FHDZ-M15地磁儀器產(chǎn)出的2009年1月分秒數(shù)據(jù)進(jìn)行壓縮測試。表2顯示平均每條記錄的壓縮比,無論分或秒數(shù)據(jù),Bzip2的壓縮比最高,Gzip次之,GzipIO最低;Bzip2壓縮后每條記錄的容量最小,意味著占用更小的存儲(chǔ)空間;但其壓縮和解壓時(shí)間最長,遠(yuǎn)高于其他2種算法,意味著讀庫(解壓)和寫庫(壓縮)消耗的時(shí)間更長。Gzip的壓縮時(shí)間大概是GzipIO的25倍,二者的解壓時(shí)間相差很小,但分秒數(shù)據(jù)的二進(jìn)制壓縮比分別提高了5%和3%。
22 LOB數(shù)據(jù)交換速度測試
目前地震前兆管理系統(tǒng)軟件在數(shù)據(jù)交換時(shí)采用的是“dbLink+Insert”技術(shù),數(shù)據(jù)交換的核心命令為insert into XX from XX@dbLinkName,dbLinkName為遠(yuǎn)程數(shù)據(jù)庫的dbLink。根據(jù)目前的地震前兆數(shù)據(jù)交換機(jī)制,交換過程中無需解析LOB數(shù)據(jù),因此壓縮和解壓效率對(duì)交換速度沒有影響,能影響到交換速度的只是每條記錄的容量大小。登錄遠(yuǎn)程(北京)數(shù)據(jù)庫后直接運(yùn)行該交換命令,其執(zhí)行時(shí)間作為實(shí)際交換時(shí)間,即平均每條記錄由本地(蘭州)傳輸?shù)竭h(yuǎn)程(北京)的時(shí)間。蘭州FHDZ-M15地磁儀器2009年1月所有分秒數(shù)據(jù)平均每條記錄的數(shù)據(jù)交換速度測試結(jié)果見表3,預(yù)估交換倍率=“Clob未壓縮”容量/其他容量,實(shí)際交換倍率=“Clob未壓縮”交換時(shí)間/其他交換時(shí)間。
由表3可見,無論Clob還是Blob,3種壓縮結(jié)構(gòu)的實(shí)際交倍率都沒有預(yù)估交換倍率高,秒數(shù)據(jù)Blob壓縮的實(shí)際交換倍率有7~9倍的提升,而分?jǐn)?shù)據(jù)的實(shí)際交換倍率提升幅度很小;秒數(shù)據(jù)Blob和Clob這2種未壓縮結(jié)構(gòu)相比,在存儲(chǔ)容量完全相同的情況下實(shí)際交換倍率卻有184倍的提升。
3 LOB數(shù)據(jù)讀寫速度測試
31 3種壓縮算法的讀寫速度測試
使用直接讀取方法對(duì)Blob和Clob的4種存儲(chǔ)結(jié)構(gòu)(3種壓縮+未壓縮)進(jìn)行讀寫速度測試,由表4可見:①就寫庫速度而言,無論Clob還是Blob速度最快是GzipIO,Gzip次之,兩者相差極小,Bzip2因?yàn)閴嚎s時(shí)間長導(dǎo)致本地寫庫速度遠(yuǎn)慢于其它;②就讀取速度而言,Clob中Bzip2最快,Blob中Gzip最快,即便偶有慢于其他方法的現(xiàn)象,讀取速度仍與最快速度相差最小;③對(duì)同一種壓縮或未壓縮結(jié)構(gòu),2種LOB類型的寫庫速度基本相當(dāng),但Blob的讀庫速度遠(yuǎn)優(yōu)于Clob。
32 3種LOB讀庫方法的讀取速度測試
分別使用3種LOB讀庫方法對(duì)壓縮和未壓縮結(jié)構(gòu)進(jìn)行讀庫速度測試,測試結(jié)果見表5:①直接讀取方法在Clob未壓縮中讀取效率最差,遠(yuǎn)慢于其他2種方法;在Blob中除了秒數(shù)據(jù)1天本地讀取速度較快外,其他讀取效率最差,并且隨著讀取天數(shù)的增加,與分段+線程池方法的讀取速度差距增大。②分段讀取方法在Clob未壓縮中相對(duì)直接讀取速度有大幅度提升,但在Blob秒數(shù)據(jù)讀取時(shí)表現(xiàn)不穩(wěn)定,頻繁出現(xiàn)讀取時(shí)間遠(yuǎn)高于其它方法現(xiàn)象。③分段+線程池方法在Clob未壓縮中讀取速度最快,遠(yuǎn)優(yōu)于其他2種方法,在Blob中雖偶有略慢于其它方法,仍與讀取最快速度相差極小。④無論哪種讀庫方法,Gzip的讀取速度都優(yōu)于GzipIO。
相對(duì)而言,與其他2種方法相比,無論在Clob還是Blob,壓縮還是未壓縮,分段+線程池方法都能表現(xiàn)出最高的讀庫效率,尤其在Clob未壓縮的讀取速度有飛躍式的提升。Blob+Gzip的存儲(chǔ)結(jié)構(gòu)結(jié)合分段+線程池讀庫方法,可使地震前兆數(shù)據(jù)庫的讀庫性能達(dá)到“最佳”。
4 討論
實(shí)驗(yàn)表明Blob在存儲(chǔ)性能上優(yōu)于Clob,但Clob字段在提高長文本數(shù)據(jù)的檢索速度方面存在優(yōu)勢(張靜,王永敏,2011)。上述測試結(jié)果再次驗(yàn)證了Blob無論在存儲(chǔ)、交換還是讀寫速度方面均優(yōu)于Clob,但Clob+ASCII未壓縮格式可以使用DBMS_ LOBsubstr函數(shù)讀取部分?jǐn)?shù)據(jù)(由分隔符反推每個(gè)數(shù)據(jù)的起始位置),此時(shí)的讀取速度遠(yuǎn)優(yōu)于整體讀取,而Blob因?yàn)椴扇《M(jìn)制存儲(chǔ)而無法做到。對(duì)地震前兆數(shù)據(jù)庫而言,讀取部分?jǐn)?shù)據(jù)的情況極少,大量的實(shí)際應(yīng)用是整體讀取(數(shù)據(jù)處理、繪圖、下載等)。
最佳的壓縮算法為壓縮比最高、壓縮和解壓速度最快的算法,但實(shí)際中很難同時(shí)滿足這樣的要求。Bzip2的壓縮比最高,但壓縮和解壓時(shí)間偏長,Gzip和GzipIO的壓縮和解壓時(shí)間短但壓縮比略低。壓縮和解壓2個(gè)過程都必須具有較好的速度性能,這2個(gè)問題的解是相互矛盾的,我們就是要找到兩者的平衡點(diǎn),使其達(dá)到最優(yōu)性能(劉紅霞,牛富麗,2010)。
從表2,4和5的測試結(jié)果來看,3種壓縮算法的壓縮比差異導(dǎo)致平均每條記錄的容量不一樣,進(jìn)而導(dǎo)致讀寫速度與壓縮算法相關(guān),表4和5的讀寫時(shí)間包括了壓縮和解壓時(shí)間,以此來反映壓縮和解壓速度。如果單從分秒數(shù)據(jù)的讀寫速度來考慮,Gzip和GzipIO優(yōu)于Bzip2;Gzip和GzipIO相比,前者讀庫速度占優(yōu),后者寫庫速度占優(yōu),但Gzip的分秒數(shù)據(jù)壓縮比高出GzipIO的5%和3%,將為磁盤節(jié)省更多的存儲(chǔ)空間,數(shù)據(jù)交換速度將更快。
對(duì)地震前兆數(shù)據(jù)庫而言,如果采用Blob+Gzip存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)庫整體容量降至目前的7%(或更少),分秒數(shù)據(jù)讀寫速度有大幅度提升,秒數(shù)據(jù)交換速度至少是目前的789倍,臺(tái)站數(shù)據(jù)可在最短時(shí)間內(nèi)交換到5個(gè)前兆學(xué)科中心,從而讓地震前兆數(shù)據(jù)發(fā)揮更為重要的時(shí)效性。
直接讀取方法是最簡單且被軟件開發(fā)者使用最廣泛的一種讀庫方法,但其讀庫效率較差。分段讀取方法在Clob秒數(shù)據(jù)讀取時(shí)平均循環(huán)150次(58851 Kb/4 000 b)才能讀取一條記錄,但讀取速度卻遠(yuǎn)優(yōu)于直接讀取,這應(yīng)該是它所使用的Substr函數(shù)將大對(duì)象轉(zhuǎn)換為Varchar2類型所致;Clob每次可讀取的最大長度為4 000字節(jié),Blob為2 000字節(jié),在記錄容量相同的情況下,Blob的循環(huán)次數(shù)是Clob的2倍,部分程度會(huì)導(dǎo)致Blob讀取效率下降,這應(yīng)該是它在Blob秒數(shù)據(jù)讀取時(shí)表現(xiàn)不穩(wěn)定,頻繁出現(xiàn)讀取時(shí)間遠(yuǎn)高于其他2種方法的根本原因。分段+線程池方法采用的是多線程并行讀取技術(shù),恰好彌補(bǔ)了這個(gè)不足,無論在Clob還是Blob、壓縮還是未壓縮時(shí)都表現(xiàn)出了較高的讀庫效率。
分段+線程池方法的缺點(diǎn)是讀取過程中要消耗大量的數(shù)據(jù)庫連接,數(shù)據(jù)庫中必須設(shè)置有足夠的連接數(shù)量(Open_Cursors)。NET中線程池管理具有每個(gè)可用處理器最多25個(gè)線程的默認(rèn)限制,筆者在大量的讀庫測試中監(jiān)測到的最大并發(fā)線程數(shù)只有19個(gè),雖然在LOB讀取時(shí)同時(shí)開啟的線程總數(shù)可能高達(dá)200~300個(gè),但實(shí)際上并發(fā)讀取的最多只能有25個(gè),其他線程全部處于等待狀態(tài)。全國地震前兆數(shù)據(jù)庫目前的Open_Cursors總數(shù)全部設(shè)置為30 000,按此推算可同時(shí)支持1 200人使用該方法并發(fā)讀庫,而且數(shù)據(jù)庫訪問必須在地震行業(yè)專網(wǎng)下,該配置足以支持“分段+線程池”方法在地震系統(tǒng)內(nèi)部使用。
2015年10月,筆者利用Bzip2算法完成地磁學(xué)科中心數(shù)據(jù)庫Ceabak表空間壓縮,并提供給全國分析預(yù)報(bào)人員訪問,所有分秒數(shù)據(jù)全部改用Blob+Bzip2壓縮結(jié)構(gòu),壓縮前地磁數(shù)據(jù)庫總量約為3 500 GB,壓縮后為126 GB,整體壓縮比約為36%,該壓縮數(shù)據(jù)庫運(yùn)行至今未出現(xiàn)任何問題。2015年10月,筆者在全國地磁臺(tái)網(wǎng)數(shù)據(jù)處理軟件V20156版本中將Clob讀取改用分段讀取方法(之前版本采用直接讀取方法),2017年11月在V20172版本中將Clob和Blob全部改用分段+線程池讀庫技術(shù),這2次升級(jí)后該軟件讀庫速度均有大幅度提升,目前每天的用戶總數(shù)約200人次,臺(tái)站人員利用該軟件協(xié)助地磁學(xué)科進(jìn)行分秒數(shù)據(jù)遠(yuǎn)程監(jiān)控也得已實(shí)現(xiàn)。
5 結(jié)論
本文選取2009年1月1日至31日蘭州FHDZ-M15地磁儀器的6個(gè)要素分秒數(shù)據(jù),分別用Bzip2,Gzip,GzipIO壓縮算法進(jìn)行壓縮測試,用Clob和Blob進(jìn)行了讀寫和交換速度測試,并使用3種讀庫方法進(jìn)行了讀庫速度測試,主要結(jié)論如下:Blob無論在存儲(chǔ)、交換還是讀寫速度方面均優(yōu)于Clob,但Clob在長文本數(shù)據(jù)檢索方面存在優(yōu)勢;Blob+Gzip為地震前兆數(shù)據(jù)庫分秒數(shù)據(jù)的“最佳”存儲(chǔ)結(jié)構(gòu),讀寫速度均有大幅度提升,數(shù)據(jù)庫整體容量至少可降至目前的7%(或更少),秒數(shù)據(jù)交換速率至少是目前的789倍,臺(tái)站數(shù)據(jù)可在最短時(shí)間內(nèi)交換到5個(gè)前兆學(xué)科中心,從而讓地震前兆數(shù)據(jù)發(fā)揮更為重要的時(shí)效性;最簡單且被軟件開發(fā)者使用最廣泛的直接讀取方法讀庫效率較差,分段讀取方法在Clob中遠(yuǎn)優(yōu)于直接讀取,但在Blob中表現(xiàn)不穩(wěn)定,分段+線程池技術(shù)無論在Clob還是Blob、壓縮還是未壓縮時(shí)都表現(xiàn)出較高的讀庫效率,給LOB數(shù)據(jù)的讀取速度帶來飛躍式的提升。
本文所有測試數(shù)據(jù)全部來自國家地磁臺(tái)網(wǎng)中心,在此表示誠摯的感謝!
參考文獻(xiàn):
李冰,龍冰潔,劉勇2015一種基于后綴排序快速實(shí)現(xiàn)Burrows-Wheeler變換的方法[J].電子與信息學(xué)報(bào),37(2):504-508
李井岡,姚運(yùn)生,李勝樂,等2008基于Oracle的地震前兆數(shù)據(jù)庫表結(jié)構(gòu)對(duì)比[J].計(jì)算機(jī)工程與設(shè)計(jì),29(1):243-245
李雷定,馬鐵華,尤文斌2009常用數(shù)據(jù)無損壓縮算法分析[J].電子設(shè)計(jì)工程,17(1):49-50
劉高川2008地震前兆數(shù)據(jù)交換系統(tǒng)設(shè)計(jì)[D].北京:中國地震局地球物理研究所,1-85
劉紅霞,牛富麗2010實(shí)時(shí)數(shù)據(jù)庫數(shù)據(jù)壓縮算法探討與改進(jìn)[J].化工自動(dòng)化及儀表,37(6):72-75
劉堅(jiān),李勝樂,王子影2009基于LZMA的數(shù)據(jù)庫壓縮存儲(chǔ)應(yīng)用研究[J].大地測量與地球動(dòng)力學(xué),29(6):144-147
姚運(yùn)生,李井岡,李勝樂2006提高地震前兆數(shù)據(jù)庫存取效率的新表結(jié)構(gòu)[J].大地測量與地球動(dòng)力學(xué),26(3):126-130
張靜,王永敏2011數(shù)據(jù)庫應(yīng)用系統(tǒng)中LOB應(yīng)用技術(shù)研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,21(2):166-169
鄭翠芳2011幾種常用無損數(shù)據(jù)壓縮算法研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,21(9):73-76
周克昌,蔣春花,紀(jì)壽文,等2010地震前兆數(shù)據(jù)庫系統(tǒng)設(shè)計(jì)[J].地震,30(2):143-151
周克昌,張崇立,紀(jì)壽文,等2009中國地震前兆臺(tái)網(wǎng)主要問題探討[J].地震地磁觀測與研究,30(1):76-80