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

地震前兆數據庫系統共享接口設計與實現1

2018-11-13 02:03:56李正媛黃經國劉春國周克昌
震災防御技術 2018年3期
關鍵詞:數據庫用戶

王 軍 李正媛 黃經國 劉春國 周克昌

地震前兆數據庫系統共享接口設計與實現1

王 軍 李正媛 黃經國 劉春國 周克昌

(中國地震臺網中心,北京 100045)

為解決分析預報等相關專業軟件訪問前兆數據庫時存在的性能與安全問題,本文設計了地震前兆數據庫系統共享接口軟件。該軟件可以隔離數據庫與應用程序,對應用程序的數據使用情況進行審計與控制,切斷非法、低效的數據訪問請求;同時,使用連接池、數據緩存和數據壓縮等技術提高前兆數據的訪問速度。軟件無需安裝Oracle客戶端,易于使用,屏蔽了數據庫表結構的復雜性。

地震前兆數據庫 Oracle 數據交換接口

引言

中國地震前兆觀測臺網經過“九五”、“十五”和“背景場”等項目建設,已經完成從模擬觀測向數字化、網絡化觀測的轉變,成為具備較大規模的前兆觀測臺網。國家地震前兆臺網中心(以下簡稱國家中心)作為前兆臺網的國家級中心,承擔全國數據匯集、管理和共享服務職能。國家中心前兆數據庫匯集全國前兆臺網產出的所有觀測數據、預處理數據和產品數據,提供給地震預測預報、地球科學研究人員使用。截至2017年底,國家中心前兆數據庫匯集了約810個臺站、3400套觀測儀器的數據,占用存儲空間達7.6TB。

國家中心主要通過2種方式提供前兆數據服務:

(1)直接連接數據庫:主要針對中國地震臺網中心內部的預報人員使用分析預報軟件連接到國家中心前兆數據庫進行數據瀏覽、繪圖和分析。

(2)訪問國家前兆臺網中心網站:服務內容包括數據查詢、在線繪圖和數據下載。這種方式主要對地震系統其他單位的用戶和非地震行業用戶提供前兆數據服務。

目前,前兆數據庫賬戶管理缺少相應的限制手段,多個用戶可以使用相同的公共賬號直接訪問數據庫;公共賬號的密碼難以修改,導致賬戶私下傳播;很多軟件隨意連接國家中心前兆數據庫,個別軟件甚至同時打開幾十、上百個連接,占用數據庫資源,嚴重影響數據庫性能。

Oracle數據庫管理系統只能對當前連接的用戶活動進行查詢,不能進行細粒度控制,不能提供用戶使用數據的情況統計,數據庫審計功能也較弱(Shaul等,2009)。雖然Oracle有額外的審計軟件包,但是價格昂貴,只支持事后審計分析,不具備實時控制用戶行為的功能。為此,國家中心采用目前信息技術領域流行的數據服務架構,開發了地震前兆數據庫系統共享接口軟件,該接口軟件可以實現細粒度的用戶訪問審計與控制,從而提高數據庫的安全性,同時采取數據壓縮、緩存等技術來提升訪問性能。

1 共享接口設計

1.1 技術思路及總體設計

為了解決前兆數據庫可隨意直連的問題,考慮在客戶端應用系統和數據庫之間增加1層接口軟件,實現數據庫與應用的解耦。該軟件須滿足:①訪問速度快。目前,前兆數據應用的瓶頸在于數據訪問的速度,增加接口軟件層會帶來訪問速度上的損失,需要通過技術手段來降低對速度的影響。②軟件易于安裝和使用,支持不同類型的編程語言。目前訪問前兆數據需要安裝龐大的Oracle客戶端。③軟件具有一定的透明性,用戶不需要知道數據庫的表結構等細節就可以方便地獲取想要的數據。④持續穩定地運行,否則對數據的應用會造成不良影響。

為此,我們設計了2個方案:

(1)在接口軟件中進行TNS(Oracle客戶端與服務端使用的通信協議)數據的透明傳輸,任何標準的Oracle客戶端都可以把接口軟件當作Oracle服務器進行通信(權元文,2011;殷泰暉等,2012)。然而,該方案存在若干問題,如:TNS協議沒有開源,需要花費大量時間進行反向研究;為達到對數據使用情況的統計與審計的目的,要解析應用軟件發出的SQL語句的語義;TNS不支持數據的壓縮。總體來說,該方案的開發難度大、周期長。

