999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

地震前兆OracleLOB數據壓縮與交換及其訪問效率研究

2019-08-19 01:49:29王建軍趙銀剛劉高川
地震研究 2019年3期

王建軍 趙銀剛 劉高川

摘要:針對目前地震前兆Oracle數據庫存在的存儲空間大、交換速度慢、讀寫速度慢等問題,分別用Bzip2,Gzip,GzipIO這3種壓縮算法對Clob和Blob的壓縮和未壓縮數據進行讀寫和交換速度測試,使用直接讀取、分段讀取、分段+線程池讀取3種方法進行了讀庫速度測試。結果表明:①無論在存儲、交換還是讀寫速度方面Blob均優于Clob;②Blob+Gzip為地震前兆分秒數據的“最佳”存儲結構,讀寫和交換速度有大幅度提升,數據庫整體容量降至目前的7%(或更少),秒數據的交換速率至少是目前的789倍;③最簡單且被軟件開發者廣泛使用的直接讀取方法讀庫效率較差,分段+線程池技術無論在Clob還是Blob、壓縮還是未壓縮時都表現出較高的讀庫效率,給LOB數據讀取速度帶來飛躍式的提升。

關鍵詞:Oracle;LOB;數據壓縮;交換效率;訪問效率

中圖分類號:P31573?? 文獻標識碼:A?? 文章編號:1000-0666(2019)03-0447-07

0 引言

隨著信息化社會的發展,存儲、傳輸和處理急劇增長的海量信息的壓力越來越大。為了節省信息的存儲空間和提高信息的傳輸效率,數據壓縮作為解決海量信息存儲和傳輸的支持技術受到極大重視(鄭翠芳,2011)。數據壓縮技術一般分為有損壓縮和無損壓縮。無損壓縮是指重構壓縮數據(還原、解壓縮)與原數據必須完全相同,適用于要求重構信號與原始信號完全一致的場合(李雷定等,2009;鄭翠芳,2011)。壓縮算法必須能夠提供較高的數據壓縮率以支持實時數據庫海量存儲的特點,壓縮和解壓縮兩個過程都必須具有較好的速度性能(劉紅霞,牛富麗,2010)。

Bzip2是基于Burrows-Wheeler變換(BWT)的無損壓縮算法,是一種不依賴于數據內部重復性的變換方法,它能將數據中相同的字符有效地聚集到一起,為進一步壓縮創造條件(李冰等,2015;Seward,2002,2007)。它能夠把普通的數據壓縮至10%~15%,壓縮和解壓效率都非常高,按照開源軟件協議在其網站上可下載完整的C,Java,C#源代碼及相應的dll接口文件。它因為較高的壓縮比和速度性能在國外被廣泛應用(Gilchrist,2008;Pankratius et al,2009;Mccool et al,2012;Salazar,Sánchez,2017),但在國內的應用仍然偏少(李冰等,2015)。數據壓縮算法有Bzip2和Gzip兩種,Net的SystemIOCompression提供另一種Gzip壓縮算法,本文簡稱為GzipIO。

2007年底地震前兆臺網“十五”系統正式建成并投入運行,該軟件系統是一個分層的4級互聯互通分布式系統,由臺站、省局、國家中心和學科中心4級構成。為便于各級數據交換,全國采用統一的數據庫管理系統(Oracle10g)和統一的數據庫表結構(周克昌等,2009,2010;劉高川,2008)。軟件系統主要有2個:管理系統(B/S架構,服務器運行)和處理系統(C/S架構,客戶端PC機運行),前者每天定時將臺站數據逐級交換至省局、國家中心和學科中心(劉高川,2008),后者負責每天的數據預處理和產品數據計算。

