本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,特別涉及一種數(shù)據(jù)庫訪問方法及裝置。
背景技術(shù):
在通信、互聯(lián)網(wǎng)、計算機等領(lǐng)域,隨著處理的數(shù)據(jù)量與日俱增,目前大數(shù)據(jù)數(shù)據(jù)庫已經(jīng)得到廣泛的使用。從Oracle、Sybase IQ到Hive、Spark,越來越多的數(shù)據(jù)庫被應(yīng)用在數(shù)據(jù)庫系統(tǒng)中,成為數(shù)據(jù)庫系統(tǒng)中非常重要的一個部分,為各類數(shù)據(jù)提供了保存、查詢、分析等訪問方式。
當(dāng)數(shù)據(jù)庫系統(tǒng)需要升級,例如在數(shù)據(jù)庫系統(tǒng)中接入新的數(shù)據(jù)庫,或是替換原有的數(shù)據(jù)庫時,保證數(shù)據(jù)庫系統(tǒng)的完整性和穩(wěn)定性是對升級操作提出的一大挑戰(zhàn)。為了使數(shù)據(jù)庫系統(tǒng)能夠兼容不同種類的數(shù)據(jù)庫,目前的做法是當(dāng)在數(shù)據(jù)庫系統(tǒng)中新增一種數(shù)據(jù)庫時,需要在數(shù)據(jù)庫系統(tǒng)中新增一套與新增數(shù)據(jù)庫適配的接口,或?qū)⑴c替換前的數(shù)據(jù)庫適配的接口修改成與替換后的數(shù)據(jù)庫適配的接口,從而完成數(shù)據(jù)庫系統(tǒng)的升級。這樣不可避免地會對數(shù)據(jù)庫系統(tǒng)進行大規(guī)模的改動,從而破壞了原有系統(tǒng)的完整性,為系統(tǒng)的穩(wěn)定性埋下了隱患。
例如圖1所示,數(shù)據(jù)庫系統(tǒng)中原先僅包括數(shù)據(jù)庫Sybase IQ,CPP(C++)應(yīng)用程序通過ODBC(Open Database Connectivity,開放數(shù)據(jù)庫互連)接口訪問Sybase IQ。Sybase IQ是一種集中存儲的列式數(shù)據(jù)庫。隨著數(shù)據(jù)量越來越大,集中存儲無法滿足海量數(shù)據(jù)的存儲需求,需要在數(shù)據(jù)庫系統(tǒng)中接入一大數(shù)據(jù)數(shù)據(jù)庫Hive。然而采用ODBC接口訪問Hive不太穩(wěn)定,而采用JDBC(Java Data Base Connectivity,Java數(shù)據(jù)庫互連)接口訪問Hive是比較穩(wěn)定的。因此,CPP應(yīng)用程序訪問JDBC接口時需要增加一個CPP調(diào)用Java程序的轉(zhuǎn)接接口。CPP應(yīng)用程序既需要訪問ODBC接口,也需要訪問CPP轉(zhuǎn)JDBC接口,而這兩種接口的調(diào)用方式不一致,因此CPP應(yīng)用程序需要關(guān)注接口層的一些技術(shù)細節(jié),導(dǎo)致應(yīng)用層訪問越來越復(fù)雜。
技術(shù)實現(xiàn)要素:
有鑒于此,有必要提供一種數(shù)據(jù)庫訪問方法及裝置,可以通過獨立于數(shù)據(jù)庫系統(tǒng)的接口層訪問數(shù)據(jù)庫系統(tǒng)中各數(shù)據(jù)庫,屏蔽應(yīng)用程序?qū)Σ煌N類數(shù)據(jù)庫的訪問差異,在數(shù)據(jù)庫系統(tǒng)升級時,可以保證系統(tǒng)的穩(wěn)定性和完整性,且應(yīng)用程序無需感知,從而使應(yīng)用程序的訪問簡單化。
一種數(shù)據(jù)庫訪問方法,包括以下步驟:接收應(yīng)用程序發(fā)送的對數(shù)據(jù)庫系統(tǒng)中目標數(shù)據(jù)庫的訪問請求;從接口層中預(yù)設(shè)的各類數(shù)據(jù)庫對應(yīng)的訪問接口中選擇該目標數(shù)據(jù)庫對應(yīng)的訪問接口;根據(jù)所述訪問請求,調(diào)用所選擇的訪問接口對該目標數(shù)據(jù)庫執(zhí)行訪問操作。
一種數(shù)據(jù)庫訪問裝置,包括:接收模塊,用于接收應(yīng)用程序發(fā)送的對數(shù)據(jù)庫系統(tǒng)中目標數(shù)據(jù)庫的訪問請求;選擇模塊,用于從接口層中預(yù)設(shè)的各類數(shù)據(jù)庫對應(yīng)的訪問接口中選擇該目標數(shù)據(jù)庫對應(yīng)的訪問接口;訪問模塊,用于根據(jù)所述訪問請求,調(diào)用所選擇的訪問接口對該目標數(shù)據(jù)庫執(zhí)行訪問操作。
上述技術(shù)方案的有益效果是:數(shù)據(jù)庫訪問方法及裝置,在接收到應(yīng)用程序發(fā)送的對數(shù)據(jù)庫系統(tǒng)中目標數(shù)據(jù)庫的訪問請求時,從接口層中預(yù)設(shè)的各類數(shù)據(jù)庫對應(yīng)的訪問接口中選擇該目標數(shù)據(jù)庫對應(yīng)的訪問接口,然后根據(jù)所述訪問請求調(diào)用所選擇的訪問接口對該目標數(shù)據(jù)庫執(zhí)行訪問操作,因此可以通過獨立于數(shù)據(jù)庫系統(tǒng)的接口層訪問數(shù)據(jù)庫系統(tǒng)中各數(shù)據(jù)庫,屏蔽應(yīng)用程序?qū)Σ煌N類數(shù)據(jù)庫的訪問差異,在數(shù)據(jù)庫系統(tǒng)升級時,可以保證系統(tǒng)的穩(wěn)定性和完整性,且應(yīng)用程序無需感知,從而使應(yīng)用程序的訪問簡單化,減輕應(yīng)用程序開發(fā)的工作量。
為讓本發(fā)明的上述和其他目的、特征和優(yōu)點能更明顯易懂,下文特舉較佳實施例,并配合所附圖式,作詳細說明如下。
附圖說明
圖1為現(xiàn)有技術(shù)中數(shù)據(jù)庫系統(tǒng)升級后對數(shù)據(jù)庫的訪問方式的示例圖。
圖2為本發(fā)明第一實施例提供的數(shù)據(jù)庫訪問方法的流程圖。
圖3為本發(fā)明第一實施例提供的數(shù)據(jù)庫訪問方法的應(yīng)用示例圖。
圖4為本發(fā)明第三實施例提供的數(shù)據(jù)庫訪問方法的流程圖。
圖5為本發(fā)明第三實施例提供的數(shù)據(jù)庫訪問方法的應(yīng)用示例圖。
圖6為本發(fā)明第四實施例提供的數(shù)據(jù)庫訪問裝置的框圖。
具體實施方式
為更進一步闡述本發(fā)明為實現(xiàn)預(yù)定發(fā)明目的所采取的技術(shù)手段及功效,以下結(jié)合附圖及較佳實施例,對依據(jù)本發(fā)明的具體實施方式、結(jié)構(gòu)、特征及其功效,詳細說明如后。
第一實施例
參閱圖2所示,為本發(fā)明第一實施例提供的數(shù)據(jù)庫訪問方法的流程圖。在本實施例中,該方法包括以下步驟:
步驟S1,接收應(yīng)用程序發(fā)送的對數(shù)據(jù)庫系統(tǒng)中目標數(shù)據(jù)庫的訪問請求;
步驟S2,從接口層中預(yù)設(shè)的各類數(shù)據(jù)庫對應(yīng)的訪問接口中選擇該目標數(shù)據(jù)庫對應(yīng)的訪問接口;
步驟S3,根據(jù)所述訪問請求,調(diào)用所選擇的訪問接口對該目標數(shù)據(jù)庫執(zhí)行訪問操作。
按照上述的數(shù)據(jù)庫訪問方法,可以通過獨立于數(shù)據(jù)庫系統(tǒng)的接口層訪問數(shù)據(jù)庫系統(tǒng)中各數(shù)據(jù)庫,屏蔽應(yīng)用層對不同種類數(shù)據(jù)庫的訪問差異,在數(shù)據(jù)庫系統(tǒng)升級時,可以保證系統(tǒng)的穩(wěn)定性和完整性,且應(yīng)用程序無需感知,從而使應(yīng)用程序的訪問簡單化,減輕應(yīng)用程序開發(fā)的工作量。
在一些實例中,上述方法的各步驟的實現(xiàn)細節(jié)如下:
步驟S1所述的應(yīng)用程序例如為CPP程序、Java應(yīng)用程序等。該應(yīng)用程序為應(yīng)用層中的應(yīng)用程序之一。該應(yīng)用層中包括的一個或多個應(yīng)用程序可以通過所述接口層訪問數(shù)據(jù)庫系統(tǒng)中的各個相同種類或不同種類的數(shù)據(jù)庫。其中,該應(yīng)用層、接口層及數(shù)據(jù)庫系統(tǒng)的架構(gòu)如圖3所示。
所述接口層獨立于所述數(shù)據(jù)庫系統(tǒng)設(shè)置。該接口層中預(yù)設(shè)有各類數(shù)據(jù)庫對應(yīng)的訪問接口,該各類數(shù)據(jù)庫對應(yīng)的訪問接口根據(jù)各類數(shù)據(jù)庫的訪問特性預(yù)設(shè)和優(yōu)化,并且可以根據(jù)需要靈活地更新,例如新增某類數(shù)據(jù)庫對 應(yīng)的訪問接口,或修改某類數(shù)據(jù)庫對應(yīng)的訪問接口。具體地,在一些實例中,如圖3所示,數(shù)據(jù)庫系統(tǒng)中包括Hive、Impala、Spark SQL、Oracle和Sybase IQ五類數(shù)據(jù)庫,根據(jù)該五類數(shù)據(jù)庫的訪問特性,可以將其對應(yīng)的訪問接口預(yù)設(shè)如下:
預(yù)設(shè)Hive的訪問接口為Hive JDBC;
預(yù)設(shè)Impala的訪問接口為Impala JDBC;
預(yù)設(shè)Spark SQL的訪問接口為Hive Context;
預(yù)設(shè)Oracle的訪問接口為Oracle ODBC;及
預(yù)設(shè)Sybase IQ的訪問接口為Sybase IQ ODBC。
步驟S1所述的訪問請求例如可以是對目標數(shù)據(jù)庫中數(shù)據(jù)的查詢、保存或分析等請求。當(dāng)應(yīng)用層中的一個或多個程序需要查詢或分析目標數(shù)據(jù)庫中的數(shù)據(jù)時,或需要將數(shù)據(jù)保存至目標數(shù)據(jù)庫時,可向接口層發(fā)送所述訪問請求。
步驟S2根據(jù)所述的訪問請求,得知所需訪問的目標數(shù)據(jù)庫,從而從接口層中找出預(yù)設(shè)的該目標數(shù)據(jù)庫對應(yīng)的訪問接口。具體地,可以根據(jù)所述訪問請求獲取目標數(shù)據(jù)庫的標識,例如ID號等,并將該標識與數(shù)據(jù)庫系統(tǒng)中各個數(shù)據(jù)庫的標識進行比對,從而找出目標數(shù)據(jù)庫。
步驟S3根據(jù)所述訪問請求,調(diào)用所選擇的訪問接口對該目標數(shù)據(jù)庫執(zhí)行訪問操作。此外,步驟S3還可以調(diào)用所選擇的訪問接口獲取對目標數(shù)據(jù)庫的訪問結(jié)果,并將該訪問結(jié)果發(fā)送至所述應(yīng)用程序。具體地,例如,若該訪問請求為請求將數(shù)據(jù)保存到目標數(shù)據(jù)庫中,則調(diào)用所選擇的訪問接口將該數(shù)據(jù)庫保存至目標數(shù)據(jù)庫,所述訪問結(jié)果可以為該數(shù)據(jù)保存成功的信息。若該訪問請求為請求查詢目標數(shù)據(jù)庫中的數(shù)據(jù),則調(diào)用所選擇的訪問接口在目標數(shù)據(jù)庫中查詢該數(shù)據(jù),并將查詢得到的該數(shù)據(jù)作為訪問結(jié)果,然后通過所選擇的訪問接口獲取該訪問結(jié)果,并將該訪問結(jié)果發(fā)送至所述應(yīng)用程序。若該訪問請求為請求分析目標數(shù)據(jù)庫中的數(shù)據(jù),則調(diào)用所選擇的訪問接口在目標數(shù)據(jù)庫中分析該數(shù)據(jù),并將分析結(jié)果作為訪問結(jié)果,然后通過所選擇的訪問接口獲取該訪問結(jié)果,并將該訪問結(jié)果發(fā)送至所述應(yīng)用程序,等等。
綜上所述,通過本發(fā)明實施例提供的數(shù)據(jù)庫訪問方法,應(yīng)用層與數(shù)據(jù) 庫系統(tǒng)通過獨立于數(shù)據(jù)庫系統(tǒng)的接口層間接進行交互,可以屏蔽應(yīng)用層對不同種類數(shù)據(jù)庫的訪問差異。在數(shù)據(jù)庫系統(tǒng)升級時,例如將圖3中的Hive替換為Impala、Spark SQL,或?qū)ybase IQ替換為Oracle時,應(yīng)用層的代碼不需要修改,從而應(yīng)用層無需感知,不僅使應(yīng)用層的訪問簡單化,還可以保證系統(tǒng)的穩(wěn)定性和完整性。
第二實施例
本發(fā)明第二實施例提供一種數(shù)據(jù)庫訪問方法,其相較于第一實施例提供的數(shù)據(jù)庫訪問方法,進一步提出:
所述步驟S1中接收應(yīng)用程序發(fā)送的對數(shù)據(jù)庫系統(tǒng)中目標數(shù)據(jù)庫的訪問請求可通過編程語言無關(guān)的數(shù)據(jù)交換協(xié)議實現(xiàn)。具體地,該編程語言無關(guān)的數(shù)據(jù)交換協(xié)議可以為基于超文本傳輸協(xié)議(HTTP,HyperText Transfer Protocol)的簡單對象訪問協(xié)議(SOAP,Simple Object Access Protoco)。同樣的,所述訪問結(jié)果通過所選擇的訪問接口發(fā)送至應(yīng)用程序也通過所述編程語言無關(guān)的數(shù)據(jù)交換協(xié)議實現(xiàn)。
由于應(yīng)用層與通用接口層通過所述編程語言無關(guān)的數(shù)據(jù)交換協(xié)議,例如SOAP實現(xiàn)交互,因此應(yīng)用層的應(yīng)用程序可以為任何主流編程語言開發(fā)的應(yīng)用程序,以任意一種編程語言按照約定的SOAP訪問數(shù)據(jù)庫系統(tǒng),從而跨越編程語言,穿越防火墻。
第三實施例
參閱圖4所示,為本發(fā)明第三實施例提供的數(shù)據(jù)庫訪問方法的流程圖。在本實施例中,將第一實施例和第二實施例所述的數(shù)據(jù)庫訪問方法應(yīng)用于一種大數(shù)據(jù)數(shù)據(jù)庫(例如Hive)與傳統(tǒng)數(shù)據(jù)庫(例如Sybase IQ)整合的應(yīng)用場景。具體地,應(yīng)用層中的應(yīng)用程序通過接口層向Hive下發(fā)數(shù)據(jù)分析請求,Hive接收到該數(shù)據(jù)分析請求后,將分析結(jié)果返回給應(yīng)用層。應(yīng)用程序在接收到該分析結(jié)果后,通過接口層向Sybase IQ下發(fā)數(shù)據(jù)保存請求,Sybase IQ接收到該數(shù)據(jù)保存請求后,保存該分析結(jié)果。此外,若應(yīng)用程序再有相同的所述數(shù)據(jù)分析請求,可以直接訪問Sybase IQ,從Sybase IQ中獲取所述分析結(jié)果。其中,應(yīng)用層、接口層與Hive和Sybase IQ的架構(gòu) 示例如圖5所示。
具體而言,本實施例提供的數(shù)據(jù)庫訪問方法包括以下步驟:
步驟S11,通過SOAP接收應(yīng)用程序發(fā)送的對數(shù)據(jù)庫系統(tǒng)中Hive的數(shù)據(jù)分析請求;此時,應(yīng)用程序作為SOAP客戶端,接口層作為SOAP服務(wù)端;
步驟S12,從接口層中預(yù)設(shè)的各類數(shù)據(jù)庫對應(yīng)的訪問接口中選擇Hive對應(yīng)的Hive JDBC接口;
步驟S13,根據(jù)該數(shù)據(jù)分析請求,通過該Hive JDBC接口對Hive進行數(shù)據(jù)分析,通過Hive JDBC接口得到分析結(jié)果,并將該分析結(jié)果返回至應(yīng)用程序;
步驟S14,通過SOAP接收應(yīng)用程序發(fā)送的將所述分析結(jié)果保存至數(shù)據(jù)庫系統(tǒng)中Sybase IQ的數(shù)據(jù)保存請求;
步驟S15,從接口層中預(yù)設(shè)的各類數(shù)據(jù)庫對應(yīng)的訪問接口中選擇Sybase IQ對應(yīng)的Sybase IQ ODBC接口;
步驟S16,根據(jù)該數(shù)據(jù)保存請求,通過該Sybase IQ ODBC接口將所述分析結(jié)果保存至Sybase IQ,最終將分析結(jié)果持久化到Sybase IQ。
在本實施例中,數(shù)據(jù)庫系統(tǒng)中整合有Hive和Sybase IQ兩種數(shù)據(jù)庫,這兩種數(shù)據(jù)庫對應(yīng)的訪問接口不同,分別為Hive JDBC接口和Sybase IQ ODBC接口。然而,通過將該Hive JDBC接口和Sybase IQ ODBC接口統(tǒng)一預(yù)設(shè)在獨立的接口層中,應(yīng)用程序可以從Hive中提取數(shù)據(jù)并存放到Sybase IQ中。應(yīng)用程序與數(shù)據(jù)庫系統(tǒng)之間通過接口層間接進行交互,從而可以屏蔽應(yīng)用層對不同種類數(shù)據(jù)庫的訪問差異。對應(yīng)用層來說,所使用的是一種通用的數(shù)據(jù)庫訪問通道。
第四實施例
參閱圖6所示,本發(fā)明第四實施例提供一種數(shù)據(jù)庫訪問裝置100,其包括接收模塊101、選擇模塊102和訪問模塊103。該數(shù)據(jù)庫訪問裝置100可以嵌入或外設(shè)于所述的接口層。可以理解,上述的各模塊是指計算機程序或者程序段,用于執(zhí)行某一項或多項特定的功能。此外,上述各模塊的區(qū)分并不代表實際的程序代碼也必須是分開的。
接收模塊101,用于接收應(yīng)用程序發(fā)送的對數(shù)據(jù)庫系統(tǒng)中目標數(shù)據(jù)庫 的訪問請求。所述接收模塊101可以通過編程語言無關(guān)的數(shù)據(jù)交換協(xié)議實現(xiàn)接收應(yīng)用程序發(fā)送的對數(shù)據(jù)庫系統(tǒng)中目標數(shù)據(jù)庫的訪問請求。所述編程語言無關(guān)的數(shù)據(jù)交換協(xié)議可以為簡單對象訪問協(xié)議(SOAP)。
選擇模塊102,用于從接口層中預(yù)設(shè)的各類數(shù)據(jù)庫對應(yīng)的訪問接口中選擇該目標數(shù)據(jù)庫對應(yīng)的訪問接口。
訪問模塊103,用于根據(jù)所述訪問請求,調(diào)用所選擇的訪問接口對該目標數(shù)據(jù)庫執(zhí)行訪問操作。所述訪問模塊103還可以將訪問結(jié)果通過所選擇的訪問接口發(fā)送至所述應(yīng)用程序。
上述模塊的具體實施細節(jié)可參考本發(fā)明第一實施例和第二實施例提供的數(shù)據(jù)庫訪問方法中的描述,此處不再贅述。
本實施例提供的數(shù)據(jù)庫訪問裝置100,可以通過獨立于數(shù)據(jù)庫系統(tǒng)的接口層訪問數(shù)據(jù)庫系統(tǒng)中各數(shù)據(jù)庫,屏蔽應(yīng)用程序?qū)Σ煌N類數(shù)據(jù)庫的訪問差異,在數(shù)據(jù)庫系統(tǒng)升級時,可以保證系統(tǒng)的穩(wěn)定性和完整性,且應(yīng)用層無需感知,從而使應(yīng)用層的訪問簡單化。此外,由于應(yīng)用層與通用接口層通過所述編程語言無關(guān)的數(shù)據(jù)交換協(xié)議,因此應(yīng)用層的應(yīng)用程序可以為任何主流編程語言開發(fā)的應(yīng)用程序,以任意一種編程語言按照約定的協(xié)議訪問數(shù)據(jù)庫系統(tǒng),從而跨越編程語言,穿越防火墻。
此外,本發(fā)明實施例還提供一種計算機可讀存儲介質(zhì),其內(nèi)存儲有計算機可執(zhí)行指令,上述的計算機可讀存儲介質(zhì)例如為非易失性存儲器例如光盤、硬盤、或者閃存。上述的計算機可執(zhí)行指令用于讓計算機或者類似的運算裝置完成上述的數(shù)據(jù)庫訪問方法中的各種操作。
以上所述,僅是本發(fā)明的較佳實施例而已,并非對本發(fā)明作任何形式上的限制,雖然本發(fā)明已以較佳實施例揭示如上,然而并非用以限定本發(fā)明,任何本領(lǐng)域技術(shù)人員,在不脫離本發(fā)明技術(shù)方案范圍內(nèi),當(dāng)可利用上述揭示的技術(shù)內(nèi)容做出些許更動或修飾為等同變化的等效實施例,但凡是未脫離本發(fā)明技術(shù)方案內(nèi)容,依據(jù)本發(fā)明的技術(shù)實質(zhì)對以上實施例所作的任何簡介修改、等同變化與修飾,均仍屬于本發(fā)明技術(shù)方案的范圍內(nèi)。