本申請(qǐng)涉及互聯(lián)網(wǎng)領(lǐng)域,尤其涉及一種基于大數(shù)據(jù)的數(shù)據(jù)庫操作方法、信息處理方法和相應(yīng)裝置。
背景技術(shù):
在當(dāng)今社會(huì),各種信息會(huì)以數(shù)字化的形式被搜集、存儲(chǔ)和利用,并且隨著信息通信技術(shù)的發(fā)展,各種信息以數(shù)字化形式被存儲(chǔ)的數(shù)據(jù)量是巨大的,也就是人們常說的大數(shù)據(jù)。相應(yīng)的,基于大數(shù)據(jù)的信息處理也越來越為人們所重視,例如,基于大數(shù)據(jù),對(duì)信息進(jìn)行的有效提取和分析已經(jīng)成為互聯(lián)網(wǎng)企業(yè)獲取商業(yè)優(yōu)勢(shì)的重要環(huán)節(jié)。
基于大數(shù)據(jù)對(duì)信息進(jìn)行的有效提取和分析,通常需要從存儲(chǔ)有海量數(shù)據(jù)的數(shù)據(jù)庫或數(shù)據(jù)庫集群中查詢特定的數(shù)據(jù),將所查詢到的特定的數(shù)據(jù)作為信息處理的來源。在這種情況下,用戶往往希望以較高的靈活度來從各種維度以及各種過濾條件下,簡(jiǎn)單快速的獲取特定的數(shù)據(jù),以及這些數(shù)據(jù)進(jìn)一步所展示的信息。同時(shí),用戶希望獲取的信息,有的是能夠用數(shù)據(jù)庫或數(shù)據(jù)庫集群中已經(jīng)存在的字段直接反映的,有些是通過數(shù)據(jù)庫或數(shù)據(jù)庫集群中已有的字段合成或推導(dǎo)得出的。因此,為了獲取用戶所希望的信息,需從數(shù)據(jù)庫或數(shù)據(jù)庫集群中提取特定的數(shù)據(jù),并對(duì)特定的數(shù)據(jù)進(jìn)行進(jìn)一步的加工和展示。
另外,從數(shù)據(jù)庫或數(shù)據(jù)庫集群中查詢特定的數(shù)據(jù),常用的方法是使用SQL(結(jié)構(gòu)化查詢語言)語言對(duì)數(shù)據(jù)庫進(jìn)行操作。SQL語言作為一種高級(jí)數(shù)據(jù)庫語言,使用戶能夠忽略不同數(shù)據(jù)庫不同的底層結(jié)構(gòu),使用統(tǒng)一的結(jié)構(gòu)化查詢語言作為數(shù)據(jù)輸入與管理的接口。相應(yīng)的,目前基于大數(shù)據(jù)對(duì)信息進(jìn)行的有效提取和分析,常用的方法是基于SQL語言的數(shù)據(jù)查詢與處理。
在現(xiàn)有技術(shù)中,基于SQL語言的數(shù)據(jù)查詢與處理的常用方法包括:從數(shù)據(jù)庫或數(shù)據(jù)庫集群提取特定的數(shù)據(jù),并對(duì)這些數(shù)據(jù)使用JAVA(面向?qū)ο蟮某绦蛟O(shè)計(jì)語言)語言進(jìn)行邏輯處理,從而獲取用戶所希望的信息;或者,在將各種信息以數(shù)字化形式被存儲(chǔ)時(shí),對(duì)這些信息對(duì)應(yīng)的數(shù)字化形式的數(shù)據(jù),以用戶希望得到的信息為依據(jù)進(jìn)行組合或推導(dǎo)等邏輯處理,然后將這些信息對(duì)應(yīng)的數(shù)字化形式的數(shù)據(jù),以及經(jīng)過組合或推導(dǎo)等邏輯處理得到的數(shù)據(jù)組織并存儲(chǔ)至數(shù)據(jù)庫 或數(shù)據(jù)庫集群中。
如上所述的第一種方法,有以下缺點(diǎn):
1、需要針對(duì)用戶具體的信息獲取需求進(jìn)行開發(fā),對(duì)于從各種維度以及各種過濾條件下獲取特定的數(shù)據(jù),以及獲取這些數(shù)據(jù)進(jìn)一步所展示的信息的角度來看,靈活度不高,開發(fā)工作量較大,開發(fā)周期長(zhǎng),不能及時(shí)獲取用戶所需信息。
2、對(duì)于不同的信息獲取需求,或不同的數(shù)據(jù)庫系統(tǒng),代碼無法進(jìn)行復(fù)用,可移植性差。
3、大量使用JAVA語言時(shí),在處理較大數(shù)據(jù)量的時(shí)候,效率較低。
如上所述的第二種方法,有以下缺點(diǎn):
在將數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)庫或數(shù)據(jù)庫集群的過程中,需對(duì)數(shù)據(jù)進(jìn)行邏輯處理,對(duì)于不同的數(shù)據(jù)源,即不同的原始信息,需要進(jìn)行具體的邏輯處理相關(guān)的開發(fā),且若數(shù)據(jù)源發(fā)生變化則需要修改或重新開發(fā)邏輯處理代碼,導(dǎo)致靈活度不高,可移植性差,開發(fā)工作量大,開發(fā)周期長(zhǎng),不能及時(shí)獲取用戶所需信息。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)?zhí)峁┮环N數(shù)據(jù)庫操作方法、信息處理方法和相應(yīng)裝置,以解決現(xiàn)有的基于大數(shù)據(jù)背景下實(shí)時(shí)更新方法對(duì)物理設(shè)備性能要求高、計(jì)算實(shí)時(shí)性差、資源占有率高和不具備擴(kuò)展性的問題。
為解決上述技術(shù)問題,本申請(qǐng)?zhí)峁┝艘环N數(shù)據(jù)庫操作方法,包括:
讀取預(yù)先設(shè)置的對(duì)特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的數(shù)據(jù)庫操作指令實(shí)例,所述數(shù)據(jù)庫操作指令實(shí)例為與SQL語言基本指令對(duì)應(yīng)的語義單元組成的集合;其中,所述數(shù)據(jù)庫操作指令實(shí)例包含的指令參數(shù)為具有邏輯語義功能的代碼模塊;
根據(jù)預(yù)先設(shè)置的文法規(guī)則,獲取與所述數(shù)據(jù)庫操作指令實(shí)例對(duì)應(yīng)的基于所述SQL語言基本指令的所述語義單元;其中,所述語義單元包含所述SQL語言基本指令關(guān)鍵字,以及對(duì)應(yīng)各個(gè)基本指令的所述指令參數(shù);
以所述語義單元為節(jié)點(diǎn)單元,并依據(jù)所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的表字段,生成與所述數(shù)據(jù)庫操作指令實(shí)例對(duì)應(yīng)的語法樹;
根據(jù)所述語法樹,將所述數(shù)據(jù)庫操作指令實(shí)例翻譯為對(duì)應(yīng)于所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的標(biāo)準(zhǔn)SQL操作指令;
執(zhí)行所述標(biāo)準(zhǔn)SQL操作指令,并獲取所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的返回 數(shù)據(jù)。
可選的,所述預(yù)先設(shè)置的對(duì)特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的數(shù)據(jù)庫操作指令實(shí)例包括:
基于SQL語言文法規(guī)則,設(shè)置與SQL語言基本指令對(duì)應(yīng)的指令關(guān)鍵字;
基于JAVA語法、velocity模板語言,以及已封裝的能由JAVA引擎解釋和執(zhí)行的自定義函數(shù),設(shè)置所述指令關(guān)鍵字對(duì)應(yīng)的指令參數(shù);
相應(yīng)的,所述的所述數(shù)據(jù)庫操作指令實(shí)例包含的指令參數(shù)為具有邏輯語義功能的代碼模塊,具體是指所述數(shù)據(jù)庫操作指令實(shí)例包含的指令參數(shù)至少包括以下具有邏輯語義功能的代碼模塊中的一種:
由JAVA語言組成的具有邏輯語義功能的語句模塊;
基于JAVA語言或基于其他語言且能由JAVA引擎解釋和執(zhí)行的自定義函數(shù);
由velocity模板語言組成的具有邏輯語義功能的語句模塊;
基于velocity模板語言的具有邏輯語義功能的模板文件。
可選的,所述具有邏輯語義功能的代碼模塊,具有傳入外部用戶參數(shù)的功能。
可選的,在執(zhí)行所述根據(jù)預(yù)先設(shè)置的文法規(guī)則,獲取與所述數(shù)據(jù)庫操作指令實(shí)例對(duì)應(yīng)的基于所述SQL語言基本指令的所述語義單元的步驟前,執(zhí)行以下步驟:
判斷在所述指令參數(shù)中,由velocity模板語言組成的具有邏輯語義功能的語句模塊,和/或基于velocity模板語言的具有邏輯語義功能的模板文件,是否包含輸入?yún)?shù);
若包含,則根據(jù)所述輸入?yún)?shù)及所述邏輯語義關(guān)系,確定與所述由velocity模板語言組成的具有邏輯語義功能的語句模塊,和/或所述基于velocity模板語言的具有邏輯語義功能的模板文件對(duì)應(yīng)的具有固定語義功能的代碼模塊;
若不包含,則根據(jù)所述邏輯語義關(guān)系,確定與所述由velocity模板語言組成的具有邏輯語義功能的語句模塊,和/或所述基于velocity模板語言的具有邏輯語義功能的模板文件對(duì)應(yīng)的具有固定語義功能的代碼模塊。
可選的,所述預(yù)先設(shè)置的文法規(guī)則包括:SQL文法規(guī)則和JAVA代碼文法規(guī) 則。
可選的,所述以所述語義單元為節(jié)點(diǎn)單元,并依據(jù)所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的表字段,生成與所述數(shù)據(jù)庫操作指令實(shí)例對(duì)應(yīng)的語法樹,包括:
將所述語義單元中的所述SQL語言基本指令關(guān)鍵字作為主節(jié)點(diǎn)標(biāo)識(shí),且所述主節(jié)點(diǎn)標(biāo)識(shí)能夠標(biāo)識(shí)所述語義單元的內(nèi)容;
根據(jù)所述主節(jié)點(diǎn)標(biāo)識(shí),并依據(jù)所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的表字段,對(duì)所述主節(jié)點(diǎn)依賴的所述指令參數(shù)進(jìn)行節(jié)點(diǎn)依賴關(guān)系的遞歸識(shí)別;
根據(jù)所述遞歸識(shí)別的結(jié)果,設(shè)置子節(jié)點(diǎn)。
可選的,所述根據(jù)所述主節(jié)點(diǎn)標(biāo)識(shí),并依據(jù)所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的表字段,對(duì)所述主節(jié)點(diǎn)依賴的所述指令參數(shù)進(jìn)行節(jié)點(diǎn)依賴關(guān)系的遞歸識(shí)別,包括:
根據(jù)JAVA代碼文法規(guī)則將所述主節(jié)點(diǎn)標(biāo)識(shí)對(duì)應(yīng)的語義單元進(jìn)行內(nèi)容碎片化處理;
根據(jù)所述內(nèi)容碎片化處理結(jié)果,獲取與所述主節(jié)點(diǎn)對(duì)應(yīng)的節(jié)點(diǎn)依賴關(guān)系和依賴字段;
將所述依賴字段與所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群中的表字段進(jìn)行字段匹配;
根據(jù)匹配結(jié)果,將匹配上的所述依賴字段標(biāo)識(shí)為目標(biāo)子節(jié)點(diǎn),未匹配上的所述依賴字段標(biāo)識(shí)為普通子節(jié)點(diǎn)。
可選的,所述根據(jù)JAVA代碼文法規(guī)則將所述主節(jié)點(diǎn)標(biāo)識(shí)對(duì)應(yīng)的語義單元進(jìn)行內(nèi)容碎片化處理,具體是指根據(jù)JAVA代碼文法規(guī)則,將所述主節(jié)點(diǎn)標(biāo)識(shí)對(duì)應(yīng)的語義單元分解為具體的關(guān)鍵字、對(duì)象、類、變量、方法等,進(jìn)而識(shí)別其中的變量,以及變量間的依賴關(guān)系;
所述根據(jù)所述內(nèi)容碎片化處理結(jié)果,獲取與所述主節(jié)點(diǎn)對(duì)應(yīng)的節(jié)點(diǎn)依賴關(guān)系和依賴字段,具體是指根據(jù)所述內(nèi)容碎片化處理結(jié)果中的變量,以及變量間的依賴關(guān)系生成與所述主節(jié)點(diǎn)對(duì)應(yīng)的節(jié)點(diǎn)依賴樹;其中,所述節(jié)點(diǎn)依賴樹的各節(jié)點(diǎn)為所述內(nèi)容碎片化處理結(jié)果中的變量,且所述節(jié)點(diǎn)依賴樹的拓?fù)浣Y(jié)構(gòu)對(duì)應(yīng)于各變量間自上而下的依賴關(guān)系。
可選的,所述根據(jù)所述語法樹,將所述數(shù)據(jù)庫操作指令實(shí)例翻譯為對(duì)應(yīng)于所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的標(biāo)準(zhǔn)SQL操作指令,包括:
根據(jù)所述語法樹,獲取與所述數(shù)據(jù)庫操作指令實(shí)例對(duì)應(yīng)的基于SQL語言的指令單元;其中,所述指令單元的關(guān)鍵字為所述語法樹的主節(jié)點(diǎn),所述指令單元的參數(shù)為所述主節(jié)點(diǎn)下的子節(jié)點(diǎn);
基于SQL語言文法規(guī)則,將獲取的各所述指令單元進(jìn)行拼接,以便獲取完整的對(duì)應(yīng)于所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的標(biāo)準(zhǔn)SQL操作指令。
可選的,在執(zhí)行所述標(biāo)準(zhǔn)SQL操作指令,并獲取所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的返回?cái)?shù)據(jù)的步驟后,執(zhí)行以下步驟:
根據(jù)特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的返回結(jié)果,對(duì)所述語法樹各主節(jié)點(diǎn)對(duì)應(yīng)的所述語義單元中包含的具有邏輯語義功能的代碼模塊進(jìn)行相應(yīng)的邏輯處理;
獲取與所述節(jié)點(diǎn)依賴樹中各節(jié)點(diǎn)對(duì)應(yīng)的變量。
可選的,所述根據(jù)特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的返回結(jié)果,對(duì)所述語法樹各主節(jié)點(diǎn)對(duì)應(yīng)的所述語義單元中包含的具有邏輯語義功能的代碼模塊進(jìn)行相應(yīng)的邏輯處理,包括以下情況之一或組合:
將所述返回?cái)?shù)據(jù)代入所述數(shù)據(jù)庫操作指令實(shí)例中具有邏輯語義功能的JAVA類型代碼模塊,進(jìn)行相應(yīng)的邏輯處理;
將所述返回?cái)?shù)據(jù)代入所述數(shù)據(jù)庫操作指令實(shí)例中具有邏輯語義功能的所述自定義函數(shù),進(jìn)行相應(yīng)的邏輯處理;
將所述返回?cái)?shù)據(jù)代入所述數(shù)據(jù)庫操作指令實(shí)例中具有邏輯語義功能的velocity模板語言對(duì)應(yīng)的語句模塊,進(jìn)行相應(yīng)的邏輯處理;
將所述返回?cái)?shù)據(jù)代入所述數(shù)據(jù)庫操作指令實(shí)例中具有邏輯語義功能的velocity模板語言對(duì)應(yīng)的模板文件,進(jìn)行相應(yīng)的邏輯處理。
相應(yīng)的,本申請(qǐng)還提供一種信息處理方法,包括:
接收用戶發(fā)送的基于特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的數(shù)據(jù)提取請(qǐng)求;
根據(jù)所述數(shù)據(jù)提取請(qǐng)求,設(shè)置相應(yīng)的數(shù)據(jù)庫操作指令實(shí)例;其中,所述數(shù)據(jù)庫操作指令實(shí)例包括具體的指令關(guān)鍵字,以及與各所述具體的指令關(guān)鍵字對(duì)應(yīng)的具有邏輯語義功能的指令參數(shù);
根據(jù)預(yù)先設(shè)置的文法規(guī)則,生成與所述數(shù)據(jù)庫指令實(shí)例對(duì)應(yīng)的語法樹;
根據(jù)所述語法樹,將所述數(shù)據(jù)庫操作指令實(shí)例翻譯為對(duì)應(yīng)于所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的標(biāo)準(zhǔn)SQL操作指令;
執(zhí)行所述標(biāo)準(zhǔn)SQL操作指令,并獲取所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的返回?cái)?shù)據(jù);
對(duì)所述特定的數(shù)據(jù)庫或數(shù)據(jù)庫集群返回的數(shù)據(jù)進(jìn)行相應(yīng)的邏輯語義加工,進(jìn)而提取與所述數(shù)據(jù)提取請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)。
可選的,所述相應(yīng)的數(shù)據(jù)庫操作指令實(shí)例包括:
基于SQL語言文法規(guī)則,設(shè)置與SQL語言基本指令對(duì)應(yīng)的指令關(guān)鍵字;
基于JAVA語法、velocity模板語言,以及已封裝的能由JAVA引擎解釋和執(zhí)行的自定義函數(shù),設(shè)置與所述指令關(guān)鍵字對(duì)應(yīng)的具有邏輯語義功能的指令參數(shù);
其中,所述指令關(guān)鍵字對(duì)應(yīng)的具有邏輯語義功能的指令參數(shù)至少包括以下具有邏輯語義功能的代碼模塊中的一種:
由JAVA語言組成的具有邏輯語義功能的語句模塊;
基于JAVA語言或基于其他語言且能由JAVA引擎解釋和執(zhí)行的自定義函數(shù);
由velocity模板語言組成的具有邏輯語義功能的語句模塊;
基于velocity模板語言的具有邏輯語義功能的模板文件。
相應(yīng)的,本申請(qǐng)還提供一種數(shù)據(jù)庫操作裝置,包括:
讀取數(shù)據(jù)庫操作指令實(shí)例單元,用于讀取預(yù)先設(shè)置的對(duì)特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的數(shù)據(jù)庫操作指令實(shí)例,所述數(shù)據(jù)庫操作指令實(shí)例為與SQL語言基本指令對(duì)應(yīng)的語義單元組成的集合;其中,所述數(shù)據(jù)庫操作指令實(shí)例包含的指令參數(shù)為具有邏輯語義功能的代碼模塊;
獲取語義單元的單元,用于根據(jù)預(yù)先設(shè)置的文法規(guī)則,獲取與所述數(shù)據(jù)庫操作指令實(shí)例對(duì)應(yīng)的基于所述SQL語言基本指令的所述語義單元;其中,所述語義單元包含所述SQL語言基本指令關(guān)鍵字,以及對(duì)應(yīng)各個(gè)基本指令的所述指令參數(shù);
生成語法樹單元,用于以所述語義單元為節(jié)點(diǎn)單元,并依據(jù)所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的表字段,生成與所述數(shù)據(jù)庫操作指令實(shí)例對(duì)應(yīng)的語法樹;
翻譯單元,用于根據(jù)所述語法樹,將所述數(shù)據(jù)庫操作指令實(shí)例翻譯為對(duì)應(yīng)于所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的標(biāo)準(zhǔn)SQL操作指令;
執(zhí)行單元,用于執(zhí)行所述標(biāo)準(zhǔn)SQL操作指令,并獲取所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的返回?cái)?shù)據(jù)。
可選的,在所述讀取數(shù)據(jù)庫操作指令實(shí)例單元中,所述預(yù)先設(shè)置的對(duì)特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的數(shù)據(jù)庫操作指令實(shí)例包括:
基于SQL語言文法規(guī)則,設(shè)置與SQL語言基本指令對(duì)應(yīng)的指令關(guān)鍵字;
基于JAVA語法、velocity模板語言,以及已封裝的能由JAVA引擎解釋和執(zhí)行的自定義函數(shù),設(shè)置所述指令關(guān)鍵字對(duì)應(yīng)的指令參數(shù);
相應(yīng)的,所述的所述數(shù)據(jù)庫操作指令實(shí)例包含的指令參數(shù)為具有邏輯語義功能的代碼模塊,具體是指所述數(shù)據(jù)庫操作指令實(shí)例包含的指令參數(shù)至少包括以下具有邏輯語義功能的代碼模塊中的一種:
由JAVA語言組成的具有邏輯語義功能的語句模塊;
基于JAVA語言或基于其他語言且能由JAVA引擎解釋和執(zhí)行的自定義函數(shù);
由velocity模板語言組成的具有邏輯語義功能的語句模塊;
基于velocity模板語言的具有邏輯語義功能的模板文件。
相應(yīng)的,本申請(qǐng)還提供一種信息處理裝置,所述信息處理裝置,包括:
數(shù)據(jù)提取請(qǐng)求接收單元,用于接收用戶發(fā)送的基于特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的數(shù)據(jù)提取請(qǐng)求;
設(shè)置數(shù)據(jù)庫操作指令實(shí)例單元,用于根據(jù)所述數(shù)據(jù)提取請(qǐng)求,設(shè)置相應(yīng)的數(shù)據(jù)庫操作指令實(shí)例;其中,所述數(shù)據(jù)庫操作指令實(shí)例包括具體的指令關(guān)鍵字,以及與各所述具體的指令關(guān)鍵字對(duì)應(yīng)的具有邏輯語義功能的指令參數(shù);
生成語法樹單元,用于根據(jù)預(yù)先設(shè)置的文法規(guī)則,生成與所述數(shù)據(jù)庫指令實(shí)例對(duì)應(yīng)的語法樹;
翻譯單元,用于根據(jù)所述語法樹,將所述數(shù)據(jù)庫操作指令實(shí)例翻譯為對(duì)應(yīng)于所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的標(biāo)準(zhǔn)SQL操作指令;
執(zhí)行單元,用于執(zhí)行所述標(biāo)準(zhǔn)SQL操作指令,并獲取所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的返回?cái)?shù)據(jù);
邏輯語義加工單元,用于對(duì)所述特定的數(shù)據(jù)庫或數(shù)據(jù)庫集群返回的數(shù)據(jù)進(jìn)行相應(yīng)的邏輯。
可選的,在所述設(shè)置數(shù)據(jù)庫操作指令實(shí)例單元中,所述相應(yīng)的數(shù)據(jù)庫操作指令實(shí)例包括:
基于SQL語言文法規(guī)則,設(shè)置與SQL語言基本指令對(duì)應(yīng)的指令關(guān)鍵字;
基于JAVA語法、velocity模板語言,以及已封裝的能由JAVA引擎解釋和執(zhí)行的自定義函數(shù),設(shè)置與所述指令關(guān)鍵字對(duì)應(yīng)的具有邏輯語義功能的指令參數(shù);
其中,所述指令關(guān)鍵字對(duì)應(yīng)的具有邏輯語義功能的指令參數(shù)至少包括以下具有邏輯語義功能的代碼模塊中的一種:
由JAVA語言組成的具有邏輯語義功能的語句模塊;
基于JAVA語言或基于其他語言且能由JAVA引擎解釋和執(zhí)行的自定義函數(shù);
由velocity模板語言組成的具有邏輯語義功能的語句模塊;
基于velocity模板語言的具有邏輯語義功能的模板文件。
相應(yīng)的,本申請(qǐng)還提供一種電子設(shè)備,包括:
顯示器;
處理器;以及
存儲(chǔ)器,所述存儲(chǔ)器被配置成存儲(chǔ)數(shù)據(jù)庫操作裝置,和/或信息處理裝置,
所述數(shù)據(jù)庫操作裝置被所述處理器執(zhí)行時(shí),執(zhí)行如下步驟:
讀取預(yù)先設(shè)置的對(duì)特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的數(shù)據(jù)庫操作指令實(shí)例,所述數(shù)據(jù)庫操作指令實(shí)例為與SQL語言基本指令對(duì)應(yīng)的語義單元組成的集合;其中,所述數(shù)據(jù)庫操作指令實(shí)例包含的指令參數(shù)為具有邏輯語義功能的代碼模塊;
根據(jù)預(yù)先設(shè)置的文法規(guī)則,獲取與所述數(shù)據(jù)庫操作指令實(shí)例對(duì)應(yīng)的基于所述SQL語言基本指令的所述語義單元;其中,所述語義單元包含所述SQL語言基本指令關(guān)鍵字,以及對(duì)應(yīng)各個(gè)基本指令的所述指令參數(shù);
以所述語義單元為節(jié)點(diǎn)單元,并依據(jù)所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的表字段,生成與所述數(shù)據(jù)庫操作指令實(shí)例對(duì)應(yīng)的語法樹;
根據(jù)所述語法樹,將所述數(shù)據(jù)庫操作指令實(shí)例翻譯為對(duì)應(yīng)于所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的標(biāo)準(zhǔn)SQL操作指令;
執(zhí)行所述標(biāo)準(zhǔn)SQL操作指令,并獲取所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的返回 數(shù)據(jù);
所述信息處理裝置被所述處理器執(zhí)行時(shí),執(zhí)行如下步驟:
接收用戶發(fā)送的基于特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的數(shù)據(jù)提取請(qǐng)求;
根據(jù)所述數(shù)據(jù)提取請(qǐng)求,設(shè)置相應(yīng)的數(shù)據(jù)庫操作指令實(shí)例;其中,所述數(shù)據(jù)庫操作指令實(shí)例包括具體的指令關(guān)鍵字,以及與各所述具體的指令關(guān)鍵字對(duì)應(yīng)的具有邏輯語義功能的指令參數(shù);
根據(jù)預(yù)先設(shè)置的文法規(guī)則,生成與所述數(shù)據(jù)庫指令實(shí)例對(duì)應(yīng)的語法樹;
根據(jù)所述語法樹,將所述數(shù)據(jù)庫操作指令實(shí)例翻譯為對(duì)應(yīng)于所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的標(biāo)準(zhǔn)SQL操作指令;
執(zhí)行所述標(biāo)準(zhǔn)SQL操作指令,并獲取所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的返回?cái)?shù)據(jù);
對(duì)所述特定的數(shù)據(jù)庫或數(shù)據(jù)庫集群返回的數(shù)據(jù)進(jìn)行相應(yīng)的邏輯語義加工,進(jìn)而提取與所述數(shù)據(jù)提取請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)。本申請(qǐng)?zhí)峁┑臄?shù)據(jù)庫操作方法,讀取預(yù)先設(shè)置的對(duì)特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的數(shù)據(jù)庫操作指令實(shí)例,所述數(shù)據(jù)庫操作指令實(shí)例為與SQL語言基本指令對(duì)應(yīng)的語義單元組成的集合;其中,所述數(shù)據(jù)庫操作指令實(shí)例包含的指令參數(shù)為具有邏輯語義功能的代碼模塊;根據(jù)預(yù)先設(shè)置的文法規(guī)則,獲取與所述數(shù)據(jù)庫操作指令實(shí)例對(duì)應(yīng)的基于所述SQL語言基本指令的所述語義單元;以所述語義單元為節(jié)點(diǎn)單元,并依據(jù)所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的表字段,生成與所述數(shù)據(jù)庫操作指令實(shí)例對(duì)應(yīng)的語法樹;根據(jù)所述語法樹,將所述數(shù)據(jù)庫操作指令實(shí)例翻譯為對(duì)應(yīng)于所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的標(biāo)準(zhǔn)SQL操作指令;執(zhí)行所述標(biāo)準(zhǔn)SQL操作指令,并獲取所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的返回?cái)?shù)據(jù)。這種方法應(yīng)用在大數(shù)據(jù)上,由于該方法的各指令單元基于SQL語言,代碼書寫結(jié)構(gòu)簡(jiǎn)潔清晰,從而使得用戶可以對(duì)特定數(shù)據(jù)庫或數(shù)據(jù)庫集群使用一種簡(jiǎn)單的操作方法,快速獲取用戶所需的特定信息。另外,可以靈活的設(shè)置具有邏輯處理功能的模塊,且可以用JAVA語言、velocity(基于JAVA的模板引擎)模板語言,以及能由JAVA引擎解釋和執(zhí)行的自定義函數(shù),使得用戶在從各種維度以及各種過濾條件下獲取特定數(shù)據(jù)時(shí),靈活度較高,且代碼具有較好的可移植性,減少了開發(fā)工作量,縮短了開發(fā)周期。同時(shí),由于velocity模板語言的使用,使得在處理較大數(shù)據(jù)量的時(shí)候,效率較現(xiàn)有技術(shù)的方式大大提高。
附圖說明
圖1是本申請(qǐng)第一實(shí)施例提供的數(shù)據(jù)庫操作方法的流程示意圖;
圖2是第一實(shí)施例中對(duì)基于velocity模板語言的邏輯語義功能模塊進(jìn)行處理的步驟的具體實(shí)施方式的流程圖;
圖3是第一實(shí)施例中生成語法樹的步驟的具體實(shí)施方式的流程圖;
圖4是本申請(qǐng)第二實(shí)施例提供的信息處理方法的流程示意圖;
圖5是本申請(qǐng)第三實(shí)施例提供的一種數(shù)據(jù)庫操作裝置的示意圖;
圖6是本申請(qǐng)第四實(shí)施例提供的一種信息處理裝置的示意圖;
圖7是本申請(qǐng)實(shí)施例提供的一種電子設(shè)備的示意圖。
具體實(shí)施方式
在下面的描述中闡述了很多具體細(xì)節(jié)以便于充分理解本申請(qǐng)。但是本申請(qǐng)能夠以很多不同于在此描述的其它方式來實(shí)施,本領(lǐng)域技術(shù)人員可以在不違背本申請(qǐng)內(nèi)涵的情況下做類似推廣,因此本申請(qǐng)不受下面公開的具體實(shí)施的限制。
在本申請(qǐng)中,分別提供了一種數(shù)據(jù)庫操作方法、信息處理方法和相應(yīng)裝置,在下面的實(shí)施例中逐一進(jìn)行詳細(xì)說明。
請(qǐng)參考圖1,其為本申請(qǐng)第一實(shí)施例提供的數(shù)據(jù)庫操作方法的流程示意圖。
所述方法包括如下步驟:
步驟S101:讀取預(yù)先設(shè)置的對(duì)特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的數(shù)據(jù)庫操作指令實(shí)例,所述數(shù)據(jù)庫操作指令實(shí)例為與SQL語言基本指令對(duì)應(yīng)的語義單元組成的集合;其中,所述數(shù)據(jù)庫操作指令實(shí)例包含的指令參數(shù)為具有邏輯語義功能的代碼模塊。
本申請(qǐng)的內(nèi)容,主要涉及基于大數(shù)據(jù)所進(jìn)行的信息處理,信息處理所依據(jù)的信息來源主要是指從特定數(shù)據(jù)庫或數(shù)據(jù)庫集群中獲取的特定數(shù)據(jù)。而這些數(shù)據(jù)庫或數(shù)據(jù)庫集群中的數(shù)據(jù)可能會(huì)存在復(fù)雜的關(guān)系,并且其中的某些數(shù)據(jù)依據(jù)相互間復(fù)雜的關(guān)系能夠推導(dǎo)出特定的信息。因此本申請(qǐng)的第一實(shí)施例,主要涉及從存儲(chǔ)大數(shù)據(jù)的特定數(shù)據(jù)庫或數(shù)據(jù)庫集群獲取特定數(shù)據(jù)的方法。
在進(jìn)行大數(shù)據(jù)分析時(shí),最主要的訴求是依據(jù)特定數(shù)據(jù)庫或數(shù)據(jù)庫集群中的數(shù)據(jù),簡(jiǎn)單靈活的從各種維度或各種過濾條件下獲取特定數(shù)據(jù),進(jìn)而獲取特定的信息。這里所說的簡(jiǎn)單靈活的從各種維度或各種過濾條件下獲取特定數(shù)據(jù), 具體來說,是指能夠以簡(jiǎn)單的方式設(shè)置特定的具有邏輯語義功能的條件,并獲取符合這些條件的數(shù)據(jù)。因此本實(shí)施例的出發(fā)點(diǎn)是設(shè)置對(duì)特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的數(shù)據(jù)庫操作指令實(shí)例,該數(shù)據(jù)庫操作指令實(shí)例既要設(shè)置方法簡(jiǎn)單,又要包括設(shè)置邏輯語義的功能。
在本實(shí)施例中,上述預(yù)先設(shè)置的對(duì)特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的數(shù)據(jù)庫操作指令實(shí)例包括:
101-1:基于SQL語言文法規(guī)則,設(shè)置與SQL語言基本指令對(duì)應(yīng)的指令關(guān)鍵字;
101-2:基于JAVA語法、velocity模板語言,以及已封裝的能由JAVA引擎解釋和執(zhí)行的自定義函數(shù),設(shè)置所述指令關(guān)鍵字對(duì)應(yīng)的指令參數(shù)。
相應(yīng)的,所述的所述數(shù)據(jù)庫操作指令實(shí)例包含的指令參數(shù)為具有邏輯語義功能的代碼模塊,具體是指所述數(shù)據(jù)庫操作指令實(shí)例包含的指令參數(shù)至少包括以下具有邏輯語義功能的代碼模塊中的一種:
由JAVA語言組成的具有邏輯語義功能的語句模塊;
基于JAVA語言或基于其他語言且能由JAVA引擎解釋和執(zhí)行的自定義函數(shù);
由velocity模板語言組成的具有邏輯語義功能的語句模塊;
基于velocity模板語言的具有邏輯語義功能的模板文件。
其中,上述具有邏輯語義功能的代碼模塊,具有傳入外部用戶參數(shù)的功能。
在本實(shí)施例中,以如下數(shù)據(jù)庫操作指令實(shí)例的樣例進(jìn)行具體說明。
以上樣例,僅為數(shù)據(jù)庫操作指令實(shí)例的主要功能的書寫格式,僅以此說明本實(shí)施例的實(shí)現(xiàn)方法,不代表具體的完整代碼。
在上述樣例中,以“select”、“from”、“where”、“group by”、“order by”作為與SQL語言基本指令對(duì)應(yīng)的指令關(guān)鍵字,并分別以定義函數(shù)“sumBy”和“getIndCatNameById”、JAVA語句模塊,以及velocity語句模塊這些具有邏輯語義功能的模塊作為指令關(guān)鍵字對(duì)應(yīng)的指令參數(shù)。在這些具有邏輯語義功能的模塊中分別具有外部用戶參數(shù)傳入,并依據(jù)外部用戶參數(shù)以及數(shù)據(jù)庫或數(shù)據(jù)庫集群中的表字段,獲取用戶希望設(shè)置的過濾條件,或者獲取用戶希望獲取的原本在數(shù)據(jù)庫或數(shù)據(jù)集群中不存在的虛擬變量,進(jìn)而根據(jù)這些過濾條件以及這些虛擬變量得到特定的信息。
由于velocity模板語言的引入,需要在對(duì)上述數(shù)據(jù)庫操作指令實(shí)例執(zhí)行文法分析前,對(duì)基于velocity模板語言的邏輯語義功能模塊進(jìn)行處理。圖2為第一實(shí)施例中對(duì)基于velocity模板語言的邏輯語義功能模塊進(jìn)行處理的步驟的具體實(shí)施方式的流程圖,具體步驟為:
步驟S201:判斷在所述指令參數(shù)中,由velocity模板語言組成的具有邏輯語義功能的語句模塊,和/或基于velocity模板語言的具有邏輯語義功能的模板文件,是否包含輸入?yún)?shù)。
步驟S202:若包含,則根據(jù)所述輸入?yún)?shù)及所述邏輯語義關(guān)系,確定與所述由velocity模板語言組成的具有邏輯語義功能的語句模塊,和/或所述基于velocity模板語言的具有邏輯語義功能的模板文件對(duì)應(yīng)的具有固定語義功能的代碼模塊。
步驟S203:若不包含,則根據(jù)所述邏輯語義關(guān)系,確定與所述由velocity模板語言組成的具有邏輯語義功能的語句模塊,和/或所述基于velocity模板語言的具有邏輯語義功能的模板文件對(duì)應(yīng)的具有固定語義功能的代碼模塊。
在本實(shí)施例中,通過啟動(dòng)velocity引擎來實(shí)施步驟S201至步驟S203。經(jīng)過velocity引擎的處理,依據(jù)外部用戶參數(shù)以及邏輯語義處理,進(jìn)一步確定上述數(shù)據(jù)庫操作指令實(shí)例的指令參數(shù)結(jié)構(gòu)。例如,在上述樣例中,經(jīng)過velocity引擎處理,若stock_num_1_15變量存在,則“where#genWhere()”進(jìn)一步確定為:“where 1=1and stock_num_1_15>xxx”,其中xxx為stock_num_1_15變量的值;若stock_num_1_15變量不存在,則“where#genWhere()”進(jìn)一步確定為:“where1=1”。由此,通過定義外部用戶參數(shù)stock_num_1_15,就可以使用戶靈活的設(shè)置過濾條件對(duì)特定數(shù)據(jù)庫或數(shù)據(jù)庫集群進(jìn)行特定數(shù)據(jù)的提取。
步驟S102:根據(jù)預(yù)先設(shè)置的文法規(guī)則,獲取與所述數(shù)據(jù)庫操作指令實(shí)例對(duì)應(yīng)的基于所述SQL語言基本指令的所述語義單元;其中,所述語義單元包含所述SQL語言基本指令關(guān)鍵字,以及對(duì)應(yīng)各個(gè)基本指令的所述指令參數(shù)。
經(jīng)過velocity引擎的處理,還需要對(duì)上述數(shù)據(jù)庫操作指令實(shí)例中的指令關(guān)鍵字,以及其它具有邏輯語義功能的模塊進(jìn)行分析。
在本實(shí)施例中,上述預(yù)先設(shè)置的文法規(guī)則包括:SQL文法規(guī)則和JAVA代碼文法規(guī)則。
以上述樣例為例,根據(jù)預(yù)先設(shè)置的文法規(guī)則,上述樣例被解析為以“select”、“from”、“where”、“group by”和“order by”這些關(guān)鍵字劃分所得的語義單元。
步驟S103:以所述語義單元為節(jié)點(diǎn)單元,并依據(jù)所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的表字段,生成與所述數(shù)據(jù)庫操作指令實(shí)例對(duì)應(yīng)的語法樹。
圖3為第一實(shí)施例中生成語法樹的步驟的具體實(shí)施方式的流程圖。具體步驟為:
步驟S301:將所述語義單元中的所述SQL語言基本指令關(guān)鍵字作為主節(jié)點(diǎn)標(biāo)識(shí),且所述主節(jié)點(diǎn)標(biāo)識(shí)能夠標(biāo)識(shí)所述語義單元的內(nèi)容。
例如,對(duì)于本實(shí)施例中的上述樣例,以關(guān)鍵字“select”、“from”、“where”、“group by”和“order by”這些關(guān)鍵字作為主節(jié)點(diǎn)標(biāo)識(shí)。
步驟S302:根據(jù)所述主節(jié)點(diǎn)標(biāo)識(shí),并依據(jù)所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的表字段,對(duì)所述主節(jié)點(diǎn)依賴的所述指令參數(shù)進(jìn)行節(jié)點(diǎn)依賴關(guān)系的遞歸識(shí)別。
上述遞歸識(shí)別的步驟,包括以下步驟:
步驟S302-1:根據(jù)JAVA代碼文法規(guī)則將所述主節(jié)點(diǎn)標(biāo)識(shí)對(duì)應(yīng)的語義單元進(jìn)行內(nèi)容碎片化處理。
上述內(nèi)容碎片化處理,具體是指根據(jù)JAVA代碼文法規(guī)則,將所述主節(jié)點(diǎn)標(biāo)識(shí)對(duì)應(yīng)的語義單元分解為具體的關(guān)鍵字、對(duì)象、類、變量、方法等,進(jìn)而識(shí)別其中的變量,以及變量間的依賴關(guān)系。
在本實(shí)施例中,以“select”、“from”、“where”、“group by”和“order by”這些關(guān)鍵字劃分所得的語義單元,包含具有邏輯語義功能的代碼模塊,這些代碼模塊或基于SQL語言文法規(guī)則,或基于JAVA代碼文法規(guī)則,對(duì)這些語義單元按相應(yīng)得文法規(guī)則進(jìn)行碎片化處理,即以文法規(guī)則對(duì)語義單元的字符串等進(jìn)行分隔,并解析得到運(yùn)算符、變量等最小單元的內(nèi)容。例如,對(duì)于上述樣例的“select”主節(jié)點(diǎn)來說,解析得到的變量包括:“sell_num”、“catName”、“javaTest”、“stock_num_1_15”、“stock_num_16_30”,和“stock_num_46_60”。
步驟S302-2:根據(jù)所述內(nèi)容碎片化處理結(jié)果,獲取與所述主節(jié)點(diǎn)對(duì)應(yīng)的節(jié)點(diǎn)依賴關(guān)系和依賴字段。
在進(jìn)行上述碎片化處理的過程中,在解析得到運(yùn)算符、變量等最小單元的內(nèi)容的同時(shí),還能獲取變量間的依賴關(guān)系,由此獲取當(dāng)前主節(jié)點(diǎn),即當(dāng)前語義單元對(duì)應(yīng)得節(jié)點(diǎn)依賴關(guān)系。具體來說,是指根據(jù)所述內(nèi)容碎片化處理結(jié)果中的變量,以及變量間的依賴關(guān)系生成與所述主節(jié)點(diǎn)對(duì)應(yīng)的節(jié)點(diǎn)依賴樹;其中,所述節(jié)點(diǎn)依賴樹的各節(jié)點(diǎn)為所述內(nèi)容碎片化處理結(jié)果中的變量,且所述節(jié)點(diǎn)依賴樹的拓?fù)浣Y(jié)構(gòu)對(duì)應(yīng)于各變量間自上而下的依賴關(guān)系。
例如,對(duì)于本實(shí)施例中的上述樣例,對(duì)于“select”主節(jié)點(diǎn),可以得到以下依賴關(guān)系:
“catName”的實(shí)現(xiàn)依賴的變量為:“javaTest”,而“javaTest”的實(shí)現(xiàn)依賴的變量為:“stock_num_1_15”、“stock_num_16_30”,和“stock_num_46_60”。其中,“stock_num_1_15”、“stock_num_16_30”,和“stock_num_46_60”處于依 賴關(guān)系的最底層,將“stock_num_1_15”、“stock_num_16_30”,和“stock_num_46_60”作為依賴字段。
步驟S302-3:將所述依賴字段與所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群中的表字段進(jìn)行字段匹配。
在本實(shí)施例中,通過設(shè)置字段枚舉器,分別將上述依賴字段逐一與所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群中的表字段進(jìn)行匹配。依賴字段中,與所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群中的表字段匹配的字段,即所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群中真實(shí)存在的字段,就是查找所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群時(shí)的查找指令真實(shí)對(duì)應(yīng)的參數(shù)。例如,對(duì)上述樣例中的“select主節(jié)點(diǎn)來說,“stock_num_1_15”、“stock_num_16_30”,和“stock_num_46_60”是所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群中真實(shí)存在的字段,那么字段“stock_num_1_15”、“stock_num_16_30”,和“stock_num_46_60”便是執(zhí)行所述數(shù)據(jù)庫操作指令模板時(shí),真實(shí)的查找字段,而“javaTest”和“catName”進(jìn)一步根據(jù)“stock_num_1_15”、“stock_num_16_30”,和“stock_num_46_60”的值,以及相應(yīng)的邏輯語義關(guān)系得到。
對(duì)于上述依賴關(guān)系而言,若“stock_num_1_15”、“stock_num_16_30”,和“stock_num_46_60”是所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群中真實(shí)存在的字段,那么“javaTest”和“catName”可以看作所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群中虛擬存在的字段。
在上述樣例中,“select”主節(jié)點(diǎn)還包括與“sumBy”自定義函數(shù)對(duì)應(yīng)的依賴關(guān)系,即依賴于所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群中真實(shí)存在的字段“sell_num”的虛擬字段“sell_sum”。
步驟S302-4:根據(jù)匹配結(jié)果,將匹配上的所述依賴字段標(biāo)識(shí)為目標(biāo)子節(jié)點(diǎn),未匹配上的所述依賴字段標(biāo)識(shí)為普通子節(jié)點(diǎn)。
步驟S303:根據(jù)所述遞歸識(shí)別的結(jié)果,設(shè)置子節(jié)點(diǎn)。
例如,對(duì)于本實(shí)施例中的上述樣例,將“catName”和“sell_sum”作為主節(jié)點(diǎn)“select”下的子節(jié)點(diǎn),“javaTest”作為“catName”的下一級(jí)子節(jié)點(diǎn),“sell_num”作為“sell_sum”的下一級(jí)子節(jié)點(diǎn),而“stock_num_1_15”、“stock_num_16_30”,和“stock_num_46_60”又作為“javaTest”的下一級(jí)子節(jié)點(diǎn)。其中“stock_num_1_15”、“stock_num_16_30”、“stock_num_46_60”和“sell_num”是所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群中真實(shí)存在的表字段,被標(biāo)識(shí)為目 標(biāo)子節(jié)點(diǎn)。
由此,所述數(shù)據(jù)庫操作指令實(shí)例經(jīng)解析形成了語法樹,進(jìn)而將對(duì)所述數(shù)據(jù)庫操作指令實(shí)例的文法識(shí)別及解析,轉(zhuǎn)化為對(duì)所述語法樹的解析,對(duì)所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的真實(shí)操作,可以通過語法樹的具體結(jié)構(gòu)得到。
在本實(shí)施例中,文法規(guī)則的設(shè)置,及語法樹的生成,是通過語法分析引擎,例如ANTLR語法分析引擎來實(shí)現(xiàn)的。
步驟S104:根據(jù)所述語法樹,將所述數(shù)據(jù)庫操作指令實(shí)例翻譯為對(duì)應(yīng)于所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的標(biāo)準(zhǔn)SQL操作指令。
在本實(shí)施例中,所述數(shù)據(jù)庫操作指令實(shí)例經(jīng)解析,生成了與該數(shù)據(jù)庫操作指令實(shí)例對(duì)應(yīng)的語法樹。該語法樹的各主節(jié)點(diǎn)可以看作是以指令關(guān)鍵字劃分的,基于SQL語言的指令單元,由此上述翻譯步驟具體包括:
步驟S104-1:根據(jù)所述語法樹,獲取與所述數(shù)據(jù)庫操作指令實(shí)例對(duì)應(yīng)的基于SQL語言的指令單元;其中,所述指令單元的關(guān)鍵字為所述語法樹的主節(jié)點(diǎn),所述指令單元的參數(shù)為所述主節(jié)點(diǎn)下的子節(jié)點(diǎn)。
步驟S104-2:基于SQL語言文法規(guī)則,將獲取的各所述指令單元進(jìn)行拼接,以便獲取完整的對(duì)應(yīng)于所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的標(biāo)準(zhǔn)SQL操作指令。
對(duì)于本實(shí)施例所提供的樣例,假定stock_num_1_15變量已定義,且已賦值xxx,則獲取的完整的對(duì)應(yīng)于所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的標(biāo)準(zhǔn)SQL操作指令如下:
select sell_num,stock_num_1_15,stock_num_16_30,stock_num_46_60
from rbbDQ.dde_kuling_sku_data
where 1=1and stock_num_1_15>xxx
group by cat_id_2th
步驟S105:執(zhí)行所述標(biāo)準(zhǔn)SQL操作指令,并獲取所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的返回?cái)?shù)據(jù)。
在本實(shí)施例所提供的樣例中,所述標(biāo)準(zhǔn)SQL操作指令執(zhí)行后,返回?cái)?shù)據(jù)庫rbbDQ.dde_kuling_sku_data中,符合條件“stock_num_1_15>xxx”的“sell_num”、“stock_num_1_15”、“stock_num_16_30”和“stock_num_46_60”字段的數(shù)據(jù)。但這些數(shù)據(jù)庫中真實(shí)存在的字段并非用戶最終期望獲取的數(shù)據(jù),因此,在執(zhí)行 完所述標(biāo)準(zhǔn)SQL操作指令,并獲取所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的返回?cái)?shù)據(jù)的步驟后,需執(zhí)行以下步驟:
步驟S105-1:根據(jù)特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的返回結(jié)果,對(duì)所述語法樹各主節(jié)點(diǎn)對(duì)應(yīng)的所述語義單元中包含的具有邏輯語義功能的代碼模塊進(jìn)行相應(yīng)的邏輯處理。
上述相應(yīng)的邏輯處理包括以下情況之一或組合:
1)將所述返回?cái)?shù)據(jù)代入所述數(shù)據(jù)庫操作指令實(shí)例中具有邏輯語義功能的JAVA類型代碼模塊,進(jìn)行相應(yīng)的邏輯處理。
2)將所述返回?cái)?shù)據(jù)代入所述數(shù)據(jù)庫操作指令實(shí)例中具有邏輯語義功能的所述自定義函數(shù),進(jìn)行相應(yīng)的邏輯處理。
3)將所述返回?cái)?shù)據(jù)代入所述數(shù)據(jù)庫操作指令實(shí)例中具有邏輯語義功能的velocity模板語言對(duì)應(yīng)的語句模塊,進(jìn)行相應(yīng)的邏輯處理。
4)將所述返回?cái)?shù)據(jù)代入所述數(shù)據(jù)庫操作指令實(shí)例中具有邏輯語義功能的velocity模板語言對(duì)應(yīng)的模板文件,進(jìn)行相應(yīng)的邏輯處理。
步驟S105-2:獲取與所述節(jié)點(diǎn)依賴樹中各節(jié)點(diǎn)對(duì)應(yīng)的變量。
對(duì)于本實(shí)施例所提供的樣例,獲取到數(shù)據(jù)庫中真實(shí)存在的字段的數(shù)據(jù)后,分別依據(jù)語法樹找到“sell_sum”和“catName”的依賴關(guān)系,進(jìn)行相應(yīng)的邏輯處理,并獲取最終用戶期望獲取的數(shù)據(jù),其中“sell_sum”通過自定義函數(shù)“sumBy”獲取,“catName”通過基于JAVA語法的代碼模塊以及調(diào)用“getIndCatNameById”方法獲取。同時(shí),在給出用戶期望獲取的數(shù)據(jù)時(shí),還需經(jīng)過“order by javaTest”的邏輯處理。
例如,對(duì)于關(guān)于“catName”的依賴關(guān)系,在獲取“javaTest”時(shí),由于“javaTest”是基于JAVA語法的代碼模塊,因此會(huì)啟動(dòng)JAVA引擎進(jìn)行如下處理:
1)對(duì)與“javaTest”相關(guān)的代碼模塊的內(nèi)容進(jìn)行抽取。
2)對(duì)該內(nèi)容進(jìn)行基于JAVA語法的構(gòu)建、編譯、加載以及調(diào)用。
3)處理完畢后,進(jìn)行內(nèi)存釋放等數(shù)據(jù)清洗處理。
4)返回?cái)?shù)據(jù)。
在本實(shí)施例所提供的樣例中,最終獲取的用戶期望獲取的數(shù)據(jù)的形式,與使用標(biāo)準(zhǔn)SQL操作指令所獲取數(shù)據(jù)的形式相同,均為二維數(shù)組的形式。只是, 在最終獲取的用戶期望獲取的數(shù)據(jù)中,“sell_sum”、“catName”和“javaTest”字段并非數(shù)據(jù)庫中真實(shí)存在的字段,是用戶自定義的虛擬字段。
綜上所述,本實(shí)施例所述的方法在于提供了一種數(shù)據(jù)庫操作指令模板,在該數(shù)據(jù)庫操作指令模板中,通過設(shè)置具有邏輯語義功能的代碼模塊,以及外部的用戶參數(shù),從而得到具體的對(duì)應(yīng)于特定的數(shù)據(jù)庫或數(shù)據(jù)庫集群的數(shù)據(jù)庫操作指令實(shí)例,并通過velocity邏輯處理、SQL和java文法分析,生成對(duì)應(yīng)于該數(shù)據(jù)庫操作指令實(shí)例的語法樹,進(jìn)而獲取該特定的數(shù)據(jù)庫或數(shù)據(jù)庫集群中真實(shí)存在的字段的數(shù)據(jù),并進(jìn)一步獲取用戶期望獲取的數(shù)據(jù),以及從用戶期望獲取的數(shù)據(jù)中獲取特定的信息。
在上述的實(shí)施例中,提供了一種數(shù)據(jù)庫操作方法,與之相對(duì)應(yīng)的,本申請(qǐng)第二實(shí)施例提供一種信息處理方法。請(qǐng)參看圖4,其為本申請(qǐng)第二實(shí)施例提供的信息處理方法的流程示意圖。
所述信息處理方法包括如下步驟:
步驟S401:接收用戶發(fā)送的基于特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的數(shù)據(jù)提取請(qǐng)求。
步驟S402:根據(jù)所述數(shù)據(jù)提取請(qǐng)求,設(shè)置相應(yīng)的數(shù)據(jù)庫操作指令實(shí)例;其中,所述數(shù)據(jù)庫操作指令實(shí)例包括具體的指令關(guān)鍵字,以及與各所述具體的指令關(guān)鍵字對(duì)應(yīng)的具有邏輯語義功能的指令參數(shù)。
上述相應(yīng)的數(shù)據(jù)庫操作指令實(shí)例包括:
基于SQL語言文法規(guī)則,設(shè)置與SQL語言基本指令對(duì)應(yīng)的指令關(guān)鍵字;
基于JAVA語法、velocity模板語言,以及已封裝的能由JAVA引擎解釋和執(zhí)行的自定義函數(shù),設(shè)置與所述指令關(guān)鍵字對(duì)應(yīng)的具有邏輯語義功能的指令參數(shù);
其中,所述指令關(guān)鍵字對(duì)應(yīng)的具有邏輯語義功能的指令參數(shù)至少包括以下具有邏輯語義功能的代碼模塊中的一種:
由JAVA語言組成的具有邏輯語義功能的語句模塊;
基于JAVA語言或基于其他語言且能由JAVA引擎解釋和執(zhí)行的自定義函數(shù);
由velocity模板語言組成的具有邏輯語義功能的語句模塊;
基于velocity模板語言的具有邏輯語義功能的模板文件。
步驟S403:根據(jù)預(yù)先設(shè)置的文法規(guī)則,生成與所述數(shù)據(jù)庫指令實(shí)例對(duì)應(yīng)的語法樹。
此步驟中生成語法樹的具體步驟在本申請(qǐng)第一實(shí)施例中已詳細(xì)介紹,在本實(shí)施例中不再贅述,具體生成步驟參見方法實(shí)施例的相應(yīng)部分。
步驟S404:根據(jù)所述語法樹,將所述數(shù)據(jù)庫操作指令實(shí)例翻譯為對(duì)應(yīng)于所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的標(biāo)準(zhǔn)SQL操作指令。
此步驟中翻譯的具體步驟在本申請(qǐng)第一實(shí)施例中已詳細(xì)介紹,在本實(shí)施例中不再贅述,具體翻譯步驟參見方法實(shí)施例的相應(yīng)部分。
步驟S405:執(zhí)行所述標(biāo)準(zhǔn)SQL操作指令,并獲取所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的返回?cái)?shù)據(jù)。
步驟S406:對(duì)所述特定的數(shù)據(jù)庫或數(shù)據(jù)庫集群返回的數(shù)據(jù)進(jìn)行相應(yīng)的邏輯語義加工,進(jìn)而提取與所述數(shù)據(jù)提取請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)。
所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的返回的數(shù)據(jù)并非用戶最終期望獲取的數(shù)據(jù),因此還需對(duì)所述特定的數(shù)據(jù)庫或數(shù)據(jù)庫集群返回的數(shù)據(jù),根據(jù)指令參數(shù)中相應(yīng)的邏輯語義功能進(jìn)行相應(yīng)的邏輯語義加工,進(jìn)而提取與所述數(shù)據(jù)提取請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)。此步驟中邏輯語義處理的具體步驟在本申請(qǐng)第一實(shí)施例中已詳細(xì)介紹,在本實(shí)施例中不再贅述,具體處理步驟參見方法實(shí)施例的相應(yīng)部分。
在上述的實(shí)施例中,分別提供了一種數(shù)據(jù)庫操作方法和信息處理方法,相應(yīng)的,本申請(qǐng)還提供了相應(yīng)的裝置。由于裝置實(shí)施例基本相似于方法實(shí)施例,所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法實(shí)施例的部分說明即可。下述描述的裝置實(shí)施例僅僅是示意性的。
請(qǐng)參看圖5,其為本申請(qǐng)第三實(shí)施例提供的一種數(shù)據(jù)庫操作裝置的示意圖。本實(shí)施例的一種數(shù)據(jù)庫操作裝置,包括:讀取數(shù)據(jù)庫操作指令實(shí)例單元5-1、獲取語義單元的單元5-2、生成語法樹單元5-3、翻譯單元5-4和執(zhí)行單元5-5。
上述讀取數(shù)據(jù)庫操作指令實(shí)例單元5-1,用于讀取預(yù)先設(shè)置的對(duì)特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的數(shù)據(jù)庫操作指令實(shí)例,所述數(shù)據(jù)庫操作指令實(shí)例為與SQL語言基本指令對(duì)應(yīng)的語義單元組成的集合;其中,所述數(shù)據(jù)庫操作指令實(shí)例包含的指令參數(shù)為具有邏輯語義功能的代碼模塊。
在上述讀取數(shù)據(jù)庫操作指令實(shí)例單元5-1中,所述預(yù)先設(shè)置的對(duì)特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的數(shù)據(jù)庫操作指令實(shí)例包括:
基于SQL語言文法規(guī)則,設(shè)置與SQL語言基本指令對(duì)應(yīng)的指令關(guān)鍵字;
基于JAVA語法、velocity模板語言,以及已封裝的能由JAVA引擎解釋和執(zhí)行的自定義函數(shù),設(shè)置所述指令關(guān)鍵字對(duì)應(yīng)的指令參數(shù);
相應(yīng)的,所述的所述數(shù)據(jù)庫操作指令實(shí)例包含的指令參數(shù)為具有邏輯語義功能的代碼模塊,具體是指所述數(shù)據(jù)庫操作指令實(shí)例包含的指令參數(shù)至少包括以下具有邏輯語義功能的代碼模塊中的一種:
由JAVA語言組成的具有邏輯語義功能的語句模塊;
基于JAVA語言或基于其他語言且能由JAVA引擎解釋和執(zhí)行的自定義函數(shù);
由velocity模板語言組成的具有邏輯語義功能的語句模塊;
基于velocity模板語言的具有邏輯語義功能的模板文件。
上述獲取語義單元的單元5-2,用于根據(jù)預(yù)先設(shè)置的文法規(guī)則,獲取與所述數(shù)據(jù)庫操作指令實(shí)例對(duì)應(yīng)的基于所述SQL語言基本指令的所述語義單元;其中,所述語義單元包含所述SQL語言基本指令關(guān)鍵字,以及對(duì)應(yīng)各個(gè)基本指令的所述指令參數(shù)。
上述生成語法樹單元5-3,用于以所述語義單元為節(jié)點(diǎn)單元,并依據(jù)所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的表字段,生成與所述數(shù)據(jù)庫操作指令實(shí)例對(duì)應(yīng)的語法樹。
上述翻譯單元5-4,用于根據(jù)所述語法樹,將所述數(shù)據(jù)庫操作指令實(shí)例翻譯為對(duì)應(yīng)于所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的標(biāo)準(zhǔn)SQL操作指令。
上述執(zhí)行單元5-5,用于執(zhí)行所述標(biāo)準(zhǔn)SQL操作指令,并獲取所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的返回?cái)?shù)據(jù)。
請(qǐng)參看圖6,其為本申請(qǐng)第四實(shí)施例提供的一種信息處理裝置的示意圖。本實(shí)施例的一種信息處理裝置,包括:數(shù)據(jù)提取請(qǐng)求接收單元6-1、設(shè)置數(shù)據(jù)庫操作指令實(shí)例單元6-2、生成語法樹單元6-3、翻譯單元6-4、執(zhí)行單元6-5和邏輯語義加工單元6-6。
上述數(shù)據(jù)提取請(qǐng)求接收單元6-1,用于接收用戶發(fā)送的基于特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的數(shù)據(jù)提取請(qǐng)求。
上述設(shè)置數(shù)據(jù)庫操作指令實(shí)例單元6-2,用于根據(jù)所述數(shù)據(jù)提取請(qǐng)求,設(shè)置 相應(yīng)的數(shù)據(jù)庫操作指令實(shí)例;其中,所述數(shù)據(jù)庫操作指令實(shí)例包括具體的指令關(guān)鍵字,以及與各所述具體的指令關(guān)鍵字對(duì)應(yīng)的具有邏輯語義功能的指令參數(shù)。
在上述設(shè)置數(shù)據(jù)庫操作指令實(shí)例單元6-2中,所述相應(yīng)的數(shù)據(jù)庫操作指令實(shí)例包括:
基于SQL語言文法規(guī)則,設(shè)置與SQL語言基本指令對(duì)應(yīng)的指令關(guān)鍵字;
基于JAVA語法、velocity模板語言,以及已封裝的能由JAVA引擎解釋和執(zhí)行的自定義函數(shù),設(shè)置與所述指令關(guān)鍵字對(duì)應(yīng)的具有邏輯語義功能的指令參數(shù);
其中,所述指令關(guān)鍵字對(duì)應(yīng)的具有邏輯語義功能的指令參數(shù)至少包括以下具有邏輯語義功能的代碼模塊中的一種:
由JAVA語言組成的具有邏輯語義功能的語句模塊;
基于JAVA語言或基于其他語言且能由JAVA引擎解釋和執(zhí)行的自定義函數(shù);
由velocity模板語言組成的具有邏輯語義功能的語句模塊;
基于velocity模板語言的具有邏輯語義功能的模板文件。
上述生成語法樹單元6-3,用于根據(jù)預(yù)先設(shè)置的文法規(guī)則,生成與所述數(shù)據(jù)庫指令實(shí)例對(duì)應(yīng)的語法樹。
上述翻譯單元6-4,用于根據(jù)所述語法樹,將所述數(shù)據(jù)庫操作指令實(shí)例翻譯為對(duì)應(yīng)于所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的標(biāo)準(zhǔn)SQL操作指令。
上述執(zhí)行單元6-5,用于執(zhí)行所述標(biāo)準(zhǔn)SQL操作指令,并獲取所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的返回?cái)?shù)據(jù)。
上述邏輯語義加工單元6-6,用于對(duì)所述特定的數(shù)據(jù)庫或數(shù)據(jù)庫集群返回的數(shù)據(jù)進(jìn)行相應(yīng)的邏輯語義加工,進(jìn)而提取與所述數(shù)據(jù)提取請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)。
上述分別提供了一種數(shù)據(jù)庫操作方法、信息處理方法和相應(yīng)裝置的實(shí)施例,相應(yīng)的,本申請(qǐng)還提供一種電子設(shè)備。
請(qǐng)參考圖7,其示出了根據(jù)本申請(qǐng)的實(shí)施例提供的電子設(shè)備的示意圖。
該電子設(shè)備包括:
顯示器701;
處理器702;以及
存儲(chǔ)器703,所述存儲(chǔ)器被配置成存儲(chǔ)數(shù)據(jù)庫操作裝置,和/或信息處理裝置,
所述數(shù)據(jù)庫操作裝置被所述處理器702執(zhí)行時(shí),執(zhí)行如下步驟:
讀取預(yù)先設(shè)置的對(duì)特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的數(shù)據(jù)庫操作指令實(shí)例,所述數(shù)據(jù)庫操作指令實(shí)例為與SQL語言基本指令對(duì)應(yīng)的語義單元組成的集合;其中,所述數(shù)據(jù)庫操作指令實(shí)例包含的指令參數(shù)為具有邏輯語義功能的代碼模塊;
根據(jù)預(yù)先設(shè)置的文法規(guī)則,獲取與所述數(shù)據(jù)庫操作指令實(shí)例對(duì)應(yīng)的基于所述SQL語言基本指令的所述語義單元;其中,所述語義單元包含所述SQL語言基本指令關(guān)鍵字,以及對(duì)應(yīng)各個(gè)基本指令的所述指令參數(shù);
以所述語義單元為節(jié)點(diǎn)單元,并依據(jù)所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的表字段,生成與所述數(shù)據(jù)庫操作指令實(shí)例對(duì)應(yīng)的語法樹;
根據(jù)所述語法樹,將所述數(shù)據(jù)庫操作指令實(shí)例翻譯為對(duì)應(yīng)于所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的標(biāo)準(zhǔn)SQL操作指令;
執(zhí)行所述標(biāo)準(zhǔn)SQL操作指令,并獲取所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的返回?cái)?shù)據(jù);
所述信息處理裝置被所述處理器702執(zhí)行時(shí),執(zhí)行如下步驟:
接收用戶發(fā)送的基于特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的數(shù)據(jù)提取請(qǐng)求;
根據(jù)所述數(shù)據(jù)提取請(qǐng)求,設(shè)置相應(yīng)的數(shù)據(jù)庫操作指令實(shí)例;其中,所述數(shù)據(jù)庫操作指令實(shí)例包括具體的指令關(guān)鍵字,以及與各所述具體的指令關(guān)鍵字對(duì)應(yīng)的具有邏輯語義功能的指令參數(shù);
根據(jù)預(yù)先設(shè)置的文法規(guī)則,生成與所述數(shù)據(jù)庫指令實(shí)例對(duì)應(yīng)的語法樹;
根據(jù)所述語法樹,將所述數(shù)據(jù)庫操作指令實(shí)例翻譯為對(duì)應(yīng)于所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的標(biāo)準(zhǔn)SQL操作指令;
執(zhí)行所述標(biāo)準(zhǔn)SQL操作指令,并獲取所述特定數(shù)據(jù)庫或數(shù)據(jù)庫集群的返回?cái)?shù)據(jù);
對(duì)所述特定的數(shù)據(jù)庫或數(shù)據(jù)庫集群返回的數(shù)據(jù)進(jìn)行相應(yīng)的邏輯語義加工,進(jìn)而提取與所述數(shù)據(jù)提取請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)。
本申請(qǐng)雖然以較佳實(shí)施例公開如上,但其并不是用來限定本申請(qǐng),任何本領(lǐng)域技術(shù)人員在不脫離本申請(qǐng)的精神和范圍內(nèi),都可以做出可能的變動(dòng)和修改, 因此本申請(qǐng)的保護(hù)范圍應(yīng)當(dāng)以本申請(qǐng)權(quán)利要求所界定的范圍為準(zhǔn)。
在一個(gè)典型的配置中,計(jì)算設(shè)備包括一個(gè)或多個(gè)處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲(chǔ)器(ROM)或閃存(flash RAM)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。
1、計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體可以由任何方法或技術(shù)來實(shí)現(xiàn)信息存儲(chǔ)。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲(chǔ)介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、其他類型的隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、電可擦除可編程只讀存儲(chǔ)器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲(chǔ)器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲(chǔ)、磁盒式磁帶,磁帶磁磁盤存儲(chǔ)或其他磁性存儲(chǔ)設(shè)備或任何其他非傳輸介質(zhì),可用于存儲(chǔ)可以被計(jì)算設(shè)備訪問的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括非暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號(hào)和載波。
2、本領(lǐng)域技術(shù)人員應(yīng)明白,本申請(qǐng)的實(shí)施例可提供為方法、系統(tǒng)或計(jì)算機(jī)程序產(chǎn)品。因此,本申請(qǐng)可采用完全硬件實(shí)施例、完全軟件實(shí)施例或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請(qǐng)可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。