中國地震臺網中心前兆臺網部是全國地震前兆數據的匯集中心,同時也是容量最大的前兆數據庫。截至2018年8月,該數據庫中存儲了3 328套觀測儀器(秒采樣儀器364套,分采樣儀器2 126套,時、日采樣儀器838套)的產出數據,數據庫總量約8 000 GB,目前仍在以每年約800 GB的速度遞增,其中時間分辨率為分和秒的數據(以下簡稱為分秒數據)總量占到數據庫總是的95%以上。因為所有分秒數據全部采用Clob+ASCII未壓縮的存儲格式,數據庫出現了存儲空間大、交換速度慢、讀寫速度慢、運維困難等問題。如“處理系統”遠程讀取FHDZ-M15地磁儀器1天6個要素的秒采樣數據需要約4 min;中國地震臺網中心前兆臺網部(8 000 GB)冷備份到另一臺服務器需要連續拷貝10天左右,這10天必須關閉數據庫并停止所有服務,這種冷備份方式顯然不實用;而熱備份系統(由地震系統自主研發)因為軟件原因只能對應一臺服務器,如果主庫和備庫同時出現問題導致數據丟失,結果將是災難性的。

Oracle數據庫中,Clob和Blob(簡稱LOB)是2個典型的大對象數據存儲結構,在各級數據庫中都有廣泛使用。Clob只能存儲單字節字符數據,多用于存儲長文本數據;Blob用于存儲無結構的二進制數據,主要存儲圖像、視頻、音頻及Word文檔等帶格式數據(張靜,王永敏,2011)。為提高地震前兆數據庫的存取效率,國內地震行業學者分別進行了如下研究:姚運生等(2006)提出把一串觀測數據以二進制存儲為一個記錄的新的數據庫表結構;李井岡等(2008)對比了Clob和Blob的存取速度,發現Blob具有更高的效率,主要原因如下:一是二進制數據比字符串型數據存取快;二是Blob類型占用更少的空間,網絡傳輸快;劉堅等(2009)把LZMA壓縮算法封裝成API動態鏈接庫,調用接口函數壓縮大數據后保存至Blob字段,調用數據時將數據解壓縮還原,不僅節省了數據庫的磁盤空間,同時也提高了數據存取效率。

本文基于NET開發平臺,分別使用Bzip2,Gzip,GzipIO這3種壓縮算法對Clob和Blob的壓縮和未壓縮數據進行了讀寫速度、交換速度測試和比較,使用直接讀取、分段讀取、分段+線程池讀取3種技術進行了讀庫速度測試,對每種壓縮算法和讀庫方法的優缺點進行了歸納和總結,以此檢驗適用于地震前兆數據庫的“最佳”壓縮算法和讀庫方法。

1 測試數據和研究方法

11 測試數據選取

本文選用的測試數據全部為2009年1月1日至蘭州FHDZ-M15地磁儀器記錄的共31天的6個要素分秒數據。該儀器為秒采樣,每個要素每天包括86 400個秒采樣數據,分數據由秒采樣數據通過高斯濾波計算得到,每個要素每天包括1 440個分數據。

本文測試選用的本地服務器位于甘肅省地震局信息機房,遠程服務器位于中國地震局地球物理研究所信息機房,本地和遠程的測試數據和表結構完全相同。測試軟件為Net開發平臺編寫的客戶端軟件(運行在辦公室的PC機上)。

地震前兆數據庫中分秒數據的表結構見表1,觀測數據用Clob+ASCII未壓縮的存儲格式,每套儀器每個要素每天一條記錄。

12 LOB數據壓縮和解壓縮方法

Net中引用Bzip2提供的接口文件ICSharp CodeSharpZipLibdll后,通過命名空間ICSharpCodeSharpZipLib,調用BZip2OutputStream和BZip2InputStream分別完成Bzip2壓縮和解壓過程,調用GzipOutputStream和GzipInputStream分別完成Gzip壓縮和解壓過程,通過調用SystemIO CompressionGzipStream分別完成GzipIO壓縮和解壓過程。

13 數據庫連接和LOB讀寫方法