(2)拋棄Oracle客戶端,接口軟件和應用軟件使用其它通信協議來進行數據傳輸。只有對開源的服務器軟件進行定制開發后,流行的標準協議(如HTTP、FTP)才能用于前兆數據的傳輸。對于單一的數據傳輸目的,可以使用類似FTP的自定義協議。這個方案的優點是工作量較少,對客戶端來說更透明;缺點是現有基于Oracle客戶端的應用軟件需要改造,使用新的協議讀取數據。

國家中心的主要業務是軟件、硬件系統的運行維護,沒有足夠的時間與人力資源研究TNS協議與SQL語句解析,綜合各方面的因素,本文最終使用第2個方案開發共享接口軟件。

1.2 技術架構

地震前兆數據共享接口軟件主要使用Java、Socket(網絡套接字)、JDBC(Java數據庫編程接口)、MessagePack等平臺與技術,接口的技術架構示意圖如圖1所示。

(1)Java:一種跨平臺解釋型語言,適于開發網絡通信程序,其開發資源豐富,效率高,運行速度較快(Eckel,2007)。Java使用內存垃圾回收機制,無需程序員管理內存,且運行占用內存較多的缺點可通過提高計算機配置避免。

(2)Socket:出于性能考慮,地震前兆數據交換接口不使用流行的J2EE、Web Service等需要在容器(如tomcat)內運行、消耗較多系統資源的框架,而直接使用TCP協議的Socket方式(Calvert等,2009),仿照FTP協議,實現由客戶端發出命令、服務器應答的工作模式(圖2)。

圖1 地震前兆數據交換接口示意

(3)JDBC:接口軟件未使用Hibernate等數據庫對象持久化方案,而是直接使用JDBC操作數據庫。地震前兆數據庫的表數量超過1000,如果使用Hibernate將產生同樣數量的實體類,在數據庫增加新表時也要添加新的類代碼。接口軟件借鑒Hibernate的連接池技術,使用CP30實現數據庫連接的重復使用及最大連接數限制。實踐證明,使用連接池可避免反復打開、關閉數據庫連接,在頻繁訪問數據庫時有效提升訪問性能。

(4)MessagePack:地震前兆數據是基于Oracle 10g的結構化數據,網絡傳輸時需要轉化為數據流,客戶端再將數據流轉換回結構化數據,MessagePack能完成數據的打包和解包。MessagePack是1個二進制對象序列化開源庫,比JSON運行速度快,支持Java、C#、C++、Python等語言。Java版本的MessagePack主要包括2個類:MessagePacker和MessageUnpacker。

2 共享接口實現

2.1 軟件工作流程

接口軟件以服務器模式在3000端口進行偵聽,等待客戶端連接,采用交互式命令提供服務。目前,服務器可以接受的命令有:登錄、獲取基礎信息、獲取觀測數據、獲取被授權的臺項信息等。接口軟件工作流程見圖2。

2.2 用戶類型及訪問控制

按照數據權限將接口軟件的用戶類型劃分為預報用戶、備份用戶等。預報用戶擁有最高數據權限,享有與直連數據庫相同權限,其他用戶可以設置為只能獲取指定時間或學科的前兆數據。

為增強接口軟件的安全性,防止冒用接口賬號登陸下載數據,管理員可以根據需要設置客戶端的IP地址,服務端會對連接的IP進行檢驗,拒絕非授權的訪問。

2.3 接口命令格式及功能

(1)用戶登錄

命令格式為:Auth 用戶名口令。

客戶端連接到服務器的3000端口后,發送登錄命令,服務器端查詢該用戶名、口令及IP地址是否與數據庫中的一致,返回登錄成功或失敗的信息到客戶端。

圖2 地震前兆數據交換接口工作流程

(2)觀測數據獲取

命令1格式:GetDataByDate臺站代碼測點編碼測項分量代碼日期數據表名。

命令2格式:GetDataByIndex數據表名 DateIndex列值。

