一種面向異構(gòu)存儲的適配裝置制造方法
【專利摘要】本發(fā)明提出一種面向異構(gòu)存儲的適配裝置。統(tǒng)一QL解析模塊,用于從客戶端接收統(tǒng)一QL語句,并對統(tǒng)一QL語句進(jìn)行解析,其中當(dāng)解析結(jié)果為索引CRUD操作請求時,將索引CRUD操作請求發(fā)送到索引模塊;當(dāng)解析結(jié)果為數(shù)據(jù)轉(zhuǎn)換請求時,將數(shù)據(jù)轉(zhuǎn)換請求發(fā)送到數(shù)據(jù)模型模塊;當(dāng)解析結(jié)果為數(shù)據(jù)CRUD操作請求時,將數(shù)據(jù)CRUD操作請求發(fā)送到具體數(shù)據(jù)庫QL模塊。具體數(shù)據(jù)庫QL模塊,用于保存數(shù)據(jù)庫標(biāo)識與數(shù)據(jù)庫類型之間的對應(yīng)關(guān)系;根據(jù)索引模塊發(fā)送的索引關(guān)鍵字、索引操作命令和數(shù)據(jù)庫標(biāo)識,生成索引操作QL語句;根據(jù)數(shù)據(jù)模型模塊發(fā)送來的數(shù)據(jù)關(guān)鍵字、轉(zhuǎn)換前數(shù)據(jù)庫標(biāo)識和轉(zhuǎn)換后數(shù)據(jù)庫標(biāo)識,生成數(shù)據(jù)讀取QL語句以及數(shù)據(jù)存儲QL語句。
【專利說明】—種面向異構(gòu)存儲的適配裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明實(shí)施方式屬于移動應(yīng)用【技術(shù)領(lǐng)域】,特別是一種面向異構(gòu)存儲的適配裝置。
【背景技術(shù)】
[0002]在很多應(yīng)用領(lǐng)域中,如果僅使用單一存儲模型的數(shù)據(jù)庫(如行數(shù)據(jù)庫、列數(shù)據(jù)庫或圖數(shù)據(jù)庫)是不足以應(yīng)付異構(gòu)、海量數(shù)據(jù)的存儲需求的。傳統(tǒng)上,行數(shù)據(jù)庫已廣泛地應(yīng)用在Web網(wǎng)站系統(tǒng)、日志記錄系統(tǒng)以及嵌入式系統(tǒng)中。但是,隨著互聯(lián)網(wǎng)Web2.0網(wǎng)站的興起,關(guān)系數(shù)據(jù)庫在應(yīng)付Web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動態(tài)網(wǎng)站時顯得力不從心,暴露了很多難以克服的問題。因?yàn)榛ヂ?lián)網(wǎng)應(yīng)用對高并發(fā)、低延時的需求已經(jīng)放在了首位,如果使用數(shù)據(jù)庫縱向擴(kuò)展的方式,則需要很大的服務(wù)器,采購和維護(hù)成本很高,并且單臺服務(wù)器配置有限,這就要求數(shù)據(jù)庫能適用于集群環(huán)境,能橫向擴(kuò)展。并且,從業(yè)務(wù)角度看,數(shù)據(jù)一致性可以不放在首位,能夠容忍數(shù)據(jù)在短時間內(nèi)不一致。
[0003]在此情況下,NoSQL數(shù)據(jù)庫孕育而生,其中包括了列數(shù)據(jù)庫和圖數(shù)據(jù)庫。列數(shù)據(jù)庫擅長高效的數(shù)據(jù)插入和查詢功能,并具有較高的壓縮比。圖數(shù)據(jù)庫的領(lǐng)域?qū)ο竽P褪菆D結(jié)構(gòu),因此對于諸如社交關(guān)系、地圖數(shù)據(jù)或基因信息等這類數(shù)據(jù),使用圖形數(shù)據(jù)庫進(jìn)行存儲是最適合的,能夠使得模型轉(zhuǎn)換代價小、實(shí)現(xiàn)簡單且降低后期維護(hù)成本。
[0004]由于目前針對行、列、圖這三類數(shù)據(jù)庫的底層存儲結(jié)構(gòu)尚無統(tǒng)一標(biāo)準(zhǔn),因而也不存在有類似關(guān)系數(shù)據(jù)庫的查詢語言SQL那樣的可以統(tǒng)一地進(jìn)行異構(gòu)存儲數(shù)據(jù)庫執(zhí)行CRDU操作的語言或技術(shù)標(biāo)準(zhǔn)。
[0005]現(xiàn)有技術(shù)中針對數(shù)據(jù)分析層面的類似技術(shù)-如Hive, impala, InfoBright雖然可以解決采集后數(shù)據(jù)行列混合存儲和壓縮的問題,但是它們都不涉及圖存儲模型與行、列存儲模型的混合封裝與適配功能,并且不支持對客戶端透明的對這三類存儲模型的數(shù)據(jù)庫間進(jìn)行數(shù)據(jù)轉(zhuǎn)換、索引同步等功能。
[0006]因此,大型應(yīng)用若需使用不同存儲模型的異構(gòu)數(shù)據(jù)庫,則需要在編寫高層應(yīng)用業(yè)務(wù)邏輯的同時,兼顧到底層這些不同數(shù)據(jù)庫所帶來的差異。在數(shù)據(jù)量徒增、數(shù)據(jù)類型多變的情況下,隨著所采用底層數(shù)據(jù)庫的類型、個數(shù)增加,這對應(yīng)用的編寫而言無疑是一件及其繁雜、瑣碎的事情。進(jìn)一步地,這也會導(dǎo)致整個應(yīng)用的代碼越來越難以修改、管理以及維護(hù)。
【發(fā)明內(nèi)容】
[0007]本發(fā)明實(shí)施方式提出一種面向異構(gòu)存儲的適配裝置,向客戶端隱藏了底層具體數(shù)據(jù)庫在使用過程中帶來的差異,從而降低客戶端編程難度。
[0008]本發(fā)明實(shí)施方式的技術(shù)方案如下:
[0009]一種面向異構(gòu)存儲的適配裝置,該裝置包括:
[0010]統(tǒng)一 QL解析模塊,用于從客戶端接收統(tǒng)一 QL語句,并對統(tǒng)一 QL語句進(jìn)行解析,其中當(dāng)解析結(jié)果為索引CRUD操作請求時,將索引CRUD操作請求發(fā)送到索引模塊;當(dāng)解析結(jié)果為數(shù)據(jù)轉(zhuǎn)換請求時,將數(shù)據(jù)轉(zhuǎn)換請求發(fā)送到數(shù)據(jù)模型模塊;當(dāng)解析結(jié)果為數(shù)據(jù)CRUD操作請求時,將數(shù)據(jù)CRUD操作請求發(fā)送到具體數(shù)據(jù)庫QL模塊;
[0011]統(tǒng)計模塊,用于從客戶端接收統(tǒng)一 QL語句,根據(jù)預(yù)先設(shè)定的提取規(guī)則從統(tǒng)一 QL語句中獲取索引關(guān)鍵字,生成關(guān)于索引關(guān)鍵字的索引CRUD操作請求,并將索引CRUD操作請求發(fā)送到索引模塊;
[0012]索引模塊,用于從統(tǒng)一 QL解析模塊和統(tǒng)計模塊發(fā)送來的索引CRUD操作請求中提取索引關(guān)鍵字、索引操作命令和數(shù)據(jù)庫標(biāo)識,并將索引關(guān)鍵字、索引操作命令和數(shù)據(jù)庫標(biāo)識發(fā)送到具體數(shù)據(jù)庫QL模塊;
[0013]數(shù)據(jù)模型模塊,用于從數(shù)據(jù)轉(zhuǎn)換請求中提取數(shù)據(jù)關(guān)鍵字、轉(zhuǎn)換前數(shù)據(jù)庫標(biāo)識和轉(zhuǎn)換后數(shù)據(jù)庫標(biāo)識,并將數(shù)據(jù)關(guān)鍵字、轉(zhuǎn)換前數(shù)據(jù)庫標(biāo)識和轉(zhuǎn)換后數(shù)據(jù)庫標(biāo)識發(fā)送到具體數(shù)據(jù)庫QL I旲塊;
[0014]具體數(shù)據(jù)庫QL模塊,用于保存數(shù)據(jù)庫標(biāo)識與數(shù)據(jù)庫類型之間的對應(yīng)關(guān)系;根據(jù)索引模塊發(fā)送的索引關(guān)鍵字、索引操作命令和數(shù)據(jù)庫標(biāo)識,生成與對應(yīng)于數(shù)據(jù)庫標(biāo)識的數(shù)據(jù)庫類型相符合的索引操作QL語句;根據(jù)數(shù)據(jù)模型模塊發(fā)送來的數(shù)據(jù)關(guān)鍵字、轉(zhuǎn)換前數(shù)據(jù)庫標(biāo)識和轉(zhuǎn)換后數(shù)據(jù)庫標(biāo)識,生成與轉(zhuǎn)換前數(shù)據(jù)庫標(biāo)識相對應(yīng)的數(shù)據(jù)庫類型相符合的數(shù)據(jù)讀取QL語句,對讀取的數(shù)據(jù)執(zhí)行數(shù)據(jù)轉(zhuǎn)換,以及生成與轉(zhuǎn)換后數(shù)據(jù)庫標(biāo)識相對應(yīng)的數(shù)據(jù)庫類型相符合的數(shù)據(jù)存儲QL語句;從統(tǒng)一 QL解析模塊發(fā)送來的數(shù)據(jù)CRUD操作請求中解析出數(shù)據(jù)關(guān)鍵字、數(shù)據(jù)CRUD操作命令和數(shù)據(jù)庫標(biāo)識,生成與數(shù)據(jù)庫標(biāo)識相對應(yīng)的數(shù)據(jù)庫類型相符合的數(shù)據(jù)CRUD操作QL語句。
[0015]優(yōu)選地,所述索引CRUD操作請求包括:添加索引模塊、查詢索引、更新索引或刪除索引。
[0016]優(yōu)選地,所述數(shù)據(jù)庫類型包括行數(shù)據(jù)庫、列數(shù)據(jù)庫和圖數(shù)據(jù)庫。
[0017]優(yōu)選地,還包括日志模塊,用于記錄數(shù)據(jù)轉(zhuǎn)換操作日志、索引CRUD操作日志和數(shù)據(jù)CRUD操作日志。
[0018]從上述技術(shù)方案可以看出,本發(fā)明了提出一種面向異構(gòu)存儲適配裝置。該裝置能夠通過為這三類數(shù)據(jù)庫制訂統(tǒng)一的結(jié)構(gòu)標(biāo)準(zhǔn),然后進(jìn)一步發(fā)布統(tǒng)一的訪問原語來實(shí)現(xiàn)客戶端的調(diào)用。它向客戶端隱藏了底層具體數(shù)據(jù)庫在使用過程中帶來的差異,進(jìn)而顯著降低客戶端編程難度。
【專利附圖】
【附圖說明】
[0019]圖1為本發(fā)明面向異構(gòu)存儲的適配裝置結(jié)構(gòu)圖;
[0020]圖2為本發(fā)明的數(shù)據(jù)庫封裝層的系統(tǒng)級架構(gòu)圖;
[0021]圖3為行數(shù)據(jù)存儲操作示范性流程圖;
[0022]圖4為列數(shù)據(jù)存儲操作示范性流程圖;
[0023]圖5為圖數(shù)據(jù)存儲操作示范性流程圖;
[0024]圖6為行數(shù)據(jù)轉(zhuǎn)換為列數(shù)據(jù)操作示范性流程圖;
[0025]圖7為列數(shù)據(jù)轉(zhuǎn)換為行數(shù)據(jù)操作示范性流程圖;
[0026]圖8為圖數(shù)據(jù)轉(zhuǎn)換為列數(shù)據(jù)操作示范性流程圖;
[0027]圖9為客戶端主動發(fā)起的索引CRUD操作示范性流程圖。
【具體實(shí)施方式】
[0028]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖對本發(fā)明作進(jìn)一步的詳細(xì)描述。
[0029]針對上述缺陷及需求,本發(fā)明提出一種面向異構(gòu)存儲適配裝置。該裝置能夠通過為這三類數(shù)據(jù)庫制訂統(tǒng)一的結(jié)構(gòu)標(biāo)準(zhǔn),然后進(jìn)一步發(fā)布統(tǒng)一的訪問原語來實(shí)現(xiàn)客戶端的調(diào)用。它向客戶端隱藏了底層具體數(shù)據(jù)庫在使用過程中帶來的差異,進(jìn)而大大降低客戶端編程難度。
[0030]圖1為本發(fā)明面向異構(gòu)存儲的適配裝置結(jié)構(gòu)圖。如圖1所示,包括:
[0031]統(tǒng)一 QL解析模塊,用于從客戶端接收統(tǒng)一 QL語句,并對統(tǒng)一 QL語句進(jìn)行解析,其中當(dāng)解析結(jié)果為索引CRUD操作請求時,將索引CRUD操作請求發(fā)送到索引模塊;當(dāng)解析結(jié)果為數(shù)據(jù)轉(zhuǎn)換請求時,將數(shù)據(jù)轉(zhuǎn)換請求發(fā)送到數(shù)據(jù)模型模塊;當(dāng)解析結(jié)果為數(shù)據(jù)CRUD操作請求時,將數(shù)據(jù)CRUD操作請求發(fā)送到具體數(shù)據(jù)庫QL模塊;
[0032]統(tǒng)計模塊,用于從客戶端接收統(tǒng)一 QL語句,根據(jù)預(yù)先設(shè)定的提取規(guī)則從統(tǒng)一 QL語句中獲取索引關(guān)鍵字,生成關(guān)于索引關(guān)鍵字的索引CRUD操作請求,并將索引CRUD操作請求發(fā)送到索引模塊;
[0033]索引模塊,用于從統(tǒng)一 QL解析模塊和統(tǒng)計模塊發(fā)送來的索引CRUD操作請求中提取索引關(guān)鍵字、索引操作命令和數(shù)據(jù)庫標(biāo)識,并將索引關(guān)鍵字、索引操作命令和數(shù)據(jù)庫標(biāo)識發(fā)送到具體數(shù)據(jù)庫QL模塊;
[0034]數(shù)據(jù)模型模塊,用于從數(shù)據(jù)轉(zhuǎn)換請求中提取數(shù)據(jù)關(guān)鍵字、轉(zhuǎn)換前數(shù)據(jù)庫標(biāo)識和轉(zhuǎn)換后數(shù)據(jù)庫標(biāo)識,并將數(shù)據(jù)關(guān)鍵字、轉(zhuǎn)換前數(shù)據(jù)庫標(biāo)識和轉(zhuǎn)換后數(shù)據(jù)庫標(biāo)識發(fā)送到具體數(shù)據(jù)庫QLI旲塊;
[0035]具體數(shù)據(jù)庫QL模塊,用于保存數(shù)據(jù)庫標(biāo)識與數(shù)據(jù)庫類型之間的對應(yīng)關(guān)系;根據(jù)索引模塊發(fā)送的索引關(guān)鍵字、索引操作命令和數(shù)據(jù)庫標(biāo)識,生成與對應(yīng)于數(shù)據(jù)庫標(biāo)識的數(shù)據(jù)庫類型相符合的索引操作QL語句,該索引操作QL語句可以被對應(yīng)于數(shù)據(jù)庫標(biāo)識的數(shù)據(jù)庫所執(zhí)行,用于針對索引關(guān)鍵字執(zhí)行該索引操作命令;根據(jù)數(shù)據(jù)模型模塊發(fā)送來的數(shù)據(jù)關(guān)鍵字、轉(zhuǎn)換前數(shù)據(jù)庫標(biāo)識和轉(zhuǎn)換后數(shù)據(jù)庫標(biāo)識,生成與轉(zhuǎn)換前數(shù)據(jù)庫標(biāo)識相對應(yīng)的數(shù)據(jù)庫類型相符合的數(shù)據(jù)讀取QL語句,數(shù)據(jù)讀取QL語句可以被轉(zhuǎn)換前數(shù)據(jù)庫標(biāo)識相對應(yīng)的數(shù)據(jù)庫所執(zhí)行,用于從轉(zhuǎn)換前數(shù)據(jù)庫讀取數(shù)據(jù);具體數(shù)據(jù)庫QL模塊對讀取的數(shù)據(jù)執(zhí)行數(shù)據(jù)轉(zhuǎn)換,以將數(shù)據(jù)轉(zhuǎn)換為與轉(zhuǎn)換后數(shù)據(jù)庫標(biāo)識相對應(yīng)的數(shù)據(jù)庫類型相符合的數(shù)據(jù);而且具體數(shù)據(jù)庫QL模塊生成與轉(zhuǎn)換后數(shù)據(jù)庫標(biāo)識相對應(yīng)的數(shù)據(jù)庫類型相符合的數(shù)據(jù)存儲QL語句,該數(shù)據(jù)存儲QL語句可以被轉(zhuǎn)換后數(shù)據(jù)庫標(biāo)識相對應(yīng)的數(shù)據(jù)庫所執(zhí)行,用于將轉(zhuǎn)換后的數(shù)據(jù)存儲到與轉(zhuǎn)換后數(shù)據(jù)庫標(biāo)識相對應(yīng)的數(shù)據(jù)庫;具體數(shù)據(jù)庫QL模塊從統(tǒng)一 QL解析模塊發(fā)送來的數(shù)據(jù)CRUD操作請求中解析出數(shù)據(jù)關(guān)鍵字、數(shù)據(jù)CRUD操作命令和數(shù)據(jù)庫標(biāo)識,生成與數(shù)據(jù)庫標(biāo)識相對應(yīng)的數(shù)據(jù)庫類型相符合的數(shù)據(jù)CRUD操作QL語句。
[0036]在一個實(shí)施方式中:索引CRUD操作請求包括:添加索引、查詢索引、更新索引或刪除索引。在一個實(shí)施方式中:數(shù)據(jù)庫類型包括:行數(shù)據(jù)庫、列數(shù)據(jù)庫或圖數(shù)據(jù)庫。在一個實(shí)施方式中:該裝置還包括日志模塊,用于記錄數(shù)據(jù)轉(zhuǎn)換操作日志、索引CRUD操作日志和數(shù)據(jù)CRUD操作日志。日志模塊負(fù)責(zé)系統(tǒng)中所有主要功能操作的日志記錄任務(wù)。它包含兩個子模塊:讀日志模塊和寫日志模塊,分別負(fù)責(zé)系統(tǒng)中讀/寫日志的相關(guān)功能。具體而言,日志模塊記錄客戶端發(fā)出的所有統(tǒng)一 QL語句調(diào)用。這包括了如下幾類日志信息:數(shù)據(jù)CRUD操作日志、索引CRUD操作日志、數(shù)據(jù)轉(zhuǎn)換操作日志)尤其值得一提的是,日志模塊的日志數(shù)據(jù)會被統(tǒng)計模塊周期性地讀出,目的是用于統(tǒng)計模塊內(nèi)部的對系統(tǒng)要自動為客戶端添加/更新/刪除索引的入選關(guān)鍵字段提供輸入。
[0037]下面更詳細(xì)地描述本發(fā)明實(shí)施方式。
[0038]綜合如上需求,試考慮如下實(shí)際場景:某大型web社交網(wǎng)站提供用戶注冊并為用戶保存特定的用戶信息、提供一定容量的免費(fèi)網(wǎng)盤空間以及管理用戶的社交關(guān)系,并需要定時對這些用戶數(shù)據(jù)進(jìn)行分析以挖掘有用信息。
[0039]對行數(shù)據(jù)庫、列數(shù)據(jù)庫和圖數(shù)據(jù)庫這三類數(shù)據(jù)庫信息的存儲:
[0040](I)、由于行數(shù)據(jù)庫以行相關(guān)的存儲體系架構(gòu)進(jìn)行空間分配,具有寫入效率高、能夠提供數(shù)據(jù)完整性等優(yōu)點(diǎn),故用戶信息這一類結(jié)構(gòu)統(tǒng)一的、可能隨時會更新的數(shù)據(jù)適用于采用行數(shù)據(jù)庫來進(jìn)行存儲,以便于用戶隨時修改、刪除或更新信息等這些實(shí)時操作的效率提升;
[0041](2)、由于列數(shù)據(jù)庫中的文檔型數(shù)據(jù)庫模式靈活,可以方便地存儲用戶的保存的二進(jìn)制文件數(shù)據(jù),并在需要時讀出供用戶下載;
[0042](3)、由于圖數(shù)據(jù)庫具有處理社交關(guān)系方面的優(yōu)勢,故當(dāng)系統(tǒng)需要進(jìn)行社交模型轉(zhuǎn)換并根據(jù)這些數(shù)據(jù)挖掘用戶潛在關(guān)系的時候,采用圖數(shù)據(jù)可使得操作得到簡化;
[0043]另外,用戶可能需要對這三類數(shù)據(jù)進(jìn)行轉(zhuǎn)換(必要時同步更新索引):
[0044](I)、由于列數(shù)據(jù)庫以列相關(guān)存儲架構(gòu)進(jìn)行數(shù)據(jù)存儲,所以其在讀取過程中沒有冗余,主要適合與批量數(shù)據(jù)處理和即席查詢。故當(dāng)系統(tǒng)需要對海量用戶數(shù)據(jù)進(jìn)行多次讀出進(jìn)而實(shí)施過濾、壓縮或者分析等大數(shù)據(jù)處理時,為避免采用傳統(tǒng)行數(shù)據(jù)庫存儲會帶來及其耗時的全表查詢操作,系統(tǒng)應(yīng)將行數(shù)據(jù)庫的內(nèi)容定時(或由調(diào)用者設(shè)定轉(zhuǎn)換時間點(diǎn)以及時間間隔)轉(zhuǎn)換并存儲至列數(shù)據(jù)庫(比如選擇凌晨用戶較少使用系統(tǒng)功能的時間段),再由列數(shù)據(jù)庫讀出并進(jìn)行后臺的海量數(shù)據(jù)處理,可減少讀取數(shù)據(jù)冗余并使讀取效率提升;
[0045](2)、當(dāng)數(shù)據(jù)比較大時,可將行數(shù)據(jù)轉(zhuǎn)換成列數(shù)據(jù)進(jìn)行存儲,因?yàn)樾袛?shù)據(jù)庫對數(shù)據(jù)幾乎不壓縮,而列數(shù)據(jù)庫在數(shù)據(jù)壓縮方面具有一定優(yōu)勢,具有高效的壓縮率,不僅節(jié)省儲存空間也節(jié)省計算內(nèi)存和CPU,減輕大約60%的行數(shù)據(jù)庫負(fù)載,騰出更多的負(fù)載,避免為擴(kuò)展關(guān)系數(shù)據(jù)存儲的復(fù)雜主/主或主/從戰(zhàn)略而開銷過大。
[0046](3)、由于行數(shù)據(jù)庫在表處理方面的優(yōu)勢,所以可以根據(jù)調(diào)用者的需求,將列數(shù)據(jù)轉(zhuǎn)換并存儲至行數(shù)據(jù)庫中,以進(jìn)行適當(dāng)?shù)谋聿僮?,適合需要一定數(shù)據(jù)完整性的場合;
[0047](4)、由于常常需要對圖數(shù)據(jù)庫中的海量數(shù)據(jù)進(jìn)行的MapReduce操作,其中的Reduce階段結(jié)束后,將結(jié)果寫入GFS/HDFS文件系統(tǒng)中,完成了單源最短路徑的一輪計算。而為了能夠獲得最終的結(jié)果,還需要按照上述方式反復(fù)迭代,以本輪Reduce輸出作為下一輪Map階段的輸入需要多次將中間結(jié)果往文件系統(tǒng)輸出,這會嚴(yán)重影響系統(tǒng)效率。這是為何Mapreduce框架不適宜做圖應(yīng)用的主要原因。所以此時我們需要將圖數(shù)據(jù)進(jìn)行轉(zhuǎn)換為列數(shù)據(jù),利用列數(shù)據(jù)利于做大數(shù)據(jù)處理的特征來處理這些海量圖數(shù)據(jù)。
[0048]由于目前行、列、圖數(shù)據(jù)庫的結(jié)構(gòu)尚無統(tǒng)一標(biāo)準(zhǔn),因而不會有類似關(guān)系數(shù)據(jù)庫的查詢語言SQL那樣的可以統(tǒng)一地進(jìn)行數(shù)據(jù)庫CRDU操作的語言。本專利發(fā)明的數(shù)據(jù)庫封裝層能夠?qū)椖康墓δ芑蛑笜?biāo)進(jìn)行適當(dāng)?shù)娜∩釓亩C合使用行、列、圖數(shù)據(jù)庫來實(shí)現(xiàn)一個雖不能達(dá)到完美效果但能解決用戶問題的方案。將三類數(shù)據(jù)庫混合使用,發(fā)揮其各自優(yōu)勢,共同使項目性能、效率達(dá)到更優(yōu)。本發(fā)明的數(shù)據(jù)庫封裝層將數(shù)據(jù)庫相關(guān)細(xì)節(jié)向調(diào)用者隱藏,為這三類數(shù)據(jù)庫制訂統(tǒng)一的結(jié)構(gòu)標(biāo)準(zhǔn),然后進(jìn)一步發(fā)布統(tǒng)一的訪問原語來實(shí)現(xiàn)客戶端的調(diào)用
[0049]圖2為本發(fā)明的數(shù)據(jù)庫封裝層的系統(tǒng)級架構(gòu)圖,靜態(tài)地展示了系統(tǒng)的一級模塊之間的協(xié)作關(guān)系,以及它們之間傳遞的數(shù)據(jù)流。由圖2可知,該數(shù)據(jù)庫封裝層向上接受客戶端應(yīng)用程序的調(diào)用,向下與具體的行存儲數(shù)據(jù)庫、列存儲數(shù)據(jù)庫或者圖存儲數(shù)據(jù)庫進(jìn)行交互,完成客戶端的具體功能請求。系統(tǒng)與客戶端之間采用本數(shù)據(jù)庫封裝層定義的統(tǒng)一查詢語言(下稱“統(tǒng)一 QL語言”)進(jìn)行交互,與具體數(shù)據(jù)庫之間則采用與具體數(shù)據(jù)相關(guān)的查詢語言(下稱“具體數(shù)據(jù)庫QL語言”)進(jìn)行交互。圖2中的各個小方框代表系統(tǒng)的各個一級模塊,它們之間相互交換的數(shù)據(jù)流通過小箭頭給出。從圖2中可知,按照功能獨(dú)立的原則,系統(tǒng)可以劃分為如下9個一級模塊,分別為:統(tǒng)一 QL解析模塊、索引模塊、數(shù)據(jù)模型模塊、數(shù)據(jù)壓縮模塊、數(shù)據(jù)存儲模塊、具體數(shù)據(jù)庫QL模塊數(shù)據(jù)、可視化模塊、統(tǒng)計模塊以及日志模塊。這些功能獨(dú)立的模塊之間相互配合、共同協(xié)作,完成行、列、圖數(shù)據(jù)庫混合存儲的系統(tǒng)功能。具體而言,本數(shù)據(jù)庫封裝層通過向上層應(yīng)用隱藏并封裝其下層三大類數(shù)據(jù)庫——行存儲數(shù)據(jù)庫、列存儲數(shù)據(jù)庫以及圖存儲數(shù)據(jù)庫的實(shí)現(xiàn)細(xì)節(jié),使得調(diào)用者能夠在不關(guān)心其所采用的具體數(shù)據(jù)庫的存儲模型(行存儲、列存儲或者圖存儲)的情況下,不必去采用具體數(shù)據(jù)庫QL語言,取而代之以統(tǒng)一 QL語言,來向本數(shù)據(jù)庫封裝層發(fā)出各種調(diào)用。在當(dāng)今業(yè)務(wù)數(shù)據(jù)類型繁雜、多變的情形下,本數(shù)據(jù)庫封裝層的發(fā)明,能夠使得高層應(yīng)用可以更加專注于業(yè)務(wù)邏輯的開發(fā),從而極大地簡化及降低了采用不同存儲模型的底層數(shù)據(jù)庫所帶來的前期的編程復(fù)雜度以及后期的數(shù)據(jù)庫運(yùn)維成本。所以,本發(fā)明的出現(xiàn),是在當(dāng)今程序開發(fā)中數(shù)據(jù)量猛增、數(shù)據(jù)類型多變的情況下是極為有意義的。
[0050]下面具體描述各個一級模塊。
[0051]統(tǒng)一 QL解析模塊可以位于整個系統(tǒng)的頂部,主要負(fù)責(zé)與客戶端程序交互,接收客戶端發(fā)出的統(tǒng)一 QL調(diào)用語句,并進(jìn)行語句功能解析,將其按照功能劃分為三類:(I)數(shù)據(jù)CRUD操作;(2)數(shù)據(jù)轉(zhuǎn)換操作;(3)索引CRUD操作。并根據(jù)這些請求類型的不同,分別將這三類的請求轉(zhuǎn)發(fā)至具體數(shù)據(jù)庫QL模塊、數(shù)據(jù)模型模塊和索引模塊,以將這些不同的功能委派至不同的系統(tǒng)模塊中實(shí)現(xiàn)。根據(jù)客戶端的操作對象不同,可以將這些調(diào)用的操作分為兩大類:對對數(shù)據(jù)的操作以及對索引的操作。其中,對數(shù)據(jù)的操作分為數(shù)據(jù)CRUD操作和數(shù)據(jù)轉(zhuǎn)換操作,對索引的操作即指索引CRUD操作。相應(yīng)的,可以上述的根據(jù)操作類型劃分依據(jù),可以將日志數(shù)據(jù)類型劃分為三類,分別為:數(shù)據(jù)CRUD操作日志、數(shù)據(jù)轉(zhuǎn)換操作日志以及索引CRUD操作日志。統(tǒng)一 QL解析模塊的輸入為:客戶端發(fā)出的統(tǒng)一 QL語言;輸出為:(a)將輸入按照上述三類進(jìn)行功能劃分之后,委派統(tǒng)一 QL語句至相應(yīng)系統(tǒng)一級模塊;(b)轉(zhuǎn)發(fā)原客戶端調(diào)用語句至統(tǒng)計模塊、日志模塊。
[0052]索引模塊負(fù)責(zé)本數(shù)據(jù)庫封裝層中所有與索引CRUD操作相關(guān)的功能實(shí)現(xiàn)。根據(jù)其輸入,可以將這些索引相關(guān)操作功能分為兩類:1.客戶端發(fā)出的對索引的CRUD操作;2.根據(jù)統(tǒng)計模塊的輸出,本數(shù)據(jù)庫封裝層將自動為客戶端向底層數(shù)據(jù)庫中適當(dāng)添加適當(dāng)索引,以在客戶端發(fā)起數(shù)據(jù)CRUD操作時能夠減少響應(yīng)時延。據(jù)此為待增加索引的關(guān)鍵字段生成具體數(shù)據(jù)庫QL語句,并發(fā)送至具體數(shù)據(jù)庫QL模塊。
[0053]相應(yīng)地,索引模塊輸入包括:a)索引CRUD操作請求;b)入選的關(guān)鍵字;c)數(shù)據(jù)轉(zhuǎn)換操作引發(fā)的必要的索引更新請求。索引模塊輸出包括:a)索引CRUD操作相關(guān)信息;b)索引CRUD操作日志信息;c)索引CRUD操作結(jié)果。
[0054]數(shù)據(jù)模型模塊主要負(fù)責(zé)接收客戶端發(fā)出的進(jìn)行數(shù)據(jù)轉(zhuǎn)換操作的統(tǒng)一 QL調(diào)用語句,并根據(jù)轉(zhuǎn)換類型進(jìn)行轉(zhuǎn)換,同時添加/更新/刪除必要的索引。數(shù)據(jù)模型模塊的輸入包括:a)數(shù)據(jù)轉(zhuǎn)換請求;b)索引添加/更新/刪除結(jié)果;c)未壓縮的待轉(zhuǎn)換數(shù)據(jù);d)獨(dú)處的數(shù)據(jù)存儲信息。數(shù)據(jù)模型模塊的輸出包括:a)必要的索引添加/更新/刪除操作請求;b)未壓縮的轉(zhuǎn)換數(shù)據(jù);c)要讀取數(shù)據(jù)的相關(guān)信息;d)要存儲數(shù)據(jù)的相關(guān)信息;e)數(shù)據(jù)轉(zhuǎn)換操作日志信息。
[0055]數(shù)據(jù)壓縮模塊負(fù)責(zé)系統(tǒng)中數(shù)據(jù)壓縮/解壓縮相關(guān)的功能。數(shù)據(jù)壓縮模塊的輸入包括:a)未壓縮的待轉(zhuǎn)換數(shù)據(jù);b)未壓縮的轉(zhuǎn)換數(shù)據(jù)。數(shù)據(jù)壓縮模塊的輸出包括:a)壓縮的待轉(zhuǎn)換數(shù)據(jù)山)壓縮的轉(zhuǎn)換數(shù)據(jù)。
[0056]統(tǒng)一 QL解析模塊將客戶端發(fā)起的屬于索引CRUD操作類型的統(tǒng)一 QL語句,根據(jù)索引操作請求的具體類型一更新索引、查詢索引、添加索引、刪除索引而發(fā)送至索引模塊中相應(yīng)的不同子模塊——索引添加模塊、索引查詢模塊、索引更新模塊、索引刪除模塊。
[0057]索引模塊中還具有內(nèi)部統(tǒng)一索引模塊,用于維護(hù)了一張全局唯一的索引表,該表保存了整個數(shù)據(jù)庫封裝層的全部索引,并記錄了各個索引的詳細(xì)信息,以供客戶端操作。其中索引查詢模塊向內(nèi)部統(tǒng)一索引模塊查詢索引,而索引添加/更新/刪除模塊則更新內(nèi)部統(tǒng)一索引表。內(nèi)部統(tǒng)一索引模塊接收到索引查詢模塊發(fā)起的索引查詢請求之后,查表得出待查詢索引的具體信息,并將這些具體信息發(fā)送至具體數(shù)據(jù)庫QL模塊,以供其生成與底層具體數(shù)據(jù)庫相關(guān)的索引查詢語句。待查詢結(jié)果從底層數(shù)據(jù)庫返回后,數(shù)據(jù)可視化模塊會將結(jié)果進(jìn)行可視化處理并返回至客戶端。而索引添加/更新/刪除模塊更新內(nèi)部統(tǒng)一索引模塊之后,內(nèi)部統(tǒng)一索引模塊也會在添加/更新/刪除其內(nèi)部統(tǒng)一索引表相關(guān)條目之后將要添加/更新/刪除的索引信息發(fā)送至具體數(shù)據(jù)庫QL模塊,以供其生成與底層具體數(shù)據(jù)庫相關(guān)的索引添加/更新/刪除語句。同樣地,這些操作的結(jié)果從底層數(shù)據(jù)庫返回后,數(shù)據(jù)可視化模塊會將結(jié)果進(jìn)行可視化處理并返回至客戶端(圖中未示出)。
[0058]數(shù)據(jù)模型模塊在進(jìn)行相應(yīng)數(shù)據(jù)轉(zhuǎn)換操作之后,將必要的索引添加/更新/刪除操作信息發(fā)送至內(nèi)部統(tǒng)一索引模塊,它會在添加/更新/刪除其內(nèi)部統(tǒng)一索引表相關(guān)條目之后將要添加/更新/刪除的索引信息發(fā)送至具體數(shù)據(jù)庫QL模塊,以供其生成與底層具體數(shù)據(jù)庫相關(guān)的索引添加/更新/刪除語句。這些操作的結(jié)果從底層數(shù)據(jù)庫返回后,該模塊將結(jié)果發(fā)送至數(shù)據(jù)轉(zhuǎn)換模塊。內(nèi)部統(tǒng)一索引模塊會將它所完成的索引CRUD操作組成相關(guān)日志信息,發(fā)送至日志模塊。
[0059]統(tǒng)一 QL解析模塊將數(shù)據(jù)轉(zhuǎn)換操作類型的請求語句發(fā)送至數(shù)據(jù)讀取模塊。該模塊在接受到數(shù)據(jù)轉(zhuǎn)換請求之后,判定轉(zhuǎn)換類型(行數(shù)據(jù)轉(zhuǎn)換列數(shù)據(jù)、列數(shù)據(jù)轉(zhuǎn)換行數(shù)據(jù)或者圖數(shù)據(jù)轉(zhuǎn)換列數(shù)據(jù)),并將類型發(fā)送至數(shù)據(jù)轉(zhuǎn)換模塊。同時,該模塊解析得出待轉(zhuǎn)換數(shù)據(jù)的相關(guān)信息,并將這些要讀取的數(shù)據(jù)信息發(fā)送至具體數(shù)據(jù)庫QL模塊,以供其生成具體數(shù)據(jù)庫的數(shù)據(jù)查詢語句。
[0060]當(dāng)具體數(shù)據(jù)庫QL模塊將該數(shù)據(jù)查詢語句發(fā)送至具體數(shù)據(jù)庫進(jìn)行執(zhí)行之后,具體數(shù)據(jù)庫查詢出來的待轉(zhuǎn)換數(shù)據(jù)的相關(guān)信息將發(fā)送至數(shù)據(jù)轉(zhuǎn)換模塊。在獲取了原始數(shù)據(jù)之后,數(shù)據(jù)轉(zhuǎn)換模塊開始對數(shù)據(jù)按照客戶端指定的類型進(jìn)行存儲模型的轉(zhuǎn)換。特別地,當(dāng)客戶端指定轉(zhuǎn)換類型為行存儲轉(zhuǎn)換列存儲且客戶端指定要求將列存儲信息進(jìn)行壓縮時,數(shù)據(jù)轉(zhuǎn)換模塊將把轉(zhuǎn)換后的數(shù)據(jù)發(fā)送至數(shù)據(jù)壓縮模塊進(jìn)行壓縮。壓縮后的數(shù)據(jù)將寫入數(shù)據(jù)存儲模塊(可采用本地文件系統(tǒng)或特定的分布式文件系統(tǒng))。同時,數(shù)據(jù)轉(zhuǎn)換模塊把未壓縮的待存儲數(shù)據(jù)信息或數(shù)據(jù)壓縮模塊把已壓縮的待存儲數(shù)據(jù)信息發(fā)送至具體數(shù)據(jù)庫QL模塊。于是,具體數(shù)據(jù)庫QL模塊生成可執(zhí)行的具體數(shù)據(jù)庫QL語句并發(fā)送執(zhí)行,將轉(zhuǎn)換后的數(shù)據(jù)存儲到指定類型的數(shù)據(jù)庫中。具體數(shù)據(jù)庫的存儲操作結(jié)果會經(jīng)由數(shù)據(jù)可視化模塊而返回至客戶端。
[0061]在數(shù)據(jù)轉(zhuǎn)換過程中,涉及到的索引添加/更新/刪除操作,將由數(shù)據(jù)轉(zhuǎn)換模塊發(fā)送至索引模塊。索引模塊將操作結(jié)果返回至數(shù)據(jù)轉(zhuǎn)換模塊后,數(shù)據(jù)轉(zhuǎn)換模塊將數(shù)據(jù)轉(zhuǎn)換操作的相關(guān)日志信息寫入日志模塊。
[0062]數(shù)據(jù)存儲模塊負(fù)責(zé)數(shù)據(jù)存儲過程中與文件系統(tǒng)進(jìn)行交互的功能。數(shù)據(jù)存儲模塊的輸入包括:a)未壓縮的轉(zhuǎn)換數(shù)據(jù);b)壓縮的轉(zhuǎn)換數(shù)據(jù);c)具體數(shù)據(jù)庫的存儲文件。數(shù)據(jù)存儲模塊的輸出包括:具體數(shù)據(jù)庫的存儲文件。
[0063]具體數(shù)據(jù)庫QL模塊首先根據(jù)其余系統(tǒng)一級模塊的指示生成與底層特定的具體數(shù)據(jù)庫相關(guān)的QL語句,或者在系統(tǒng)的統(tǒng)一 QL語句與具體數(shù)據(jù)庫QL語句之間進(jìn)行轉(zhuǎn)換。然后,讀取必要的具體數(shù)據(jù)庫的存儲文件。最后,連接具體數(shù)據(jù)庫并將可執(zhí)行的具體數(shù)據(jù)庫QL語句發(fā)送執(zhí)行。具體數(shù)據(jù)庫QL模塊的輸入包括:a)數(shù)據(jù)CRUD操作請求;b)索引CRUD操作請求;c)具體數(shù)據(jù)庫的存儲文件;d)要讀取數(shù)據(jù)的相關(guān)信息;e)要存儲數(shù)據(jù)的相關(guān)信息。具體數(shù)據(jù)庫QL模塊的輸出包括:可執(zhí)行的具體數(shù)據(jù)庫QL語句。
[0064]數(shù)據(jù)可視化模塊負(fù)責(zé)將其接收到的非可視化結(jié)果進(jìn)行可視化處理后返回至客戶端,其輸入為非可視化結(jié)果;輸出為可視化結(jié)果。
[0065]統(tǒng)計模塊可以負(fù)責(zé)系統(tǒng)中所有與關(guān)鍵字段統(tǒng)計相關(guān)的功能。具體而言,統(tǒng)計模塊從QL統(tǒng)計模塊中的輸出(統(tǒng)一 QL語句)以及日志模塊的輸出(日志數(shù)據(jù))這兩類輸入源中獲取關(guān)鍵字段,并將這些關(guān)鍵字段送入關(guān)鍵字段篩選模塊中進(jìn)行篩選,最后將入選的關(guān)鍵字送入索引模塊進(jìn)行索引的添加/更新/刪除操作。其中,入選條件、篩選條件必須符合一定的條件。其輸入:a)統(tǒng)一 QL語句;b)日志數(shù)據(jù);其輸出包括:a)入選的關(guān)鍵字。
[0066]具體地,統(tǒng)計模塊負(fù)責(zé)系統(tǒng)內(nèi)關(guān)于索引CRUD操作請求(添加/更新/刪除)的索引關(guān)鍵字的入選與輸出。它包含三個二級子模塊——QL統(tǒng)計模塊、關(guān)鍵字段統(tǒng)計模塊和關(guān)鍵字段篩選模塊。具體而言,它從:1.QL統(tǒng)計模塊中的輸出(統(tǒng)一QL語句);2.日志模塊的輸出(日志數(shù)據(jù))這兩類輸入源中獲取關(guān)鍵字段,并將這些關(guān)鍵字段送入關(guān)鍵字段篩選模塊中進(jìn)行篩選,最后將入選的關(guān)鍵字送入索引模塊進(jìn)行索引的添加/更新/刪除操作。示范性地,入選條件簡單羅列如下:1.在經(jīng)常需要搜索的列上創(chuàng)建索引,可以加快搜索的速度;
2.在作為主鍵的列上,強(qiáng)制該列的唯一性和組織表中數(shù)據(jù)的排列結(jié)構(gòu);3.在經(jīng)常用在連接的列上創(chuàng)建索引,這些列主要是一些外鍵,可以加快連接的速度;4.在經(jīng)常需要根據(jù)范圍進(jìn)行搜索的列上創(chuàng)建索引,因?yàn)樗饕呀?jīng)排序,其指定的范圍是連續(xù)的;5.在經(jīng)常使用在WHERE子句中的列上面創(chuàng)建索引,加快條件的判斷速度。示范性地,篩選條件簡單羅列如下:1.對于在查詢中很少使用或者參考的列不創(chuàng)建索引。這是因?yàn)椋热贿@些列很少使用到,因此有索引或者無索引,并不能提高查詢速度。相反,由于增加了索引,反而降低了系統(tǒng)的維護(hù)速度和增大了空間需求。2.對于只有很少數(shù)據(jù)值的列也不應(yīng)該增加索引。這是因?yàn)?,由于這些列的取值很少,例如人事表的性別列,在查詢的結(jié)果中,結(jié)果集的數(shù)據(jù)行占了表中數(shù)據(jù)行的很大比例,即需要在表中搜索的數(shù)據(jù)行的比例很大。增加索引,并不能明顯加快檢索速度。3.對于那些定義為text,image和bit數(shù)據(jù)類型的列不增加索引。這是因?yàn)?,這些列的數(shù)據(jù)量要么相當(dāng)大,要么取值很少,不利于使用索引。4.當(dāng)修改性能遠(yuǎn)遠(yuǎn)大于檢索性能時,不創(chuàng)建索引。這是因?yàn)?,修改性能和檢索性能是互相矛盾的。當(dāng)增加索引時,會提高檢索性能,但是會降低修改性能。當(dāng)減少索引時,會提高修改性能,降低檢索性能。因此,當(dāng)修改操作遠(yuǎn)遠(yuǎn)多于檢索操作時,不應(yīng)該創(chuàng)建索引。5.超過300行的數(shù)據(jù)表不創(chuàng)建索引。6.聚集索引字段不能過多,最好是單字段,而且列值唯一。7.在經(jīng)常使用在WHERE子句中的列上面創(chuàng)建索引,加快條件的判斷速度。8.對于數(shù)據(jù)字段特別多的表,而且這些字段有很多出現(xiàn)在where中,不宜在每一個字段上建立單獨(dú)的索引,而是創(chuàng)建組合索引。組合索引中,列的順序是很講究的,越是選擇性大而且唯一的列要放在前面,這對查詢優(yōu)化器優(yōu)化有很大的幫助。9.不宜在那些大量重復(fù)的列值上建立索引,比如在一個true,false的列上建索引,是毫無意義的。10.如果查詢的字段不多,可以考慮建立覆蓋索引,將字段都包含在索引里,可以僅僅訪問索引就能查詢到所有數(shù)據(jù),而不用表掃描。
[0067]日志模塊負(fù)責(zé)系統(tǒng)中所有與日至相關(guān)的功能,包括讀日志功能和寫日志功能。其輸入包括:a)統(tǒng)一 QL語句;b)數(shù)據(jù)轉(zhuǎn)換操作日志信息;c)索引CRUD操作日志信息。其輸出包括志數(shù)據(jù)。
[0068]現(xiàn)針對本發(fā)明中提出了幾類典型應(yīng)用場景,分別給出它們所涉及到的系統(tǒng)一級模塊之間的消息交互序列圖。更加詳細(xì)的系統(tǒng)子模塊之間的消息交互序列圖將在下文給出。
[0069]對于行數(shù)據(jù)存儲操作,圖3為行數(shù)據(jù)存儲操作示范性流程圖。該流程包括:
[0070]1.客戶端向統(tǒng)一QL解析模塊發(fā)出統(tǒng)一QL語句請求,指明操作類型為數(shù)據(jù)存儲、存儲模型為行存儲模型;2.統(tǒng)一 QL解析模塊收到客戶端發(fā)送的該統(tǒng)一 QL語句之后,向統(tǒng)計模塊發(fā)送該語句;3.統(tǒng)一 QL解析模塊收到客戶端發(fā)送的該統(tǒng)一 QL語句之后,向日志模塊發(fā)送該語句;4.統(tǒng)一 QL解析模塊收到客戶端發(fā)送的該統(tǒng)一 QL語句之后,對該語句進(jìn)行功能解析,判定其操作類型為數(shù)據(jù)CRUD操作之后,將該請求轉(zhuǎn)發(fā)至具體數(shù)據(jù)庫QL模塊;5.具體數(shù)據(jù)庫QL模塊收到統(tǒng)一 QL語句之后,根絕客戶端指定的數(shù)據(jù)庫類型為行數(shù)據(jù)庫,生成與該行數(shù)據(jù)庫對應(yīng)的可執(zhí)行QL語句,連接該行數(shù)據(jù)庫之后并執(zhí)行該語句;6.行數(shù)據(jù)庫將操作結(jié)果返回至數(shù)據(jù)可視化模塊;7.數(shù)據(jù)可視化模塊將具體的行數(shù)據(jù)庫返回的操作結(jié)果可視化處理之后,發(fā)送至客戶端。
[0071]對于列數(shù)據(jù)存儲操作,圖4為列數(shù)據(jù)存儲操作示范性流程圖。該流程包括:1.客戶端向統(tǒng)一 QL解析模塊發(fā)出統(tǒng)一 QL語句請求,指明操作類型為數(shù)據(jù)存儲、存儲模型為列存儲模型;2.統(tǒng)一 QL解析模塊收到客戶端發(fā)送的該統(tǒng)一 QL語句之后,向統(tǒng)計模塊發(fā)送該語句;3.統(tǒng)一 QL解析模塊收到客戶端發(fā)送的該統(tǒng)一 QL語句之后,向日志模塊發(fā)送該語句;4.統(tǒng)一 QL解析模塊收到客戶端發(fā)送的該統(tǒng)一 QL語句之后,對該語句進(jìn)行功能解析,判定其操作類型為數(shù)據(jù)CRUD操作之后,將該請求轉(zhuǎn)發(fā)至具體數(shù)據(jù)庫QL模塊;5.具體數(shù)據(jù)庫QL模塊收到統(tǒng)一 QL語句之后,根絕客戶端指定的數(shù)據(jù)庫類型為列數(shù)據(jù)庫,生成與該列數(shù)據(jù)庫對應(yīng)的可執(zhí)行QL語句,連接該列數(shù)據(jù)庫之后并執(zhí)行該語句;6.列數(shù)據(jù)庫將操作結(jié)果返回至數(shù)據(jù)可視化模塊;7.數(shù)據(jù)可視化模塊將具體的列數(shù)據(jù)庫返回的操作結(jié)果可視化處理之后,發(fā)送至客戶端。
[0072]對于圖數(shù)據(jù)存儲操作,圖5為圖數(shù)據(jù)存儲操作示范性流程圖。該流程包括:1.客戶端向統(tǒng)一 QL解析模塊發(fā)出統(tǒng)一 QL語句請求,指明操作類型為數(shù)據(jù)存儲、存儲模型為圖存儲模型;2.統(tǒng)一 QL解析模塊收到客戶端發(fā)送的該統(tǒng)一 QL語句之后,向統(tǒng)計模塊發(fā)送該語句;
3.統(tǒng)一 QL解析模塊收到客戶端發(fā)送的該統(tǒng)一 QL語句之后,向日志模塊發(fā)送該語句;4.統(tǒng)一 QL解析模塊收到客戶端發(fā)送的該統(tǒng)一 QL語句之后,對該語句進(jìn)行功能解析,判定其操作類型為數(shù)據(jù)CRUD操作之后,將該請求轉(zhuǎn)發(fā)至具體數(shù)據(jù)庫QL模塊;5.具體數(shù)據(jù)庫QL模塊收到統(tǒng)一 QL語句之后,根絕客戶端指定的數(shù)據(jù)庫類型為圖數(shù)據(jù)庫,生成與該圖數(shù)據(jù)庫對應(yīng)的可執(zhí)行QL語句,連該圖數(shù)據(jù)庫之后并執(zhí)行該語句;6.圖數(shù)據(jù)庫將操作結(jié)果返回至數(shù)據(jù)可視化模塊;7.數(shù)據(jù)可視化模塊將具體的圖數(shù)據(jù)庫返回的操作結(jié)果可視化處理之后,發(fā)送至客戶端。
[0073]當(dāng)存在如下需求時,客戶端往往需要將行數(shù)據(jù)轉(zhuǎn)換為列數(shù)據(jù):
[0074]a)由于列數(shù)據(jù)庫以列相關(guān)存儲架構(gòu)進(jìn)行數(shù)據(jù)存儲,所以其在讀取過程中沒有冗余,主要適合與批量數(shù)據(jù)處理和即席查詢。故當(dāng)系統(tǒng)需要對海量用戶數(shù)據(jù)進(jìn)行多次讀出進(jìn)而實(shí)施過濾、壓縮或者分析等大數(shù)據(jù)處理時,為避免采用傳統(tǒng)行數(shù)據(jù)庫存儲會帶來及其耗時的全表查詢操作,系統(tǒng)應(yīng)將行數(shù)據(jù)庫的內(nèi)容定時(或由調(diào)用者設(shè)定轉(zhuǎn)換時間點(diǎn)以及時間間隔)轉(zhuǎn)換并存儲至列數(shù)據(jù)庫(比如選擇凌晨用戶較少使用系統(tǒng)功能的時間段),再由列數(shù)據(jù)庫讀出并進(jìn)行后臺的海量數(shù)據(jù)處理,可減少讀取數(shù)據(jù)冗余并使讀取效率提升;
[0075]b)當(dāng)數(shù)據(jù)比較大時,可將行數(shù)據(jù)轉(zhuǎn)換成列數(shù)據(jù)進(jìn)行存儲,因?yàn)樾袛?shù)據(jù)庫對數(shù)據(jù)幾乎不壓縮,而列數(shù)據(jù)庫在數(shù)據(jù)壓縮方面具有一定優(yōu)勢,具有高效的壓縮率,不僅節(jié)省儲存空間也節(jié)省計算內(nèi)存和CPU,減輕大約60%的行數(shù)據(jù)庫負(fù)載,騰出更多的負(fù)載,避免為擴(kuò)展關(guān)系數(shù)據(jù)存儲的復(fù)雜主/主或主/從戰(zhàn)略而開銷過大。
[0076]對于行數(shù)據(jù)轉(zhuǎn)換為列數(shù)據(jù)操作,圖6為行數(shù)據(jù)轉(zhuǎn)換為列數(shù)據(jù)操作示范性流程圖。該流程包括:1.客戶端向統(tǒng)一 QL解析模塊發(fā)出統(tǒng)一 QL語句請求,指明操作類型為數(shù)據(jù)轉(zhuǎn)換操作、轉(zhuǎn)換類型為行數(shù)據(jù)轉(zhuǎn)換列數(shù)據(jù);2.統(tǒng)一 QL解析模塊收到客戶端發(fā)送的該統(tǒng)一 QL語句之后,向統(tǒng)計模塊發(fā)送該語句;3.統(tǒng)一 QL解析模塊收到客戶端發(fā)送的該統(tǒng)一 QL語句之后,向日志模塊發(fā)送該語句;4.統(tǒng)一 QL解析模塊收到客戶端發(fā)送的該統(tǒng)一 QL語句之后,對該語句進(jìn)行功能解析,判定其操作類型為數(shù)據(jù)轉(zhuǎn)換操作之后,將該請求轉(zhuǎn)發(fā)至數(shù)據(jù)轉(zhuǎn)換模塊;5.數(shù)據(jù)轉(zhuǎn)換模塊提取待轉(zhuǎn)換的行數(shù)據(jù)的相關(guān)信息,將其以內(nèi)部特定格式發(fā)送至具體數(shù)據(jù)庫QL模塊;6.具體數(shù)據(jù)庫QL模塊接收到行數(shù)據(jù)相關(guān)信息,生成具體的行數(shù)據(jù)庫查詢語句,并將其發(fā)送至行數(shù)據(jù)庫執(zhí)行;7.行數(shù)據(jù)庫向數(shù)據(jù)模型模塊返回所查詢的原行存儲數(shù)據(jù);8.數(shù)據(jù)模型模塊將原行存儲數(shù)據(jù)轉(zhuǎn)換為列存儲數(shù)據(jù),并發(fā)送至數(shù)據(jù)壓縮模塊(可由客戶端指定是否需要壓縮,在此假設(shè)需要壓縮);9.數(shù)據(jù)壓縮模塊接收到未壓縮的列存儲數(shù)據(jù),進(jìn)行壓縮后向數(shù)據(jù)存儲模塊返回壓縮的列存儲數(shù)據(jù),供其生成待存儲的具體列數(shù)據(jù)庫存儲文件;10.數(shù)據(jù)存儲模塊將生成的待存儲的列數(shù)據(jù)庫文件相關(guān)信息發(fā)送至具體數(shù)據(jù)庫QL模塊;11.數(shù)據(jù)轉(zhuǎn)換模塊提取待存儲的列數(shù)據(jù)的相關(guān)信息,將其以內(nèi)部特定格式發(fā)送至具體數(shù)據(jù)庫QL模塊;12.具體數(shù)據(jù)庫QL模塊根據(jù)接收到的列數(shù)據(jù)相關(guān)信息生成具體列數(shù)據(jù)庫存儲語句,并結(jié)合列數(shù)據(jù)庫存儲文件信息,將該語句發(fā)送至列數(shù)據(jù)庫進(jìn)行執(zhí)行;13.列數(shù)據(jù)庫向數(shù)據(jù)可視化模塊返回列數(shù)據(jù)添加操作結(jié)果;14.數(shù)據(jù)可視化模塊將數(shù)據(jù)轉(zhuǎn)換結(jié)果進(jìn)行可視化處理后,發(fā)送至客戶端;15.數(shù)據(jù)模型模塊向索引模塊發(fā)送必要的索引更新操作信息(索引刪除操作);16.索引模塊接收到索引更新信息之后,將待刪除的原行存儲索引相關(guān)信息發(fā)送至具體數(shù)據(jù)庫QL模塊;17.具體數(shù)據(jù)庫QL模塊根據(jù)接收到的待刪除的行存儲索引信息生成可執(zhí)行的具體數(shù)據(jù)庫QL語句(索引刪除),并發(fā)送至行數(shù)據(jù)庫執(zhí)行;18.行數(shù)據(jù)庫向索引模塊返回行存儲索引刪除操作結(jié)果;19.索引模塊向數(shù)據(jù)模型模塊發(fā)送行存儲索引刪除操作結(jié)果;20.索引模塊根據(jù)行存儲索引操作結(jié)果,更新其內(nèi)部統(tǒng)一的索引表;21.索引模塊向日志模塊發(fā)送索引CRUD操作日志信息;22.數(shù)據(jù)模型模塊向日志模塊發(fā)送數(shù)據(jù)轉(zhuǎn)換操作日志信息。
[0077]對于列數(shù)據(jù)轉(zhuǎn)換為行數(shù)據(jù)操作,圖7為列數(shù)據(jù)轉(zhuǎn)換為行數(shù)據(jù)操作示范性流程圖。包括:1.客戶端向統(tǒng)一 QL解析模塊發(fā)出統(tǒng)一 QL語句請求,指明操作類型為數(shù)據(jù)轉(zhuǎn)換操作、轉(zhuǎn)換類型為列數(shù)據(jù)轉(zhuǎn)換行數(shù)據(jù);2.統(tǒng)一 QL解析模塊收到客戶端發(fā)送的該統(tǒng)一 QL語句之后,向統(tǒng)計模塊發(fā)送該語句;3.統(tǒng)一 QL解析模塊收到客戶端發(fā)送的該統(tǒng)一 QL語句之后,向日志模塊發(fā)送該語句;4.統(tǒng)一 QL解析模塊收到客戶端發(fā)送的該統(tǒng)一 QL語句之后,對該語句進(jìn)行功能解析,判定其操作類型為數(shù)據(jù)轉(zhuǎn)換操作之后,將該請求轉(zhuǎn)發(fā)至數(shù)據(jù)轉(zhuǎn)換模塊;5.數(shù)據(jù)轉(zhuǎn)換模塊提取待轉(zhuǎn)換的列數(shù)據(jù)的相關(guān)信息,將其以內(nèi)部特定格式發(fā)送至具體數(shù)據(jù)庫QL模塊;6.具體數(shù)據(jù)庫QL模塊接收到列數(shù)據(jù)相關(guān)信息,生成具體的列數(shù)據(jù)庫查詢語句,并將其發(fā)送至列數(shù)據(jù)庫執(zhí)行;7.列數(shù)據(jù)庫向數(shù)據(jù)壓縮模塊返回壓縮的原列存儲數(shù)據(jù)(在此假設(shè)原數(shù)據(jù)已壓縮);8.數(shù)據(jù)壓縮模塊向數(shù)據(jù)模型模塊返回未壓縮的列存儲數(shù)據(jù);9.數(shù)據(jù)模型模塊將未壓縮的列存儲數(shù)據(jù)轉(zhuǎn)換為行存儲數(shù)據(jù),并發(fā)送至數(shù)據(jù)存儲模塊;10.數(shù)據(jù)存儲模塊將生成的待存儲的行數(shù)據(jù)庫文件相關(guān)信息發(fā)送至具體數(shù)據(jù)庫QL模塊;11.數(shù)據(jù)轉(zhuǎn)換模塊提取待存儲的行數(shù)據(jù)的相關(guān)信息,將其以內(nèi)部特定格式發(fā)送至具體數(shù)據(jù)庫QL模塊;12.具體數(shù)據(jù)庫QL模塊接收到行數(shù)據(jù)相關(guān)信息,生成具體的行數(shù)據(jù)庫查詢語句,并將其發(fā)送至行數(shù)據(jù)庫執(zhí)行;13.行數(shù)據(jù)庫向數(shù)據(jù)可視化模塊返回行數(shù)據(jù)添加操作結(jié)果;14.數(shù)據(jù)可視化模塊將數(shù)據(jù)轉(zhuǎn)換結(jié)果進(jìn)行可視化處理后,發(fā)送至客戶端;15.數(shù)據(jù)模型模塊向索引模塊發(fā)送必要的索引更新操作信息(索引添加操作);16.索引模塊接收到索引更新信息之后,將待刪除的原行存儲索引相關(guān)信息發(fā)送至具體數(shù)據(jù)庫QL模塊;17.具體數(shù)據(jù)庫QL模塊根據(jù)接收到的待添加的行存儲索引信息生成可執(zhí)行的具體數(shù)據(jù)庫QL語句(索引添加),并發(fā)送至行數(shù)據(jù)庫執(zhí)行;18.行數(shù)據(jù)庫向索引模塊返回行存儲索引添加操作結(jié)果;19.索引模塊向數(shù)據(jù)模型模塊發(fā)送行存儲索引添加操作結(jié)果;20.索引模塊根據(jù)行存儲索引操作結(jié)果,更新其內(nèi)部統(tǒng)一的索引表;21.索引模塊向日志模塊發(fā)送索引CRUD操作日志信息;22.數(shù)據(jù)模型模塊向日志模塊發(fā)送數(shù)據(jù)轉(zhuǎn)換操作日志信息。
[0078]對于圖數(shù)據(jù)轉(zhuǎn)換為列數(shù)據(jù)操作,圖8為圖數(shù)據(jù)轉(zhuǎn)換為列數(shù)據(jù)操作示范性流程圖。包括:1.客戶端向統(tǒng)一 QL解析模塊發(fā)出統(tǒng)一 QL語句請求,指明操作類型為數(shù)據(jù)轉(zhuǎn)換操作、轉(zhuǎn)換類型為圖數(shù)據(jù)轉(zhuǎn)換列數(shù)據(jù);2.統(tǒng)一 QL解析模塊收到客戶端發(fā)送的該統(tǒng)一 QL語句之后,向統(tǒng)計模塊發(fā)送該語句;3.統(tǒng)一 QL解析模塊收到客戶端發(fā)送的該統(tǒng)一 QL語句之后,向日志模塊發(fā)送該語句;4.統(tǒng)一 QL解析模塊收到客戶端發(fā)送的該統(tǒng)一 QL語句之后,對該語句進(jìn)行功能解析,判定其操作類型為數(shù)據(jù)轉(zhuǎn)換操作之后,將該請求轉(zhuǎn)發(fā)至數(shù)據(jù)轉(zhuǎn)換模塊;數(shù)據(jù)轉(zhuǎn)換模塊提取待轉(zhuǎn)換的圖數(shù)據(jù)的相關(guān)信息,將其以內(nèi)部特定格式發(fā)送至具體數(shù)據(jù)庫QL模塊;5.具體數(shù)據(jù)庫QL模塊接收到圖數(shù)據(jù)相關(guān)信息,生成具體的圖數(shù)據(jù)庫查詢語句,并將其發(fā)送至圖數(shù)據(jù)庫執(zhí)行;6.圖數(shù)據(jù)庫向數(shù)據(jù)模型模塊返回所查詢的原圖存儲數(shù)據(jù);7.數(shù)據(jù)模型模塊將原圖存儲數(shù)據(jù)轉(zhuǎn)換為列存儲數(shù)據(jù),并發(fā)送至數(shù)據(jù)壓縮模塊(可由客戶端指定是否需要壓縮,在此假設(shè)需要壓縮);8.數(shù)據(jù)壓縮模塊接收到未壓縮的列存儲數(shù)據(jù),進(jìn)行壓縮后向數(shù)據(jù)存儲模塊返回壓縮的列存儲數(shù)據(jù),供其生成待存儲的具體列數(shù)據(jù)庫存儲文件;
9.數(shù)據(jù)存儲模塊將生成的待存儲的列數(shù)據(jù)庫文件相關(guān)信息發(fā)送至具體數(shù)據(jù)庫QL模塊;
10.數(shù)據(jù)轉(zhuǎn)換模塊提取待存儲的列數(shù)據(jù)的相關(guān)信息,將其以內(nèi)部特定格式發(fā)送至具體數(shù)據(jù)庫QL模塊;11.具體數(shù)據(jù)庫QL模塊根據(jù)接收到的列數(shù)據(jù)相關(guān)信息生成具體列數(shù)據(jù)庫存儲語句,并結(jié)合列數(shù)據(jù)庫存儲文件信息,將該語句發(fā)送至列數(shù)據(jù)庫進(jìn)行執(zhí)行;12.列數(shù)據(jù)庫向數(shù)據(jù)可視化模塊返回列數(shù)據(jù)添加操作結(jié)果;13.數(shù)據(jù)可視化模塊將數(shù)據(jù)轉(zhuǎn)換結(jié)果進(jìn)行可視化處理后,發(fā)送至客戶端;14.數(shù)據(jù)模型模塊向索引模塊發(fā)送必要的索引更新操作信息(索引刪除操作);15.索引模塊接收到索引更新信息之后,將待刪除的原圖存儲索引相關(guān)信息發(fā)送至具體數(shù)據(jù)庫QL模塊;16.具體數(shù)據(jù)庫QL模塊根據(jù)接收到的待刪除的圖存儲索引信息生成可執(zhí)行的具體數(shù)據(jù)庫QL語句(索引刪除),并發(fā)送至圖數(shù)據(jù)庫執(zhí)行;17.圖數(shù)據(jù)庫向索引模塊返回圖存儲索引刪除操作結(jié)果;18.索引模塊向數(shù)據(jù)模型模塊發(fā)送圖存儲索引刪除操作結(jié)果;19.索引模塊根據(jù)圖存儲索引操作結(jié)果,更新其內(nèi)部統(tǒng)一索引表;20.索引模塊向日志模塊發(fā)送索引CRUD操作日志信息;21.數(shù)據(jù)模型模塊向日志模塊發(fā)送數(shù)據(jù)轉(zhuǎn)換操作日志信息。
[0079]對于客戶端主動發(fā)起的索引CRUD操作,圖9為客戶端主動發(fā)起的索引CRUD操作示范性流程圖。包括:1.客戶端向統(tǒng)一QL解析模塊發(fā)出統(tǒng)一QL語句請求,指明操作類型為索引CRUD操作;2.統(tǒng)一 QL解析模塊收到客戶端發(fā)送的該統(tǒng)一 QL語句之后,向統(tǒng)計模塊發(fā)送該語句;3.統(tǒng)一 QL解析模塊收到客戶端發(fā)送的該統(tǒng)一 QL語句之后,向日志模塊發(fā)送該語句;4.統(tǒng)一 QL解析模塊收到客戶端發(fā)送的該統(tǒng)一 QL語句之后,對該語句進(jìn)行功能解析,判定其操作類型為索引CRUD操作之后,將該請求轉(zhuǎn)發(fā)至索引模塊;5.索引模塊將索引相關(guān)信息發(fā)送至具體數(shù)據(jù)庫QL模塊;6.具體數(shù)據(jù)庫QL模塊生成可執(zhí)行的數(shù)據(jù)庫QL語句并發(fā)送至底層具體數(shù)據(jù)庫執(zhí)行;7.具體數(shù)據(jù)庫向數(shù)據(jù)可視化模塊返回操作結(jié)果;8.數(shù)據(jù)可視化模塊進(jìn)行數(shù)據(jù)可視化處理,將可視化結(jié)果向客戶端返回;9.數(shù)據(jù)可視化模塊向索引模塊發(fā)送該非可視化結(jié)果;10.索引模塊根據(jù)非可視化操作結(jié)果更新其內(nèi)部統(tǒng)一的索引表。
[0080]對于數(shù)據(jù)庫封裝層自動發(fā)起的索引CRUD操作,流程包括:1.統(tǒng)計模塊向索引模塊發(fā)送允許更新索引的索引關(guān)鍵字;2.索引模塊將索引關(guān)鍵字信息發(fā)送至具體數(shù)據(jù)庫QL模塊;3.具體數(shù)據(jù)庫QL模塊生成可執(zhí)行的索引CRUD操作語句,并發(fā)送至底層具體數(shù)據(jù)庫執(zhí)行;4.底層具體數(shù)據(jù)庫將非可視化操作結(jié)果返回至數(shù)據(jù)可視化模塊;5.數(shù)據(jù)可視化模塊將該非可視化結(jié)果轉(zhuǎn)發(fā)至索引模塊;6.索引模塊根據(jù)該索引CRUD操作結(jié)果,在必要時更新其內(nèi)部統(tǒng)一的索引表。
[0081]以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種面向異構(gòu)存儲的適配裝置,其特征在于,該裝置包括: 統(tǒng)一 QL解析模塊,用于從客戶端接收統(tǒng)一 QL語句,并對統(tǒng)一 QL語句進(jìn)行解析,其中當(dāng)解析結(jié)果為索引CRUD操作請求時,將索引CRUD操作請求發(fā)送到索引模塊;當(dāng)解析結(jié)果為數(shù)據(jù)轉(zhuǎn)換請求時,將數(shù)據(jù)轉(zhuǎn)換請求發(fā)送到數(shù)據(jù)模型模塊;當(dāng)解析結(jié)果為數(shù)據(jù)CRUD操作請求時,將數(shù)據(jù)CRUD操作請求發(fā)送到具體數(shù)據(jù)庫QL模塊; 統(tǒng)計模塊,用于從客戶端接收統(tǒng)一 QL語句,根據(jù)預(yù)先設(shè)定的提取規(guī)則從統(tǒng)一 QL語句中獲取索引關(guān)鍵字,生成關(guān)于索引關(guān)鍵字的索引CRUD操作請求,并將索引CRUD操作請求發(fā)送到索引模塊; 索引模塊,用于從統(tǒng)一 QL解析模塊和統(tǒng)計模塊發(fā)送來的索引CRUD操作請求中提取索引關(guān)鍵字、索引操作命令和數(shù)據(jù)庫標(biāo)識,并將索引關(guān)鍵字、索引操作命令和數(shù)據(jù)庫標(biāo)識發(fā)送到具體數(shù)據(jù)庫QL模塊; 數(shù)據(jù)模型模塊,用于從數(shù)據(jù)轉(zhuǎn)換請求中提取數(shù)據(jù)關(guān)鍵字、轉(zhuǎn)換前數(shù)據(jù)庫標(biāo)識和轉(zhuǎn)換后數(shù)據(jù)庫標(biāo)識,并將數(shù)據(jù)關(guān)鍵字、轉(zhuǎn)換前數(shù)據(jù)庫標(biāo)識和轉(zhuǎn)換后數(shù)據(jù)庫標(biāo)識發(fā)送到具體數(shù)據(jù)庫QL模塊; 具體數(shù)據(jù)庫QL模塊,用于保存數(shù)據(jù)庫標(biāo)識與數(shù)據(jù)庫類型之間的對應(yīng)關(guān)系;根據(jù)索引模塊發(fā)送的索引關(guān)鍵字、索引操作命令和數(shù)據(jù)庫標(biāo)識,生成與對應(yīng)于數(shù)據(jù)庫標(biāo)識的數(shù)據(jù)庫類型相符合的索引操作QL語句;根據(jù)數(shù)據(jù)模型模塊發(fā)送來的數(shù)據(jù)關(guān)鍵字、轉(zhuǎn)換前數(shù)據(jù)庫標(biāo)識和轉(zhuǎn)換后數(shù)據(jù)庫標(biāo)識,生成與轉(zhuǎn)換前數(shù)據(jù)庫標(biāo)識相對應(yīng)的數(shù)據(jù)庫類型相符合的數(shù)據(jù)讀取QL語句,對讀取的數(shù)據(jù)執(zhí)行數(shù)據(jù)轉(zhuǎn)換,以及生成與轉(zhuǎn)換后數(shù)據(jù)庫標(biāo)識相對應(yīng)的數(shù)據(jù)庫類型相符合的數(shù)據(jù)存儲QL語句;從統(tǒng)一 QL解析模塊發(fā)送來的數(shù)據(jù)CRUD操作請求中解析出數(shù)據(jù)關(guān)鍵字、數(shù)據(jù)CRUD操作命令和數(shù)據(jù)庫標(biāo)識,生成與數(shù)據(jù)庫標(biāo)識相對應(yīng)的數(shù)據(jù)庫類型相符合的數(shù)據(jù)CRUD操作QL語句。
2.根據(jù)權(quán)利要求1所述的裝置,其特征在于,所述索引CRUD操作請求包括:添加索引、查詢索引、更新索引模塊或刪除索引。
3.根據(jù)權(quán)利要求1所述的裝置,其特征在于,所述數(shù)據(jù)庫類型包括:行數(shù)據(jù)庫、列數(shù)據(jù)庫或圖數(shù)據(jù)庫。
4.根據(jù)權(quán)利要求1所述的裝置,其特征在于,還包括日志模塊,用于記錄數(shù)據(jù)轉(zhuǎn)換操作日志、索引CRUD操作日志和數(shù)據(jù)CRUD操作日志。
【文檔編號】G06F17/30GK104361099SQ201410674714
【公開日】2015年2月18日 申請日期:2014年11月21日 優(yōu)先權(quán)日:2014年11月21日
【發(fā)明者】林榮恒, 傅榮蓉, 趙耀, 鄒華, 楊放春, 陶鑫, 黃信力, 王鵬, 徐旸, 鄭海敏, 黃韻臻, 于婧 申請人:北京郵電大學(xué)