Net使用ADONET完成數據庫訪問,OracleConnection進行數據庫連接,OracleDataAdapter和DataTable完成LOB數據讀取和暫存,OracleCommand完成LOB數據寫入。

14 3種LOB讀庫方法

(1)直接讀取:對軟件開發者而言,LOB數據最簡單最常用的讀庫方法就是直接使用Select LobName讀取。

(2)分段讀取:無論Clob還是Blob都可以使用Oracle自帶的DBMS_LOB包中的substr函數來分段讀取數據,即DBMS_LOBsubstr(lobName,n,pos),lobName為Lob字段名,n為讀取的字節數,pos為讀取的起始位置。分段讀取時Clob每次可讀取的最大長度為4 000字節,Blob為2 000字節,因此必須循環多次執行,每次循環都要重新設置讀取的起始位置(pos),循環結束后需要把同一條記錄的LOB數據按先后順序拼接起來。

(3)分段+線程池讀取:NET的ThreadPool類提供線程池管理,將分段讀取的SQL語句依次放入線程池中,可以實現分段讀取并行執行(多個線程同時讀取)。圖1為該方法讀庫流程圖,使用時還需要編寫一個單獨的子線程類,該類中需要創建新的數據庫連接,執行分段讀取的SQL語句;任務全部添加進線程池后,還需要一個while循環,判斷所有線程全部執行結束后才能退出循環執行后續操作。

2 LOB數據壓縮和交換速度測試

21 LOB數據壓縮測試

分別使用Bzip2,Gzip,GzipIO這3種壓縮算法,對蘭州FHDZ-M15地磁儀器產出的2009年1月分秒數據進行壓縮測試。表2顯示平均每條記錄的壓縮比,無論分或秒數據,Bzip2的壓縮比最高,Gzip次之,GzipIO最低;Bzip2壓縮后每條記錄的容量最小,意味著占用更小的存儲空間;但其壓縮和解壓時間最長,遠高于其他2種算法,意味著讀庫(解壓)和寫庫(壓縮)消耗的時間更長。Gzip的壓縮時間大概是GzipIO的25倍,二者的解壓時間相差很小,但分秒數據的二進制壓縮比分別提高了5%和3%。

22 LOB數據交換速度測試

目前地震前兆管理系統軟件在數據交換時采用的是“dbLink+Insert”技術,數據交換的核心命令為insert into XX from XX@dbLinkName,dbLinkName為遠程數據庫的dbLink。根據目前的地震前兆數據交換機制,交換過程中無需解析LOB數據,因此壓縮和解壓效率對交換速度沒有影響,能影響到交換速度的只是每條記錄的容量大小。登錄遠程(北京)數據庫后直接運行該交換命令,其執行時間作為實際交換時間,即平均每條記錄由本地(蘭州)傳輸到遠程(北京)的時間。蘭州FHDZ-M15地磁儀器2009年1月所有分秒數據平均每條記錄的數據交換速度測試結果見表3,預估交換倍率=“Clob未壓縮”容量/其他容量,實際交換倍率=“Clob未壓縮”交換時間/其他交換時間。

由表3可見,無論Clob還是Blob,3種壓縮結構的實際交倍率都沒有預估交換倍率高,秒數據Blob壓縮的實際交換倍率有7~9倍的提升,而分數據的實際交換倍率提升幅度很小;秒數據Blob和Clob這2種未壓縮結構相比,在存儲容量完全相同的情況下實際交換倍率卻有184倍的提升。

3 LOB數據讀寫速度測試

31 3種壓縮算法的讀寫速度測試