獲取觀測數據的命令有2條,命令1用于獲取指定臺站的觀測儀器某個測項分量某天數據,命令2用于獲取數據表中DateIndex列大于某個指定值的數據,用于增量數據拉取。2條命令也可以用于獲取觀測日志。

命令的返回結果為MessagePack封裝的數據流,數據以鍵值配對形式存儲,類似JDBC的ResultSet類。服務器收到GetDataByDate命令后的處理流程見圖3,GetDataByIndex命令的處理流程與之類似。

將結果集記錄用MessagePacker打包時,通過JDBC ResultSet的getMetaData方法來獲得列名和列的類型等信息,對字符串和二進制類型使用不同打包方法,主要代碼如下:

ResultSetMetaData rsm = rs.getMetaData(); //獲得結果集元數據

int colNum = rsm.getColumnCount(); //獲得列數

String str;

for (int i = 1; i <= colNum; i++) {

if (rsm.getColumnType(i) == Types.BLOB) { //列數據為二進制

oracle.sql.BLOB srcBlob = (oracle.sql.BLOB) rs.getBlob(i);

if (srcBlob != null && srcBlob.length() > 0) {

InputStream srcIs = srcBlob.getBinaryStream();

byte[] srcBuffer = new byte[(int) srcBlob.length()];

int srcLen = srcIs.read(srcBuffer);//讀取數據庫中的二進制數據

srcIs.close();

packer.packBinaryHeader(srcLen); //設置二進制包頭

packer.writePayload(srcBuffer); //打包二進制數據

packer.packString(rsm.getColumnName(i)); //打包列名

}

} else { //非二進制數據都按字符串類型處理

str = rs.getString(i);

if (str != null) { //忽略空值列

packer.packString(rsm.getColumnName(i)); //打包列名

packer.packString(rs.getString(i)); //打包列數據

}

}

}

packer.packNil();//一行結束用nil(空)分隔

圖3 GetDataByDate命令服務器處理流程

(3)基礎信息獲取

命令格式:GetBaseInfo 基礎信息表名。

基礎信息表主要包括臺站表(qz_dict_stations)、儀器類型表(qz_dict_instruments)、臺站儀器表(qz_dict_stationinstruments)、臺站測項分量表(qz_dict_stationitems)(周克昌等,2010)?;A信息表無增量更新機制,每次讀取整張表的數據。服務器端處理流程與GetDataByDate命令類似。

(4)授權的臺項信息獲取

命令格式:GetAuthorizedStationItems。

該命令無參數。服務端返回所有向國家中心報數的在運行儀器的所有測項分量列表,列表的每1行對應1個測項分量的信息,包括臺站代碼、臺站名稱、測點編碼、測項分量代碼、測項分量名稱、儀器名稱、儀器型號、所屬學科等信息。服務器端處理流程與GetDataByDate命令類似。

2.4 數據的緩存

接口軟件對數據進行打包與轉發的過程增加了時間開銷,必然會降低客戶端讀取數據的速度。接口軟件內置數據緩存功能,在內存中構造緩存區,以數據庫中的行(對應1個測項分量1天的數據)為基本單元進行緩存,客戶端讀取數據時先按照主鍵到緩存中查找數據,如果緩存命中則直接返回數據而不必到數據庫中查詢,從而提高讀取速度。緩存功能的主要技術特點如下:

(1)多線程訪問控制。使用鎖機制防止多線程并發訪問時讀寫沖突造成數據損壞。

(2)緩存使用的內存空間達到設置的上限時,使用LRU算法(Tanenbaum等,2010)對緩存中的數據進行置換,將最近未使用的數據移出緩存。

(3)緩存數據的同步。前兆數據庫的數據發生變化后,后臺線程定時按照緩存中的主鍵查詢數據庫中對應行的DateIndex值,以此判斷緩存中的數據是否需要更新。

圖4 客戶端取數流程

2.5 客戶端軟件

客戶端軟件使用Socket連接到服務器端的3000端口,打開輸入輸出流發送和接收數據。除登錄命令外,其他命令的返回數據均為服務器端用MessagePacker打包的數據流,必須用MessageUnpacker將其解包為結構化數據??蛻舳私獍鼣祿鞯暮瘮捣祷匾粋€Map對象,遍歷Map得到的主鍵和值即為某行的列名和數據??蛻舳伺c接口軟件交互的流程見圖4。

