王 軍 李正媛 黃經(jīng)國(guó) 劉春國(guó) 周克昌
地震前兆數(shù)據(jù)庫(kù)系統(tǒng)共享接口設(shè)計(jì)與實(shí)現(xiàn)1
王 軍 李正媛 黃經(jīng)國(guó) 劉春國(guó) 周克昌
(中國(guó)地震臺(tái)網(wǎng)中心,北京 100045)
為解決分析預(yù)報(bào)等相關(guān)專業(yè)軟件訪問(wèn)前兆數(shù)據(jù)庫(kù)時(shí)存在的性能與安全問(wèn)題,本文設(shè)計(jì)了地震前兆數(shù)據(jù)庫(kù)系統(tǒng)共享接口軟件。該軟件可以隔離數(shù)據(jù)庫(kù)與應(yīng)用程序,對(duì)應(yīng)用程序的數(shù)據(jù)使用情況進(jìn)行審計(jì)與控制,切斷非法、低效的數(shù)據(jù)訪問(wèn)請(qǐng)求;同時(shí),使用連接池、數(shù)據(jù)緩存和數(shù)據(jù)壓縮等技術(shù)提高前兆數(shù)據(jù)的訪問(wèn)速度。軟件無(wú)需安裝Oracle客戶端,易于使用,屏蔽了數(shù)據(jù)庫(kù)表結(jié)構(gòu)的復(fù)雜性。
地震前兆數(shù)據(jù)庫(kù) Oracle 數(shù)據(jù)交換接口
中國(guó)地震前兆觀測(cè)臺(tái)網(wǎng)經(jīng)過(guò)“九五”、“十五”和“背景場(chǎng)”等項(xiàng)目建設(shè),已經(jīng)完成從模擬觀測(cè)向數(shù)字化、網(wǎng)絡(luò)化觀測(cè)的轉(zhuǎn)變,成為具備較大規(guī)模的前兆觀測(cè)臺(tái)網(wǎng)。國(guó)家地震前兆臺(tái)網(wǎng)中心(以下簡(jiǎn)稱國(guó)家中心)作為前兆臺(tái)網(wǎng)的國(guó)家級(jí)中心,承擔(dān)全國(guó)數(shù)據(jù)匯集、管理和共享服務(wù)職能。國(guó)家中心前兆數(shù)據(jù)庫(kù)匯集全國(guó)前兆臺(tái)網(wǎng)產(chǎn)出的所有觀測(cè)數(shù)據(jù)、預(yù)處理數(shù)據(jù)和產(chǎn)品數(shù)據(jù),提供給地震預(yù)測(cè)預(yù)報(bào)、地球科學(xué)研究人員使用。截至2017年底,國(guó)家中心前兆數(shù)據(jù)庫(kù)匯集了約810個(gè)臺(tái)站、3400套觀測(cè)儀器的數(shù)據(jù),占用存儲(chǔ)空間達(dá)7.6TB。
國(guó)家中心主要通過(guò)2種方式提供前兆數(shù)據(jù)服務(wù):
(1)直接連接數(shù)據(jù)庫(kù):主要針對(duì)中國(guó)地震臺(tái)網(wǎng)中心內(nèi)部的預(yù)報(bào)人員使用分析預(yù)報(bào)軟件連接到國(guó)家中心前兆數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)瀏覽、繪圖和分析。
(2)訪問(wèn)國(guó)家前兆臺(tái)網(wǎng)中心網(wǎng)站:服務(wù)內(nèi)容包括數(shù)據(jù)查詢、在線繪圖和數(shù)據(jù)下載。這種方式主要對(duì)地震系統(tǒng)其他單位的用戶和非地震行業(yè)用戶提供前兆數(shù)據(jù)服務(wù)。
目前,前兆數(shù)據(jù)庫(kù)賬戶管理缺少相應(yīng)的限制手段,多個(gè)用戶可以使用相同的公共賬號(hào)直接訪問(wèn)數(shù)據(jù)庫(kù);公共賬號(hào)的密碼難以修改,導(dǎo)致賬戶私下傳播;很多軟件隨意連接國(guó)家中心前兆數(shù)據(jù)庫(kù),個(gè)別軟件甚至同時(shí)打開幾十、上百個(gè)連接,占用數(shù)據(jù)庫(kù)資源,嚴(yán)重影響數(shù)據(jù)庫(kù)性能。
Oracle數(shù)據(jù)庫(kù)管理系統(tǒng)只能對(duì)當(dāng)前連接的用戶活動(dòng)進(jìn)行查詢,不能進(jìn)行細(xì)粒度控制,不能提供用戶使用數(shù)據(jù)的情況統(tǒng)計(jì),數(shù)據(jù)庫(kù)審計(jì)功能也較弱(Shaul等,2009)。雖然Oracle有額外的審計(jì)軟件包,但是價(jià)格昂貴,只支持事后審計(jì)分析,不具備實(shí)時(shí)控制用戶行為的功能。為此,國(guó)家中心采用目前信息技術(shù)領(lǐng)域流行的數(shù)據(jù)服務(wù)架構(gòu),開發(fā)了地震前兆數(shù)據(jù)庫(kù)系統(tǒng)共享接口軟件,該接口軟件可以實(shí)現(xiàn)細(xì)粒度的用戶訪問(wèn)審計(jì)與控制,從而提高數(shù)據(jù)庫(kù)的安全性,同時(shí)采取數(shù)據(jù)壓縮、緩存等技術(shù)來(lái)提升訪問(wèn)性能。
為了解決前兆數(shù)據(jù)庫(kù)可隨意直連的問(wèn)題,考慮在客戶端應(yīng)用系統(tǒng)和數(shù)據(jù)庫(kù)之間增加1層接口軟件,實(shí)現(xiàn)數(shù)據(jù)庫(kù)與應(yīng)用的解耦。該軟件須滿足:①訪問(wèn)速度快。目前,前兆數(shù)據(jù)應(yīng)用的瓶頸在于數(shù)據(jù)訪問(wèn)的速度,增加接口軟件層會(huì)帶來(lái)訪問(wèn)速度上的損失,需要通過(guò)技術(shù)手段來(lái)降低對(duì)速度的影響。②軟件易于安裝和使用,支持不同類型的編程語(yǔ)言。目前訪問(wèn)前兆數(shù)據(jù)需要安裝龐大的Oracle客戶端。③軟件具有一定的透明性,用戶不需要知道數(shù)據(jù)庫(kù)的表結(jié)構(gòu)等細(xì)節(jié)就可以方便地獲取想要的數(shù)據(jù)。④持續(xù)穩(wěn)定地運(yùn)行,否則對(duì)數(shù)據(jù)的應(yīng)用會(huì)造成不良影響。
為此,我們?cè)O(shè)計(jì)了2個(gè)方案:
(1)在接口軟件中進(jìn)行TNS(Oracle客戶端與服務(wù)端使用的通信協(xié)議)數(shù)據(jù)的透明傳輸,任何標(biāo)準(zhǔn)的Oracle客戶端都可以把接口軟件當(dāng)作Oracle服務(wù)器進(jìn)行通信(權(quán)元文,2011;殷泰暉等,2012)。然而,該方案存在若干問(wèn)題,如:TNS協(xié)議沒(méi)有開源,需要花費(fèi)大量時(shí)間進(jìn)行反向研究;為達(dá)到對(duì)數(shù)據(jù)使用情況的統(tǒng)計(jì)與審計(jì)的目的,要解析應(yīng)用軟件發(fā)出的SQL語(yǔ)句的語(yǔ)義;TNS不支持?jǐn)?shù)據(jù)的壓縮??傮w來(lái)說(shuō),該方案的開發(fā)難度大、周期長(zhǎng)。
(2)拋棄Oracle客戶端,接口軟件和應(yīng)用軟件使用其它通信協(xié)議來(lái)進(jìn)行數(shù)據(jù)傳輸。只有對(duì)開源的服務(wù)器軟件進(jìn)行定制開發(fā)后,流行的標(biāo)準(zhǔn)協(xié)議(如HTTP、FTP)才能用于前兆數(shù)據(jù)的傳輸。對(duì)于單一的數(shù)據(jù)傳輸目的,可以使用類似FTP的自定義協(xié)議。這個(gè)方案的優(yōu)點(diǎn)是工作量較少,對(duì)客戶端來(lái)說(shuō)更透明;缺點(diǎn)是現(xiàn)有基于Oracle客戶端的應(yīng)用軟件需要改造,使用新的協(xié)議讀取數(shù)據(jù)。
國(guó)家中心的主要業(yè)務(wù)是軟件、硬件系統(tǒng)的運(yùn)行維護(hù),沒(méi)有足夠的時(shí)間與人力資源研究TNS協(xié)議與SQL語(yǔ)句解析,綜合各方面的因素,本文最終使用第2個(gè)方案開發(fā)共享接口軟件。
地震前兆數(shù)據(jù)共享接口軟件主要使用Java、Socket(網(wǎng)絡(luò)套接字)、JDBC(Java數(shù)據(jù)庫(kù)編程接口)、MessagePack等平臺(tái)與技術(shù),接口的技術(shù)架構(gòu)示意圖如圖1所示。
(1)Java:一種跨平臺(tái)解釋型語(yǔ)言,適于開發(fā)網(wǎng)絡(luò)通信程序,其開發(fā)資源豐富,效率高,運(yùn)行速度較快(Eckel,2007)。Java使用內(nèi)存垃圾回收機(jī)制,無(wú)需程序員管理內(nèi)存,且運(yùn)行占用內(nèi)存較多的缺點(diǎn)可通過(guò)提高計(jì)算機(jī)配置避免。
(2)Socket:出于性能考慮,地震前兆數(shù)據(jù)交換接口不使用流行的J2EE、Web Service等需要在容器(如tomcat)內(nèi)運(yùn)行、消耗較多系統(tǒng)資源的框架,而直接使用TCP協(xié)議的Socket方式(Calvert等,2009),仿照FTP協(xié)議,實(shí)現(xiàn)由客戶端發(fā)出命令、服務(wù)器應(yīng)答的工作模式(圖2)。
圖1 地震前兆數(shù)據(jù)交換接口示意
(3)JDBC:接口軟件未使用Hibernate等數(shù)據(jù)庫(kù)對(duì)象持久化方案,而是直接使用JDBC操作數(shù)據(jù)庫(kù)。地震前兆數(shù)據(jù)庫(kù)的表數(shù)量超過(guò)1000,如果使用Hibernate將產(chǎn)生同樣數(shù)量的實(shí)體類,在數(shù)據(jù)庫(kù)增加新表時(shí)也要添加新的類代碼。接口軟件借鑒Hibernate的連接池技術(shù),使用CP30實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接的重復(fù)使用及最大連接數(shù)限制。實(shí)踐證明,使用連接池可避免反復(fù)打開、關(guān)閉數(shù)據(jù)庫(kù)連接,在頻繁訪問(wèn)數(shù)據(jù)庫(kù)時(shí)有效提升訪問(wèn)性能。
(4)MessagePack:地震前兆數(shù)據(jù)是基于Oracle 10g的結(jié)構(gòu)化數(shù)據(jù),網(wǎng)絡(luò)傳輸時(shí)需要轉(zhuǎn)化為數(shù)據(jù)流,客戶端再將數(shù)據(jù)流轉(zhuǎn)換回結(jié)構(gòu)化數(shù)據(jù),MessagePack能完成數(shù)據(jù)的打包和解包。MessagePack是1個(gè)二進(jìn)制對(duì)象序列化開源庫(kù),比JSON運(yùn)行速度快,支持Java、C#、C++、Python等語(yǔ)言。Java版本的MessagePack主要包括2個(gè)類:MessagePacker和MessageUnpacker。
接口軟件以服務(wù)器模式在3000端口進(jìn)行偵聽(tīng),等待客戶端連接,采用交互式命令提供服務(wù)。目前,服務(wù)器可以接受的命令有:登錄、獲取基礎(chǔ)信息、獲取觀測(cè)數(shù)據(jù)、獲取被授權(quán)的臺(tái)項(xiàng)信息等。接口軟件工作流程見(jiàn)圖2。
按照數(shù)據(jù)權(quán)限將接口軟件的用戶類型劃分為預(yù)報(bào)用戶、備份用戶等。預(yù)報(bào)用戶擁有最高數(shù)據(jù)權(quán)限,享有與直連數(shù)據(jù)庫(kù)相同權(quán)限,其他用戶可以設(shè)置為只能獲取指定時(shí)間或?qū)W科的前兆數(shù)據(jù)。
為增強(qiáng)接口軟件的安全性,防止冒用接口賬號(hào)登陸下載數(shù)據(jù),管理員可以根據(jù)需要設(shè)置客戶端的IP地址,服務(wù)端會(huì)對(duì)連接的IP進(jìn)行檢驗(yàn),拒絕非授權(quán)的訪問(wèn)。
(1)用戶登錄
命令格式為:Auth 用戶名口令。
客戶端連接到服務(wù)器的3000端口后,發(fā)送登錄命令,服務(wù)器端查詢?cè)撚脩裘?、口令及IP地址是否與數(shù)據(jù)庫(kù)中的一致,返回登錄成功或失敗的信息到客戶端。
圖2 地震前兆數(shù)據(jù)交換接口工作流程
(2)觀測(cè)數(shù)據(jù)獲取
命令1格式:GetDataByDate臺(tái)站代碼測(cè)點(diǎn)編碼測(cè)項(xiàng)分量代碼日期數(shù)據(jù)表名。
命令2格式:GetDataByIndex數(shù)據(jù)表名 DateIndex列值。
獲取觀測(cè)數(shù)據(jù)的命令有2條,命令1用于獲取指定臺(tái)站的觀測(cè)儀器某個(gè)測(cè)項(xiàng)分量某天數(shù)據(jù),命令2用于獲取數(shù)據(jù)表中DateIndex列大于某個(gè)指定值的數(shù)據(jù),用于增量數(shù)據(jù)拉取。2條命令也可以用于獲取觀測(cè)日志。
命令的返回結(jié)果為MessagePack封裝的數(shù)據(jù)流,數(shù)據(jù)以鍵值配對(duì)形式存儲(chǔ),類似JDBC的ResultSet類。服務(wù)器收到GetDataByDate命令后的處理流程見(jiàn)圖3,GetDataByIndex命令的處理流程與之類似。
將結(jié)果集記錄用MessagePacker打包時(shí),通過(guò)JDBC ResultSet的getMetaData方法來(lái)獲得列名和列的類型等信息,對(duì)字符串和二進(jìn)制類型使用不同打包方法,主要代碼如下:
ResultSetMetaData rsm = rs.getMetaData(); //獲得結(jié)果集元數(shù)據(jù)
int colNum = rsm.getColumnCount(); //獲得列數(shù)
String str;
for (int i = 1; i <= colNum; i++) {
if (rsm.getColumnType(i) == Types.BLOB) { //列數(shù)據(jù)為二進(jìn)制
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);//讀取數(shù)據(jù)庫(kù)中的二進(jìn)制數(shù)據(jù)
srcIs.close();
packer.packBinaryHeader(srcLen); //設(shè)置二進(jìn)制包頭
packer.writePayload(srcBuffer); //打包二進(jìn)制數(shù)據(jù)
packer.packString(rsm.getColumnName(i)); //打包列名
}
} else { //非二進(jìn)制數(shù)據(jù)都按字符串類型處理
str = rs.getString(i);
if (str != null) { //忽略空值列
packer.packString(rsm.getColumnName(i)); //打包列名
packer.packString(rs.getString(i)); //打包列數(shù)據(jù)
}
}
}
packer.packNil();//一行結(jié)束用nil(空)分隔
圖3 GetDataByDate命令服務(wù)器處理流程
(3)基礎(chǔ)信息獲取
命令格式:GetBaseInfo 基礎(chǔ)信息表名。
基礎(chǔ)信息表主要包括臺(tái)站表(qz_dict_stations)、儀器類型表(qz_dict_instruments)、臺(tái)站儀器表(qz_dict_stationinstruments)、臺(tái)站測(cè)項(xiàng)分量表(qz_dict_stationitems)(周克昌等,2010)?;A(chǔ)信息表無(wú)增量更新機(jī)制,每次讀取整張表的數(shù)據(jù)。服務(wù)器端處理流程與GetDataByDate命令類似。
(4)授權(quán)的臺(tái)項(xiàng)信息獲取
命令格式:GetAuthorizedStationItems。
該命令無(wú)參數(shù)。服務(wù)端返回所有向國(guó)家中心報(bào)數(shù)的在運(yùn)行儀器的所有測(cè)項(xiàng)分量列表,列表的每1行對(duì)應(yīng)1個(gè)測(cè)項(xiàng)分量的信息,包括臺(tái)站代碼、臺(tái)站名稱、測(cè)點(diǎn)編碼、測(cè)項(xiàng)分量代碼、測(cè)項(xiàng)分量名稱、儀器名稱、儀器型號(hào)、所屬學(xué)科等信息。服務(wù)器端處理流程與GetDataByDate命令類似。
接口軟件對(duì)數(shù)據(jù)進(jìn)行打包與轉(zhuǎn)發(fā)的過(guò)程增加了時(shí)間開銷,必然會(huì)降低客戶端讀取數(shù)據(jù)的速度。接口軟件內(nèi)置數(shù)據(jù)緩存功能,在內(nèi)存中構(gòu)造緩存區(qū),以數(shù)據(jù)庫(kù)中的行(對(duì)應(yīng)1個(gè)測(cè)項(xiàng)分量1天的數(shù)據(jù))為基本單元進(jìn)行緩存,客戶端讀取數(shù)據(jù)時(shí)先按照主鍵到緩存中查找數(shù)據(jù),如果緩存命中則直接返回?cái)?shù)據(jù)而不必到數(shù)據(jù)庫(kù)中查詢,從而提高讀取速度。緩存功能的主要技術(shù)特點(diǎn)如下:
(1)多線程訪問(wèn)控制。使用鎖機(jī)制防止多線程并發(fā)訪問(wèn)時(shí)讀寫沖突造成數(shù)據(jù)損壞。
(2)緩存使用的內(nèi)存空間達(dá)到設(shè)置的上限時(shí),使用LRU算法(Tanenbaum等,2010)對(duì)緩存中的數(shù)據(jù)進(jìn)行置換,將最近未使用的數(shù)據(jù)移出緩存。
(3)緩存數(shù)據(jù)的同步。前兆數(shù)據(jù)庫(kù)的數(shù)據(jù)發(fā)生變化后,后臺(tái)線程定時(shí)按照緩存中的主鍵查詢數(shù)據(jù)庫(kù)中對(duì)應(yīng)行的DateIndex值,以此判斷緩存中的數(shù)據(jù)是否需要更新。
圖4 客戶端取數(shù)流程
客戶端軟件使用Socket連接到服務(wù)器端的3000端口,打開輸入輸出流發(fā)送和接收數(shù)據(jù)。除登錄命令外,其他命令的返回?cái)?shù)據(jù)均為服務(wù)器端用MessagePacker打包的數(shù)據(jù)流,必須用MessageUnpacker將其解包為結(jié)構(gòu)化數(shù)據(jù)??蛻舳私獍鼣?shù)據(jù)流的函數(shù)返回一個(gè)Map對(duì)象,遍歷Map得到的主鍵和值即為某行的列名和數(shù)據(jù)。客戶端與接口軟件交互的流程見(jiàn)圖4。
接口軟件可監(jiān)控用戶下載數(shù)據(jù)的情況,每天自動(dòng)生成數(shù)據(jù)共享監(jiān)控日?qǐng)?bào),發(fā)送到相關(guān)人員的郵箱。監(jiān)控日?qǐng)?bào)包括Word和Excel文件,其中Word文件內(nèi)容為數(shù)據(jù)共享服務(wù)的總體情況,Excel文件內(nèi)容為當(dāng)天所有測(cè)項(xiàng)分量的原始和預(yù)處理數(shù)據(jù)推送和拉取情況。接口軟件使用Java TimerTask類來(lái)定時(shí)生成監(jiān)控日?qǐng)?bào),用apache的poi庫(kù)操作Word和Excel文件。圖5為軟件檢查數(shù)據(jù)推送和拉取情況的流程。軟件將所需數(shù)據(jù)一次讀入內(nèi)存中進(jìn)行查找,避免頻繁查詢數(shù)據(jù)庫(kù),檢查速度得到大幅提升。
地震前兆數(shù)據(jù)庫(kù)系統(tǒng)共享接口軟件主要使用了以下關(guān)鍵技術(shù):
(1)表結(jié)構(gòu)的自適應(yīng)。前兆數(shù)據(jù)庫(kù)有1000多張表,觀測(cè)數(shù)據(jù)表的結(jié)構(gòu)相似,均值產(chǎn)品表和基礎(chǔ)信息表結(jié)構(gòu)都不相同,某些基礎(chǔ)信息表含有BLOB字段。開發(fā)接口軟件時(shí)必須考慮到表的字段和類型的不同。通過(guò)讀取表的相關(guān)元數(shù)據(jù),獲得字段的名稱和類型等信息,對(duì)不同的表結(jié)構(gòu)使用相同的處理,而不是對(duì)具體的字段名和類型編程,從而實(shí)現(xiàn)表結(jié)構(gòu)的自適應(yīng)。
圖5 測(cè)項(xiàng)分量數(shù)據(jù)推送及拉取檢查
(2)接口傳輸速度的提升。接口軟件通過(guò)使用連接池、數(shù)據(jù)緩存、數(shù)據(jù)壓縮等技術(shù)減少或避免數(shù)據(jù)轉(zhuǎn)發(fā)帶來(lái)的性能損失。大部分前兆數(shù)據(jù)精度非常高,數(shù)據(jù)變化的位數(shù)少,可以達(dá)
(3)接口軟件用多線程模型響應(yīng)客戶端請(qǐng)求,增強(qiáng)了軟件的穩(wěn)定性。當(dāng)某個(gè)客戶端出錯(cuò)造成異常時(shí),不會(huì)影響到其它客戶端。經(jīng)過(guò)實(shí)際測(cè)試,接口軟件持續(xù)運(yùn)行半年沒(méi)有出現(xiàn)異常退出的情況。
以河北昌黎后土橋的磁通門儀器變化記錄水平分量的1年秒鐘值數(shù)據(jù)(數(shù)據(jù)量大約240MB)為例,對(duì)接口軟件的功能與性能進(jìn)行了測(cè)試,結(jié)果見(jiàn)表1。可以推測(cè),當(dāng)接口軟件的緩存命中率達(dá)到50%時(shí),訪問(wèn)速度與使用JDBC直連數(shù)據(jù)庫(kù)相當(dāng)。
表1 接口測(cè)試結(jié)果
開發(fā)共享接口軟件的目的是提供前兆數(shù)據(jù)的只讀訪問(wèn),同時(shí)進(jìn)行審計(jì)與控制。接口軟件主要面向2類用戶:數(shù)據(jù)同步用戶和分析預(yù)報(bào)用戶。數(shù)據(jù)同步用戶一般為遠(yuǎn)程用戶,擁有自己的前兆數(shù)據(jù)庫(kù),使用接口來(lái)獲取增量數(shù)據(jù),這類用戶適合用壓縮方式傳輸數(shù)據(jù)。截至2017年11月,中國(guó)地震局第二監(jiān)測(cè)中心等用戶通過(guò)本接口,獲取了804個(gè)地震臺(tái)站2815套觀測(cè)儀器約800GB的前兆數(shù)據(jù)。分析預(yù)報(bào)用戶在局域網(wǎng)內(nèi)使用數(shù)據(jù),數(shù)據(jù)緩存可以減弱或消除接口層的數(shù)據(jù)轉(zhuǎn)發(fā)帶來(lái)的速度影響。為慎重起見(jiàn),在經(jīng)過(guò)更嚴(yán)格的測(cè)試之前,還不能將接口軟件推廣到分析預(yù)報(bào)用戶。
接口軟件對(duì)用戶的訪問(wèn)行為進(jìn)行測(cè)項(xiàng)分量級(jí)別的細(xì)粒度記錄,通過(guò)對(duì)這些訪問(wèn)日志進(jìn)行分析,可以統(tǒng)計(jì)數(shù)據(jù)使用情況,也可以獲得用戶感興趣的熱點(diǎn)數(shù)據(jù)等,為今后數(shù)據(jù)庫(kù)系統(tǒng)優(yōu)化和數(shù)據(jù)服務(wù)提供依據(jù)。
下一步,將根據(jù)用戶反饋和接口運(yùn)行情況,對(duì)軟件進(jìn)行完善,包括增加用戶常用的訪問(wèn)類型、增強(qiáng)接口的友好性等。此外,還可以使用更經(jīng)濟(jì)的硬件資源(比如低端服務(wù)器甚至PC機(jī))來(lái)構(gòu)建分布式緩存系統(tǒng),同時(shí)優(yōu)化緩存的置換算法,提高緩存命中率,進(jìn)一步提升接口的數(shù)據(jù)傳輸速度。
Calvert K. L.,Donahoo M. J.,2009. Java TCP/IP Socket編程.周恒民,譯.北京:機(jī)械工業(yè)出版社,28—29.
Eckel B.,2007.Java編程思想.陳昊鵬,譯.北京:機(jī)械工業(yè)出版社,45—47.
權(quán)元文,2011.基于TNS的Oracle數(shù)據(jù)庫(kù)安全增強(qiáng)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).電腦編程技巧與維護(hù),(20):142—144,171.
Shaul J.,Ingram A.,2009.Oracle安全實(shí)踐.李楨,譯.北京:科學(xué)出版社,5—6.
Tanenbaum A. S.,Bo H.,2017.現(xiàn)代操作系統(tǒng).4版.陳向群,馬洪兵,譯.北京:機(jī)械工業(yè)出版社,240—245.
殷泰暉,李帥,2012.基于TNS協(xié)議的Oracle數(shù)據(jù)庫(kù)安全性改進(jìn)方法.合肥工業(yè)大學(xué)學(xué)報(bào)(自然科學(xué)版),35(2):193—196.
周克昌,蔣春花,紀(jì)壽文等,2010.地震前兆數(shù)據(jù)庫(kù)系統(tǒng)設(shè)計(jì).地震,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
王軍,李正媛,黃經(jīng)國(guó),劉春國(guó),周克昌,2018.地震前兆數(shù)據(jù)庫(kù)系統(tǒng)共享接口設(shè)計(jì)與實(shí)現(xiàn).震災(zāi)防御技術(shù),13(3):709—717.
10.11899/zzfy20180322
國(guó)家自然科學(xué)基金項(xiàng)目(41372349)
2017-12-19
王軍,男,生于1979年。工程師。主要從事地震監(jiān)測(cè)數(shù)據(jù)管理與軟件開發(fā)。E-mail:wangjun825@163.com