使用直接讀取方法對Blob和Clob的4種存儲結構(3種壓縮+未壓縮)進行讀寫速度測試,由表4可見:①就寫庫速度而言,無論Clob還是Blob速度最快是GzipIO,Gzip次之,兩者相差極小,Bzip2因為壓縮時間長導致本地寫庫速度遠慢于其它;②就讀取速度而言,Clob中Bzip2最快,Blob中Gzip最快,即便偶有慢于其他方法的現象,讀取速度仍與最快速度相差最小;③對同一種壓縮或未壓縮結構,2種LOB類型的寫庫速度基本相當,但Blob的讀庫速度遠優于Clob。

32 3種LOB讀庫方法的讀取速度測試

分別使用3種LOB讀庫方法對壓縮和未壓縮結構進行讀庫速度測試,測試結果見表5:①直接讀取方法在Clob未壓縮中讀取效率最差,遠慢于其他2種方法;在Blob中除了秒數據1天本地讀取速度較快外,其他讀取效率最差,并且隨著讀取天數的增加,與分段+線程池方法的讀取速度差距增大。②分段讀取方法在Clob未壓縮中相對直接讀取速度有大幅度提升,但在Blob秒數據讀取時表現不穩定,頻繁出現讀取時間遠高于其它方法現象。③分段+線程池方法在Clob未壓縮中讀取速度最快,遠優于其他2種方法,在Blob中雖偶有略慢于其它方法,仍與讀取最快速度相差極小。④無論哪種讀庫方法,Gzip的讀取速度都優于GzipIO。

相對而言,與其他2種方法相比,無論在Clob還是Blob,壓縮還是未壓縮,分段+線程池方法都能表現出最高的讀庫效率,尤其在Clob未壓縮的讀取速度有飛躍式的提升。Blob+Gzip的存儲結構結合分段+線程池讀庫方法,可使地震前兆數據庫的讀庫性能達到“最佳”。

4 討論

實驗表明Blob在存儲性能上優于Clob,但Clob字段在提高長文本數據的檢索速度方面存在優勢(張靜,王永敏,2011)。上述測試結果再次驗證了Blob無論在存儲、交換還是讀寫速度方面均優于Clob,但Clob+ASCII未壓縮格式可以使用DBMS_ LOBsubstr函數讀取部分數據(由分隔符反推每個數據的起始位置),此時的讀取速度遠優于整體讀取,而Blob因為采取二進制存儲而無法做到。對地震前兆數據庫而言,讀取部分數據的情況極少,大量的實際應用是整體讀取(數據處理、繪圖、下載等)。

最佳的壓縮算法為壓縮比最高、壓縮和解壓速度最快的算法,但實際中很難同時滿足這樣的要求。Bzip2的壓縮比最高,但壓縮和解壓時間偏長,Gzip和GzipIO的壓縮和解壓時間短但壓縮比略低。壓縮和解壓2個過程都必須具有較好的速度性能,這2個問題的解是相互矛盾的,我們就是要找到兩者的平衡點,使其達到最優性能(劉紅霞,牛富麗,2010)。

從表2,4和5的測試結果來看,3種壓縮算法的壓縮比差異導致平均每條記錄的容量不一樣,進而導致讀寫速度與壓縮算法相關,表4和5的讀寫時間包括了壓縮和解壓時間,以此來反映壓縮和解壓速度。如果單從分秒數據的讀寫速度來考慮,Gzip和GzipIO優于Bzip2;Gzip和GzipIO相比,前者讀庫速度占優,后者寫庫速度占優,但Gzip的分秒數據壓縮比高出GzipIO的5%和3%,將為磁盤節省更多的存儲空間,數據交換速度將更快。

對地震前兆數據庫而言,如果采用Blob+Gzip存儲結構,數據庫整體容量降至目前的7%(或更少),分秒數據讀寫速度有大幅度提升,秒數據交換速度至少是目前的789倍,臺站數據可在最短時間內交換到5個前兆學科中心,從而讓地震前兆數據發揮更為重要的時效性。