2.6 接口運行和數據監控

接口軟件可監控用戶下載數據的情況,每天自動生成數據共享監控日報,發送到相關人員的郵箱。監控日報包括Word和Excel文件,其中Word文件內容為數據共享服務的總體情況,Excel文件內容為當天所有測項分量的原始和預處理數據推送和拉取情況。接口軟件使用Java TimerTask類來定時生成監控日報,用apache的poi庫操作Word和Excel文件。圖5為軟件檢查數據推送和拉取情況的流程。軟件將所需數據一次讀入內存中進行查找,避免頻繁查詢數據庫,檢查速度得到大幅提升。

2.7 接口軟件的關鍵技術

地震前兆數據庫系統共享接口軟件主要使用了以下關鍵技術:

(1)表結構的自適應。前兆數據庫有1000多張表,觀測數據表的結構相似,均值產品表和基礎信息表結構都不相同,某些基礎信息表含有BLOB字段。開發接口軟件時必須考慮到表的字段和類型的不同。通過讀取表的相關元數據,獲得字段的名稱和類型等信息,對不同的表結構使用相同的處理,而不是對具體的字段名和類型編程,從而實現表結構的自適應。

圖5 測項分量數據推送及拉取檢查

(2)接口傳輸速度的提升。接口軟件通過使用連接池、數據緩存、數據壓縮等技術減少或避免數據轉發帶來的性能損失。大部分前兆數據精度非常高,數據變化的位數少,可以達

(3)接口軟件用多線程模型響應客戶端請求,增強了軟件的穩定性。當某個客戶端出錯造成異常時,不會影響到其它客戶端。經過實際測試,接口軟件持續運行半年沒有出現異常退出的情況。

3 接口軟件的測試

以河北昌黎后土橋的磁通門儀器變化記錄水平分量的1年秒鐘值數據(數據量大約240MB)為例,對接口軟件的功能與性能進行了測試,結果見表1。可以推測,當接口軟件的緩存命中率達到50%時,訪問速度與使用JDBC直連數據庫相當。

表1 接口測試結果

4 結語

開發共享接口軟件的目的是提供前兆數據的只讀訪問,同時進行審計與控制。接口軟件主要面向2類用戶:數據同步用戶和分析預報用戶。數據同步用戶一般為遠程用戶,擁有自己的前兆數據庫,使用接口來獲取增量數據,這類用戶適合用壓縮方式傳輸數據。截至2017年11月,中國地震局第二監測中心等用戶通過本接口,獲取了804個地震臺站2815套觀測儀器約800GB的前兆數據。分析預報用戶在局域網內使用數據,數據緩存可以減弱或消除接口層的數據轉發帶來的速度影響。為慎重起見,在經過更嚴格的測試之前,還不能將接口軟件推廣到分析預報用戶。

接口軟件對用戶的訪問行為進行測項分量級別的細粒度記錄,通過對這些訪問日志進行分析,可以統計數據使用情況,也可以獲得用戶感興趣的熱點數據等,為今后數據庫系統優化和數據服務提供依據。

下一步,將根據用戶反饋和接口運行情況,對軟件進行完善,包括增加用戶常用的訪問類型、增強接口的友好性等。此外,還可以使用更經濟的硬件資源(比如低端服務器甚至PC機)來構建分布式緩存系統,同時優化緩存的置換算法,提高緩存命中率,進一步提升接口的數據傳輸速度。

Calvert K. L.,Donahoo M. J.,2009. Java TCP/IP Socket編程.周恒民,譯.北京:機械工業出版社,28—29.

Eckel B.,2007.Java編程思想.陳昊鵬,譯.北京:機械工業出版社,45—47.

權元文,2011.基于TNS的Oracle數據庫安全增強系統設計與實現.電腦編程技巧與維護,(20):142—144,171.

Shaul J.,Ingram A.,2009.Oracle安全實踐.李楨,譯.北京:科學出版社,5—6.

Tanenbaum A. S.,Bo H.,2017.現代操作系統.4版.陳向群,馬洪兵,譯.北京:機械工業出版社,240—245.