直接讀取方法是最簡單且被軟件開發者使用最廣泛的一種讀庫方法,但其讀庫效率較差。分段讀取方法在Clob秒數據讀取時平均循環150次(58851 Kb/4 000 b)才能讀取一條記錄,但讀取速度卻遠優于直接讀取,這應該是它所使用的Substr函數將大對象轉換為Varchar2類型所致;Clob每次可讀取的最大長度為4 000字節,Blob為2 000字節,在記錄容量相同的情況下,Blob的循環次數是Clob的2倍,部分程度會導致Blob讀取效率下降,這應該是它在Blob秒數據讀取時表現不穩定,頻繁出現讀取時間遠高于其他2種方法的根本原因。分段+線程池方法采用的是多線程并行讀取技術,恰好彌補了這個不足,無論在Clob還是Blob、壓縮還是未壓縮時都表現出了較高的讀庫效率。

分段+線程池方法的缺點是讀取過程中要消耗大量的數據庫連接,數據庫中必須設置有足夠的連接數量(Open_Cursors)。NET中線程池管理具有每個可用處理器最多25個線程的默認限制,筆者在大量的讀庫測試中監測到的最大并發線程數只有19個,雖然在LOB讀取時同時開啟的線程總數可能高達200~300個,但實際上并發讀取的最多只能有25個,其他線程全部處于等待狀態。全國地震前兆數據庫目前的Open_Cursors總數全部設置為30 000,按此推算可同時支持1 200人使用該方法并發讀庫,而且數據庫訪問必須在地震行業專網下,該配置足以支持“分段+線程池”方法在地震系統內部使用。

2015年10月,筆者利用Bzip2算法完成地磁學科中心數據庫Ceabak表空間壓縮,并提供給全國分析預報人員訪問,所有分秒數據全部改用Blob+Bzip2壓縮結構,壓縮前地磁數據庫總量約為3 500 GB,壓縮后為126 GB,整體壓縮比約為36%,該壓縮數據庫運行至今未出現任何問題。2015年10月,筆者在全國地磁臺網數據處理軟件V20156版本中將Clob讀取改用分段讀取方法(之前版本采用直接讀取方法),2017年11月在V20172版本中將Clob和Blob全部改用分段+線程池讀庫技術,這2次升級后該軟件讀庫速度均有大幅度提升,目前每天的用戶總數約200人次,臺站人員利用該軟件協助地磁學科進行分秒數據遠程監控也得已實現。

5 結論

本文選取2009年1月1日至31日蘭州FHDZ-M15地磁儀器的6個要素分秒數據,分別用Bzip2,Gzip,GzipIO壓縮算法進行壓縮測試,用Clob和Blob進行了讀寫和交換速度測試,并使用3種讀庫方法進行了讀庫速度測試,主要結論如下:Blob無論在存儲、交換還是讀寫速度方面均優于Clob,但Clob在長文本數據檢索方面存在優勢;Blob+Gzip為地震前兆數據庫分秒數據的“最佳”存儲結構,讀寫速度均有大幅度提升,數據庫整體容量至少可降至目前的7%(或更少),秒數據交換速率至少是目前的789倍,臺站數據可在最短時間內交換到5個前兆學科中心,從而讓地震前兆數據發揮更為重要的時效性;最簡單且被軟件開發者使用最廣泛的直接讀取方法讀庫效率較差,分段讀取方法在Clob中遠優于直接讀取,但在Blob中表現不穩定,分段+線程池技術無論在Clob還是Blob、壓縮還是未壓縮時都表現出較高的讀庫效率,給LOB數據的讀取速度帶來飛躍式的提升。

本文所有測試數據全部來自國家地磁臺網中心,在此表示誠摯的感謝!

參考文獻:

李冰,龍冰潔,劉勇2015一種基于后綴排序快速實現Burrows-Wheeler變換的方法[J].電子與信息學報,37(2):504-508

李井岡,姚運生,李勝樂,等2008基于Oracle的地震前兆數據庫表結構對比[J].計算機工程與設計,29(1):243-245

李雷定,馬鐵華,尤文斌2009常用數據無損壓縮算法分析[J].電子設計工程,17(1):49-50

劉高川2008地震前兆數據交換系統設計[D].北京:中國地震局地球物理研究所,1-85

劉紅霞,牛富麗2010實時數據庫數據壓縮算法探討與改進[J].化工自動化及儀表,37(6):72-75

劉堅,李勝樂,王子影2009基于LZMA的數據庫壓縮存儲應用研究[J].大地測量與地球動力學,29(6):144-147

姚運生,李井岡,李勝樂2006提高地震前兆數據庫存取效率的新表結構[J].大地測量與地球動力學,26(3):126-130

張靜,王永敏2011數據庫應用系統中LOB應用技術研究[J].計算機技術與發展,21(2):166-169

鄭翠芳2011幾種常用無損數據壓縮算法研究[J].計算機技術與發展,21(9):73-76

周克昌,蔣春花,紀壽文,等2010地震前兆數據庫系統設計[J].地震,30(2):143-151

周克昌,張崇立,紀壽文,等2009中國地震前兆臺網主要問題探討[J].地震地磁觀測與研究,30(1):76-80

主站蜘蛛池模板: 国产丝袜丝视频在线观看| 国产成人你懂的在线观看| 综合色在线| 免费一极毛片| 无码国产偷倩在线播放老年人| 丁香五月激情图片| jizz国产视频| 一级毛片免费观看不卡视频| 免费jjzz在在线播放国产| 成人在线第一页| 精品久久久久成人码免费动漫| 色欲综合久久中文字幕网| 99久久无色码中文字幕| 久久一本精品久久久ー99| 亚洲av无码专区久久蜜芽| 91在线一9|永久视频在线| 红杏AV在线无码| 亚洲精品视频免费| 亚洲欧美成人综合| 欧美精品色视频| 欧美在线免费| 欧美一级专区免费大片| 一本无码在线观看| 欧美一道本| 精品夜恋影院亚洲欧洲| 精品黑人一区二区三区| 四虎永久免费地址在线网站| 91视频日本| 99尹人香蕉国产免费天天拍| 国产自产视频一区二区三区| 亚洲色图另类| 无码不卡的中文字幕视频| 成人蜜桃网| 国产成人AV综合久久| 日韩精品免费在线视频| 欧美日韩在线国产| 午夜高清国产拍精品| 波多野结衣一级毛片| 国产成人免费观看在线视频| 青青青国产免费线在| 欧美成人h精品网站| 日韩美毛片| 99这里只有精品6| 国产素人在线| 国产肉感大码AV无码| 午夜免费视频网站| 99爱视频精品免视看| 8090午夜无码专区| 亚洲一级无毛片无码在线免费视频 | 欧美福利在线观看| 国产系列在线| 久久国产成人精品国产成人亚洲| 好久久免费视频高清| 夜色爽爽影院18禁妓女影院| 国产欧美精品午夜在线播放| 欧美专区日韩专区| 九色视频一区| 色哟哟国产精品| 青青青伊人色综合久久| 亚洲美女一级毛片| 亚洲色图在线观看| 久久国产精品国产自线拍| 久久久久无码国产精品不卡| 久久久久久久久18禁秘| 午夜视频在线观看免费网站| 日韩国产一区二区三区无码| 亚洲成av人无码综合在线观看| 欧美日韩国产精品va| 性欧美在线| 亚洲AV一二三区无码AV蜜桃| 亚洲制服丝袜第一页| 试看120秒男女啪啪免费| 最新日本中文字幕| 久久亚洲日本不卡一区二区| 亚洲第一中文字幕| 国产免费网址| 色综合综合网| 91福利国产成人精品导航| 国产日韩精品欧美一区灰| 国产无遮挡猛进猛出免费软件| 日本五区在线不卡精品| 91口爆吞精国产对白第三集 |