殷泰暉,李帥,2012.基于TNS協議的Oracle數據庫安全性改進方法.合肥工業大學學報(自然科學版),35(2):193—196.

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

The Design and Implementation of Data Exchange Interface in Earthquake Precursor Database

Wang Jun, Li Zhengyuan, Huang Jingguo, Liu Chunguo and Zhou Kechang

(China Earthquake Networks Center, Beijing 100045, China)

Earthquake precursor data exchange interface is developed in order to solve problems caused by direct connection to earthquake precursor database, which can isolate database and application software, and has ability to monitor and control data usage and block illegal and low efficient data request. The interface software combines connection pool, data cache and data compression technology that can gain very high data transfer speed. The interface software is also easy to deploy without the need to install Oracle client, and easy to use without the knowledge to table structure of precursor database.

Precursor database; Oracle; Data exchange interface

王軍,李正媛,黃經國,劉春國,周克昌,2018.地震前兆數據庫系統共享接口設計與實現.震災防御技術,13(3):709—717.

10.11899/zzfy20180322

國家自然科學基金項目(41372349)

2017-12-19

王軍,男,生于1979年。工程師。主要從事地震監測數據管理與軟件開發。E-mail:wangjun825@163.com

猜你喜歡
數據庫用戶
數據庫
財經(2017年15期)2017-07-03 22:40:49
數據庫
財經(2017年2期)2017-03-10 14:35:35
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
數據庫
財經(2016年15期)2016-06-03 07:38:02
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
Camera360:拍出5億用戶
創業家(2015年10期)2015-02-27 07:55:08
100萬用戶
創業家(2015年10期)2015-02-27 07:54:39
主站蜘蛛池模板: 国产地址二永久伊甸园| 在线永久免费观看的毛片| 欧美97色| 国产女人18水真多毛片18精品| 污污网站在线观看| 亚洲中文制服丝袜欧美精品| www.国产福利| 日韩a级片视频| 久青草免费在线视频| 免费国产黄线在线观看| 91久久天天躁狠狠躁夜夜| 一级片免费网站| 日韩午夜福利在线观看| 国产啪在线| 精品一区二区三区四区五区| 亚洲高清无码精品| 中文字幕人妻无码系列第三区| 日本午夜精品一本在线观看| 日韩欧美一区在线观看| 毛片视频网址| 国产成a人片在线播放| 人妻无码中文字幕一区二区三区| 91小视频在线观看免费版高清| 国产精品99在线观看| www亚洲精品| 无码一区中文字幕| 国产成本人片免费a∨短片| 国产xxxxx免费视频| 久久永久视频| 国产第一福利影院| 欧美人与动牲交a欧美精品| 成人在线观看一区| 色综合热无码热国产| 国产自视频| 亚洲乱码在线视频| 欧美日本激情| 欧美专区在线观看| 乱系列中文字幕在线视频| 毛片网站观看| 婷婷综合色| 欧美亚洲日韩中文| h网站在线播放| 国产爽歪歪免费视频在线观看| 亚洲成a人片77777在线播放| 久久这里只有精品66| 亚洲大尺码专区影院| 国产真实乱人视频| 日韩免费视频播播| 19国产精品麻豆免费观看| 欧美日韩中文国产| 熟妇丰满人妻| 亚洲一区二区成人| 国产白浆在线观看| 亚洲AV人人澡人人双人| 成人免费网站久久久| 久久99国产精品成人欧美| 久久精品女人天堂aaa| 国产精品无码作爱| 久久久久青草大香线综合精品| 亚洲无线国产观看| 91人妻日韩人妻无码专区精品| 福利一区三区| jizz国产视频| 尤物在线观看乱码| 国产精品夜夜嗨视频免费视频| 久久国产拍爱| 亚洲人成网站在线播放2019| 九色视频在线免费观看| 亚洲欧美日本国产综合在线| 99久久国产综合精品2023| 在线精品自拍| 亚洲国模精品一区| 欧美h在线观看| 无码福利视频| 国产精品自在拍首页视频8 | 国产女主播一区| 国产精品爆乳99久久| 丁香五月婷婷激情基地| 欧美国产日本高清不卡| 欧美成人综合视频| 亚洲色大成网站www国产| 亚洲天堂免费观看|