服務(wù)器及數(shù)據(jù)庫訪問方法
【專利摘要】本發(fā)明提供一種服務(wù)器及數(shù)據(jù)庫訪問方法,服務(wù)器包括接收模塊用于接收第一訪問語句;訪問規(guī)則路由模塊用于獲取第一訪問語句中攜帶的第一操作指令以及數(shù)據(jù)表的標(biāo)識信息,在所述第一操作指令為非關(guān)系型數(shù)據(jù)庫可進(jìn)行的操作時,判斷標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫中;語義轉(zhuǎn)譯模塊用于在判斷出標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)已被抽取到非關(guān)系型數(shù)據(jù)庫中時,將非關(guān)系型數(shù)據(jù)庫確定為目標(biāo)非關(guān)系型數(shù)據(jù)庫,并將第一操作指令轉(zhuǎn)譯為目標(biāo)非關(guān)系型數(shù)據(jù)庫可解析的第二操作指令;連接協(xié)議適配模塊用于將第二操作指令和數(shù)據(jù)表的標(biāo)識信息發(fā)送至目標(biāo)非關(guān)系型數(shù)據(jù)庫,利用非關(guān)系型數(shù)據(jù)庫滿足了對數(shù)據(jù)庫高并發(fā)讀寫等方面的需求。
【專利說明】服務(wù)器及數(shù)據(jù)庫訪問方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)庫技術(shù),尤其涉及一種服務(wù)器及數(shù)據(jù)庫訪問方法。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,對超大規(guī)模和高并發(fā)的社會性網(wǎng)絡(luò)服務(wù)(SocialNetworking Services, SNS)類型的web2.0純動態(tài)網(wǎng)站的數(shù)據(jù)查詢需求也相應(yīng)增加。
[0003]關(guān)系型數(shù)據(jù)庫是建立在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫,利用結(jié)構(gòu)化查詢語言(Structured Query Language, SQL),執(zhí)行對關(guān)系型數(shù)據(jù)庫中數(shù)據(jù)的檢索和操作。關(guān)系型數(shù)據(jù)庫中的表都是存儲一些格式化的數(shù)據(jù)結(jié)構(gòu),每個元組字段的組成都一樣,即使不是每個元組都需要所有的字段,但數(shù)據(jù)庫會為每個元組分配所有的字段,這樣的結(jié)構(gòu)可以便于表與表之間進(jìn)行連接等操作,但是卻限制了關(guān)系型數(shù)據(jù)庫的性能?,F(xiàn)有技術(shù)中所采用的關(guān)系型數(shù)據(jù)庫已無法滿足web2.0網(wǎng)站的查詢需求,在高并發(fā)讀寫需求、對海量數(shù)據(jù)的高效率存儲和訪問需求、高可擴(kuò)展性和高可用性需求等方面存在不足。而非關(guān)系型數(shù)據(jù)庫以鍵值對存儲數(shù)據(jù),它的結(jié)構(gòu)不固定,每一個元組可以有不一樣的字段,每個元組可以根據(jù)需要增加一些鍵值對,由于不局限于固定的結(jié)構(gòu),可以減少一些時間和空間的開銷,因此相對于關(guān)系型數(shù)據(jù)庫而言在性能上有所提升。因此,利用非關(guān)系型數(shù)據(jù)庫可以彌補(bǔ)關(guān)系型數(shù)據(jù)庫在高并發(fā)讀寫需求、對海量數(shù)據(jù)的高效率存儲和訪問需求、高可擴(kuò)展性和高可用性需求等方面的不足。
[0004]對數(shù)據(jù)庫的操作包括查詢類操作和非查詢類操作,由于非關(guān)系型數(shù)據(jù)庫主要適用于查詢類操作,故非關(guān)系型數(shù)據(jù)庫并不能完全取代關(guān)系型數(shù)據(jù)庫的功能,但是由于訪問關(guān)系型數(shù)據(jù)庫需要使用結(jié)構(gòu)化查詢語言,訪問非關(guān)系型數(shù)據(jù)庫需要使用非關(guān)系型查詢語言,因此,需要考慮在保持現(xiàn)有的關(guān)系型數(shù)據(jù)庫時如何滿足高并發(fā)讀寫、對海量數(shù)據(jù)的高效率存儲和訪問、高可擴(kuò)展性和高可用性等方面的需求。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供一種服務(wù)器及數(shù)據(jù)庫訪問方法,用于考慮在保持現(xiàn)有的關(guān)系型數(shù)據(jù)庫時如何滿足高并發(fā)讀寫、對海量數(shù)據(jù)的高效率存儲和訪問、高可擴(kuò)展性和高可用性等方面的需求。
[0006]本發(fā)明一方面提供了一種服務(wù)器,包括:
[0007]接收模塊,用于接收應(yīng)用服務(wù)器中的應(yīng)用程序發(fā)送的第一訪問語句,所述第一訪問語句為標(biāo)準(zhǔn)的結(jié)構(gòu)化查詢語言;
[0008]訪問規(guī)則路由模塊,用于獲取所述接收模塊接收到的所述第一訪問語句中攜帶的第一操作指令以及作為所述第一操作指令的訪問對象的數(shù)據(jù)表的標(biāo)識信息,在所述第一操作指令為非關(guān)系型數(shù)據(jù)庫可進(jìn)行的操作時,判斷所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫中;
[0009]語義轉(zhuǎn)譯模塊,用于在所述訪問規(guī)則路由模塊判斷出所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)已被抽取到非關(guān)系型數(shù)據(jù)庫中時,將所述數(shù)據(jù)表抽取到的非關(guān)系型數(shù)據(jù)庫確定為目標(biāo)非關(guān)系型數(shù)據(jù)庫,并將所述第一操作指令轉(zhuǎn)譯為所述目標(biāo)非關(guān)系型數(shù)據(jù)庫可解析的第二操作指令,所述第二操作指令為非結(jié)構(gòu)化查詢語言;
[0010]連接協(xié)議適配模塊,用于將所述語義轉(zhuǎn)譯模塊得到的所述第二操作指令和所述數(shù)據(jù)表的標(biāo)識信息發(fā)送至所述目標(biāo)非關(guān)系型數(shù)據(jù)庫,以供所述目標(biāo)非關(guān)系型數(shù)據(jù)庫根據(jù)所述第二操作指令對所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表進(jìn)行查詢。
[0011]本發(fā)明另一方面還提供了一種數(shù)據(jù)庫訪問方法,包括:
[0012]接收應(yīng)用服務(wù)器中的應(yīng)用程序發(fā)送的第一訪問語句,所述第一訪問語句為標(biāo)準(zhǔn)的結(jié)構(gòu)化查詢語言;
[0013]獲取所述第一訪問語句中攜帶的第一操作指令以及作為所述第一操作指令的訪問對象的數(shù)據(jù)表的標(biāo)識信息,在所述第一操作指令為非關(guān)系型數(shù)據(jù)庫可進(jìn)行的操作時,判斷所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫中;
[0014]在判斷出所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)已被抽取到非關(guān)系型數(shù)據(jù)庫中時,將所述數(shù)據(jù)表抽取到的非關(guān)系型數(shù)據(jù)庫確定為目標(biāo)非關(guān)系型數(shù)據(jù)庫,并將所述第一操作指令轉(zhuǎn)譯為所述目標(biāo)非關(guān)系型數(shù)據(jù)庫可解析的第二操作指令,所述第二操作指令為非結(jié)構(gòu)化查詢語言;
[0015]將所述第二操作指令和所述數(shù)據(jù)表的標(biāo)識信息發(fā)送至所述目標(biāo)非關(guān)系型數(shù)據(jù)庫,以供所述目標(biāo)非關(guān)系型數(shù)據(jù)庫根據(jù)所述第二操作指令對所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表進(jìn)行查詢。
[0016]本發(fā)明實(shí)施例提供的服務(wù)器和數(shù)據(jù)庫訪問方法,通過接收應(yīng)用服務(wù)器中的應(yīng)用程序發(fā)送的第一訪問語句,獲取第一訪問語句中攜帶的第一操作指令以及作為第一操作指令的訪問對象的數(shù)據(jù)表的標(biāo)識信息,在第一操作指令為非關(guān)系型數(shù)據(jù)庫可進(jìn)行的操作時,判斷標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫中;在判斷出標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)已被抽取到非關(guān)系型數(shù)據(jù)庫中時,將第一操作指令轉(zhuǎn)譯為目標(biāo)非關(guān)系型數(shù)據(jù)庫可解析的第二操作指令;將數(shù)據(jù)表的標(biāo)識信息和第二操作指令發(fā)送至目標(biāo)非關(guān)系型數(shù)據(jù)庫。將關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫統(tǒng)一集成到異構(gòu)數(shù)據(jù)庫服務(wù)引擎中,將標(biāo)準(zhǔn)SQL轉(zhuǎn)譯為NoSQL或不同關(guān)系型數(shù)據(jù)庫分別采用的SQL,使得應(yīng)用程序無需考慮不同類型數(shù)據(jù)庫之間的訪問語言的差異,采用標(biāo)準(zhǔn)SQL即可實(shí)現(xiàn)對不同類型數(shù)據(jù)庫的訪問,并且采用了讀寫分離、實(shí)時備份的解決方案,實(shí)現(xiàn)了在保持關(guān)系型數(shù)據(jù)庫功能的同時,利用非關(guān)系型數(shù)據(jù)庫滿足了對數(shù)據(jù)庫高并發(fā)讀寫、對海量數(shù)據(jù)的高效率存儲和訪問、高可擴(kuò)展性和高可用性等方面的需求。
【專利附圖】
【附圖說明】
[0017]圖1為本發(fā)明服務(wù)器一實(shí)施例的結(jié)構(gòu)示意圖;
[0018]圖2為本發(fā)明服務(wù)器另一實(shí)施例的結(jié)構(gòu)示意圖;
[0019]圖3為本發(fā)明服務(wù)器的一種應(yīng)用場景示意圖;
[0020]圖4為本發(fā)明數(shù)據(jù)庫訪問方法一實(shí)施例的流程圖;
[0021]圖5為本發(fā)明數(shù)據(jù)庫訪問方法另一實(shí)施例的流程圖;
[0022]圖6為本發(fā)明數(shù)據(jù)庫訪問方法又一實(shí)施例的流程圖?!揪唧w實(shí)施方式】
[0023]對關(guān)系型數(shù)據(jù)庫進(jìn)行訪問需要使用結(jié)構(gòu)化查詢語言SQL,不同的關(guān)系型數(shù)據(jù)庫所采用的SQL語句會存在一定的差異,對關(guān)系型數(shù)據(jù)庫可以進(jìn)行“±曾”、“刪”、“改”和/或“查詢”等操作;對非關(guān)系型數(shù)據(jù)庫進(jìn)行訪問時不能直接使用SQL進(jìn)行訪問,而需要使用非結(jié)構(gòu)化查詢語言,對非關(guān)系型數(shù)據(jù)庫可以進(jìn)行“查詢”操作。本發(fā)明各實(shí)施例提供的服務(wù)器中構(gòu)建了異構(gòu)數(shù)據(jù)庫統(tǒng)一服務(wù)PaaS平臺,該P(yáng)aaS平臺同時支持關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫。PaaS的含義為平臺即服務(wù)(Platform as a Service)。通過服務(wù)器中的PaaS平臺,實(shí)現(xiàn)了利用SQL對非關(guān)系型數(shù)據(jù)庫進(jìn)行查詢的操作。以下各實(shí)施例中所述的服務(wù)器即為構(gòu)建了該P(yáng)aaS平臺的服務(wù)器,尤其適用于交易型數(shù)據(jù)操作和海量數(shù)據(jù)高并發(fā)量查詢共存的應(yīng)用場景。
[0024]圖1為本發(fā)明服務(wù)器一實(shí)施例的結(jié)構(gòu)示意圖,如圖1所示,該服務(wù)器包括接收模塊
11、訪問規(guī)則路由模塊12、語義轉(zhuǎn)譯模塊13和連接協(xié)議適配模塊14。
[0025]其中,接收模塊11,用于接收應(yīng)用服務(wù)器中的應(yīng)用程序發(fā)送的第一訪問語句,所述第一訪問語句為標(biāo)準(zhǔn)的結(jié)構(gòu)化查詢語言;訪問規(guī)則路由模塊12,用于獲取所述接收模塊11接收到的所述第一訪問語句中攜帶的第一操作指令以及作為所述第一操作指令的訪問對象的數(shù)據(jù)表的標(biāo)識信息,在所述第一操作指令為非關(guān)系型數(shù)據(jù)庫可進(jìn)行的操作時,判斷所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫中;語義轉(zhuǎn)譯模塊13,用于在所述訪問規(guī)則路由模塊12判斷出所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)已被抽取到非關(guān)系型數(shù)據(jù)庫中時,將所述數(shù)據(jù)表抽取到的非關(guān)系型數(shù)據(jù)庫確定為目標(biāo)非關(guān)系型數(shù)據(jù)庫,并將所述第一操作指令轉(zhuǎn)譯為所述目標(biāo)非關(guān)系型數(shù)據(jù)庫可解析的第二操作指令,所述第二操作指令為非結(jié)構(gòu)化查詢語言;連接協(xié)議適配模塊14,用于將所述語義轉(zhuǎn)譯模塊13得到的所述第二操作指令和所述數(shù)據(jù)表的標(biāo)識信息發(fā)送至所述目標(biāo)非關(guān)系型數(shù)據(jù)庫,以供所述目標(biāo)非關(guān)系型數(shù)據(jù)庫根據(jù)所述第二操作指令對所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表進(jìn)行查詢。
[0026]進(jìn)一步地,所述語義轉(zhuǎn)譯模塊13還用于,在所述訪問規(guī)則路由模塊12判斷出所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)未被抽取到非關(guān)系型數(shù)據(jù)庫中時,將所述數(shù)據(jù)表所屬的關(guān)系型數(shù)據(jù)庫確定為目標(biāo)關(guān)系型數(shù)據(jù)庫,并將所述第一操作指令轉(zhuǎn)譯為所述目標(biāo)關(guān)系型數(shù)據(jù)庫可解析的第三操作指令,所述第三操作指令為與所述目標(biāo)關(guān)系型數(shù)據(jù)庫的類型對應(yīng)的結(jié)構(gòu)化查詢語言;相應(yīng)地,所述連接協(xié)議適配模塊14還用于,將所述語義轉(zhuǎn)譯模塊13得到的所述第三操作指令和所述數(shù)據(jù)表的標(biāo)識信息發(fā)送至所述目標(biāo)關(guān)系型數(shù)據(jù)庫,以供所述目標(biāo)關(guān)系型數(shù)據(jù)庫根據(jù)所述第三操作指令對所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表進(jìn)行操作。
[0027]應(yīng)用服務(wù)器中的應(yīng)用程序需要通過本發(fā)明實(shí)施例中的服務(wù)器訪問數(shù)據(jù)庫時,向該服務(wù)器發(fā)送數(shù)據(jù)庫訪問語句,即第一訪問語句,在第一訪問語句中包括應(yīng)用程序需要訪問的數(shù)據(jù)表的標(biāo)識,以及需要對該數(shù)據(jù)表進(jìn)行的具體操作,該第一訪問語句的格式標(biāo)準(zhǔn)SQL形式,從而應(yīng)用程序發(fā)送第一訪問語句時無需考慮不同數(shù)據(jù)庫之間所使用語言的差異,利用通用的標(biāo)準(zhǔn)SQL即可。
[0028]服務(wù)器利用其上的接收模塊11接收應(yīng)用程序通過應(yīng)用服務(wù)器發(fā)送第一訪問語句,在接收到第一訪問語句之后,將該第一訪問語句發(fā)送給訪問規(guī)則路由模塊12,以供所述訪問規(guī)則路由模塊12進(jìn)行解析。[0029]訪問規(guī)則路由模塊12在接收到接收模塊11發(fā)送的第一訪問語句之后,對該第一訪問語句進(jìn)行解析,獲取第一訪問語句中攜帶的第一操作指令和訪問對象的標(biāo)識信息。其中,訪問對象為關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)表,訪問對象的標(biāo)識信息即為應(yīng)用程序需要訪問的數(shù)據(jù)表的標(biāo)識信息;第一操作指令為應(yīng)用程序需要對該數(shù)據(jù)表進(jìn)行的具體操作,例如“增”、“刪”、“改”和/或“查詢”等操作。其中,“查詢”為查詢類的操作,“增”、“刪”、“改”等為非查詢類的操作。查詢類的操作為關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫均可執(zhí)行的操作,而非查詢類的操作適合在關(guān)系型數(shù)據(jù)庫中執(zhí)行。因此,訪問規(guī)則路由模塊12完成對第一訪問語句的解析之后,需要判斷第一操作指令為查詢類操作,還是非查詢類操作。若第一操作指令為非查詢類操作,則需要在關(guān)系型數(shù)據(jù)庫中進(jìn)行操作,因此不需要判斷應(yīng)用程序需要訪問的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫中;若第一操作指令為查詢類操作,則可以在非關(guān)系型數(shù)據(jù)庫中進(jìn)行操作,因此需要判斷應(yīng)用程序需要訪問的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫中。
[0030]應(yīng)用程序需要訪問的數(shù)據(jù)表在初始狀態(tài)時為關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)表,可供應(yīng)用程序訪問的一個或多個關(guān)系型數(shù)據(jù)庫和一個或多個非關(guān)系型數(shù)據(jù)庫存儲在數(shù)據(jù)庫服務(wù)器中。也就是說,應(yīng)用程序所在的應(yīng)用服務(wù)器與PaaS平臺所在的服務(wù)器連接,PaaS平臺所在的服務(wù)器與數(shù)據(jù)庫所在的數(shù)據(jù)庫服務(wù)器連接。應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器上分別開放相應(yīng)的訪問接口,以供本發(fā)明實(shí)施例中的服務(wù)器與其連接。
[0031]數(shù)據(jù)庫服務(wù)器除了包括一個或多個關(guān)系型數(shù)據(jù)庫以及一個或多個非關(guān)系型數(shù)據(jù)庫以外,還包括數(shù)據(jù)提取、轉(zhuǎn)換和加載(Extraction TransformationLoading,ETL)引擎。數(shù)據(jù)庫服務(wù)器利用ETL引擎將關(guān)系型數(shù)據(jù)庫中適合于在非關(guān)系型數(shù)據(jù)庫中進(jìn)行操作的數(shù)據(jù),準(zhǔn)實(shí)時地抽取到相應(yīng)的非關(guān)系型數(shù)據(jù)庫。適合于在非關(guān)系型數(shù)據(jù)庫進(jìn)行操作的數(shù)據(jù)為并發(fā)量大,需要海量讀取的數(shù)據(jù)等。
[0032]因此,ETL引擎需要預(yù)先配置,定義數(shù)據(jù)抽取規(guī)則。ETL引擎實(shí)時跟蹤關(guān)系型數(shù)據(jù)庫中數(shù)據(jù)的變化,根據(jù)預(yù)先定義的抽取規(guī)則,將規(guī)則指定的數(shù)據(jù)從關(guān)系型數(shù)據(jù)庫中準(zhǔn)實(shí)時地抽取到非關(guān)系型數(shù)據(jù)庫中。相當(dāng)于同樣的數(shù)據(jù)分別存儲在了關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫中,互為備份,使被抽取的數(shù)據(jù)在關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫中的一致性,以確保應(yīng)用程序在非關(guān)系型數(shù)據(jù)庫中進(jìn)行查詢時能夠得到準(zhǔn)確的結(jié)果。
[0033]ETL引擎在數(shù)據(jù)庫中完成對數(shù)據(jù)抽取的操作與應(yīng)用程序通過PaaS平臺訪問數(shù)據(jù)的操作,兩者之間是異步的。ETL引擎通過實(shí)時跟蹤并準(zhǔn)實(shí)時完成抽取即可。在ETL引擎將關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)抽取到非關(guān)系型數(shù)據(jù)庫中時,數(shù)據(jù)庫服務(wù)器上會對該操作進(jìn)行記錄,即哪個關(guān)系型數(shù)據(jù)庫中的哪個數(shù)據(jù)表被抽取到了哪個非關(guān)系型數(shù)據(jù)庫中。并且,數(shù)據(jù)庫服務(wù)器將該抽取數(shù)據(jù)的記錄信息發(fā)送給PaaS平臺所在的服務(wù)器,服務(wù)器將該記錄信息保存在訪問規(guī)則路由模塊12中。
[0034]訪問規(guī)則路由模塊12根據(jù)該記錄信息,即可判斷出應(yīng)用程序需要訪問的數(shù)據(jù)表是否已被抽取到非關(guān)系型數(shù)據(jù)庫中。
[0035]訪問規(guī)則路由模塊12若判斷出應(yīng)用程序需要訪問的數(shù)據(jù)表已經(jīng)被抽取到非關(guān)系型數(shù)據(jù)庫中,則根據(jù)該記錄信息,可以獲知該數(shù)據(jù)表被抽取到哪個非關(guān)系型數(shù)據(jù)庫中,以便該服務(wù)器到該非關(guān)系型數(shù)據(jù)庫中對該數(shù)據(jù)表進(jìn)行查詢。
[0036]訪問規(guī)則路由模塊12若判斷出應(yīng)用程序需要訪問的數(shù)據(jù)表未被抽取到非關(guān)系型數(shù)據(jù)庫中,則根據(jù)預(yù)先保存的數(shù)據(jù)庫服務(wù)器中一個或多個關(guān)系型數(shù)據(jù)庫與各自所存儲的數(shù)據(jù)表之間的對應(yīng)關(guān)系,獲知應(yīng)用程序需要訪問的數(shù)據(jù)表屬于哪個關(guān)系型數(shù)據(jù)庫,也就是具體哪個關(guān)系型的數(shù)據(jù)庫實(shí)例,以便該服務(wù)器到該關(guān)系型數(shù)據(jù)庫中對該數(shù)據(jù)表進(jìn)行查詢。
[0037]訪問規(guī)則路由模塊12在判斷出數(shù)據(jù)表是否已被抽取到非關(guān)系型數(shù)據(jù)庫之后,將解析出的第一操作指令、數(shù)據(jù)表的標(biāo)識信息以及上述判斷結(jié)果發(fā)送給語義轉(zhuǎn)譯模塊13。其中,判斷結(jié)果中表明該數(shù)據(jù)表是否已被抽取到非關(guān)系型數(shù)據(jù)庫中,若已被抽取,則該判斷結(jié)果中攜帶有被抽取到的非關(guān)系型數(shù)據(jù)的數(shù)據(jù)庫標(biāo)識信息;若未被抽取,則該判斷結(jié)果中攜帶有該數(shù)據(jù)表所屬的關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫標(biāo)識信息,即具體的關(guān)系型數(shù)據(jù)庫實(shí)例的數(shù)據(jù)庫標(biāo)識信息。語義轉(zhuǎn)譯模塊13根據(jù)判斷結(jié)果,對第一操作指令進(jìn)行轉(zhuǎn)譯,具體為以下兩種方式:
[0038]一種方式為,當(dāng)判斷結(jié)果表明數(shù)據(jù)表已被抽取到非關(guān)系型數(shù)據(jù)庫中時,語義轉(zhuǎn)譯模塊13獲知該判斷結(jié)果中攜帶的數(shù)據(jù)庫標(biāo)識信息對應(yīng)的是非關(guān)系型數(shù)據(jù)庫,則將該數(shù)據(jù)標(biāo)識信息對應(yīng)的非關(guān)系型數(shù)據(jù)庫確定為目標(biāo)非關(guān)系型數(shù)據(jù)庫,即通過訪問該非關(guān)系型數(shù)據(jù)庫可以完成應(yīng)用程序需要進(jìn)行的訪問操作。在將該非關(guān)系型數(shù)據(jù)庫確定為目標(biāo)非關(guān)系型數(shù)據(jù)庫之后,語義轉(zhuǎn)譯模塊13將第一操作指令轉(zhuǎn)譯為目標(biāo)非關(guān)系型數(shù)據(jù)庫可解析的第二操作指令,第二操作指令為非結(jié)構(gòu)化查詢語言,或者稱為基于鍵(Key)值的非結(jié)構(gòu)化查詢語言(Not Only SQL, NoSQL)查詢,即符合目標(biāo)非關(guān)系型數(shù)據(jù)庫語法的操作指令。也就是說,第一操作指令和第二操作指令對應(yīng)的訪問操作是相同的,兩者的區(qū)別是第二操作指令對同樣的訪問操作所采用的數(shù)據(jù)庫語法不同??梢岳斫獾氖牵舨煌姆顷P(guān)系型數(shù)據(jù)所采用的非結(jié)構(gòu)化查詢語言存在差異,則在語義轉(zhuǎn)譯模塊13中預(yù)先設(shè)置相應(yīng)的轉(zhuǎn)換方式即可。
[0039]其中一種具體的實(shí)現(xiàn)方式可以為,語義轉(zhuǎn)譯模塊13中預(yù)先存儲有標(biāo)準(zhǔn)SQL與非關(guān)系型數(shù)據(jù)庫所采用的非結(jié)構(gòu)化語言之間的對應(yīng)關(guān)系,該對應(yīng)關(guān)系可以具有為轉(zhuǎn)譯模板。轉(zhuǎn)譯模板的結(jié)構(gòu)可以為對哪個數(shù)據(jù)表進(jìn)行的哪種操作指令,并且該轉(zhuǎn)譯模塊的數(shù)據(jù)庫語法采用的是非結(jié)構(gòu)化查詢語言的語法結(jié)構(gòu)。因此,可以利用轉(zhuǎn)譯模板將第一操作指令和數(shù)據(jù)表的標(biāo)識信息,構(gòu)造成符合非結(jié)構(gòu)化查詢語言語法的訪問語句。以便該服務(wù)器利用經(jīng)過轉(zhuǎn)譯模板得到的訪問語句對目標(biāo)非關(guān)系型數(shù)據(jù)庫進(jìn)行訪問。
[0040]另一種方式為,當(dāng)判斷結(jié)果表明數(shù)據(jù)表未被抽取到非關(guān)系型數(shù)據(jù)庫中時,語義轉(zhuǎn)譯模塊13獲知該判斷結(jié)果中攜帶的數(shù)據(jù)庫標(biāo)識信息對應(yīng)的是關(guān)系型數(shù)據(jù)庫,則將該數(shù)據(jù)標(biāo)識信息對應(yīng)的關(guān)系型數(shù)據(jù)庫確定為目標(biāo)關(guān)系型數(shù)據(jù)庫,即通過訪問該關(guān)系型數(shù)據(jù)庫可以完成應(yīng)用程序需要進(jìn)行的訪問操作。在將該關(guān)系型數(shù)據(jù)庫確定為目標(biāo)關(guān)系型數(shù)據(jù)庫之后,語義轉(zhuǎn)譯模塊13將第一操作指令轉(zhuǎn)譯為目標(biāo)關(guān)系型數(shù)據(jù)庫可解析的第三操作指令。由于不同的關(guān)系型數(shù)據(jù)庫不一定采用標(biāo)準(zhǔn)SQL,可能不同的關(guān)系型數(shù)據(jù)庫所采用的訪問語言的形式與標(biāo)準(zhǔn)SQL存在差異,或者不同的關(guān)系型數(shù)據(jù)庫之間所采用的SQL也存在差異,因此,第三操作指令為與目標(biāo)關(guān)系型數(shù)據(jù)庫的類型對應(yīng)的SQL,即符合目標(biāo)關(guān)系型數(shù)據(jù)庫語法的操作指令。也就是說,第一操作指令和第三操作指令對應(yīng)的訪問操作是相同的,兩者的區(qū)別是第三操作指令對同樣的訪問操作所采用的數(shù)據(jù)庫語法不同。
[0041]其中一種具體的實(shí)現(xiàn)方式可以為,語義轉(zhuǎn)譯模塊13中預(yù)先存儲有標(biāo)準(zhǔn)SQL與不同關(guān)系型數(shù)據(jù)庫所采用的SQL之間的對應(yīng)關(guān)系,該對應(yīng)關(guān)系可以具有為轉(zhuǎn)譯模板。轉(zhuǎn)譯模板的結(jié)構(gòu)可以為對哪個數(shù)據(jù)表進(jìn)行的哪種操作指令,并且該轉(zhuǎn)譯模塊的數(shù)據(jù)庫語法采用的是分別與不同關(guān)系型數(shù)據(jù)庫分別對應(yīng)的語法結(jié)構(gòu)。因此,可以利用轉(zhuǎn)譯模板將第一操作指令和數(shù)據(jù)表的標(biāo)識信息,構(gòu)造成符合目標(biāo)關(guān)系型數(shù)據(jù)庫所采用的SQL的訪問語句。以便該服務(wù)器利用經(jīng)過轉(zhuǎn)譯模板得到的訪問語句對目標(biāo)關(guān)系型數(shù)據(jù)庫進(jìn)行訪問。
[0042]語義轉(zhuǎn)譯模塊13將應(yīng)用程序需要訪問的數(shù)據(jù)表的標(biāo)識信息、目標(biāo)非關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫標(biāo)識信息以及轉(zhuǎn)譯后的第二操作指令發(fā)送至連接協(xié)議適配模塊14 ;或者將應(yīng)用程序需要訪問的數(shù)據(jù)表的標(biāo)識信息、目標(biāo)關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫標(biāo)識信息以及轉(zhuǎn)譯后的第三操作指令發(fā)送至連接協(xié)議適配模塊14。若語義轉(zhuǎn)譯模塊13將數(shù)據(jù)表的標(biāo)識信息和第二操作指令,或者數(shù)據(jù)表的標(biāo)識信息和第三操作指令構(gòu)造為相應(yīng)的訪問語句,則語義轉(zhuǎn)譯模塊13將該訪問語句發(fā)送至連接協(xié)議適配模塊14。
[0043]連接協(xié)議適配模塊14接收語義轉(zhuǎn)譯模塊13發(fā)送的數(shù)據(jù)表的標(biāo)識信息、數(shù)據(jù)庫標(biāo)識信息和操作指令,其中操作指令為第二操作指令或第三操作指令。服務(wù)器通過連接協(xié)議適配模塊14建立與數(shù)據(jù)庫服務(wù)器中一個或多個服務(wù)器之間的鏈接。連接協(xié)議適配模塊14根據(jù)數(shù)據(jù)庫標(biāo)識信息,將數(shù)據(jù)表的標(biāo)識信息和第二操作指令發(fā)送至數(shù)據(jù)庫標(biāo)識信息對應(yīng)的目標(biāo)非關(guān)系型數(shù)據(jù)庫;或者,將將數(shù)據(jù)表的標(biāo)識信息和第三操作指令發(fā)送至數(shù)據(jù)庫標(biāo)識信息對應(yīng)的目標(biāo)關(guān)系型數(shù)據(jù)庫。以供目標(biāo)非關(guān)系型數(shù)據(jù)庫根據(jù)第二操作指令完成對該數(shù)據(jù)表的操作;或者目標(biāo)關(guān)系型數(shù)據(jù)庫根據(jù)第三操作指令完成對該數(shù)據(jù)表的操作。
[0044]本發(fā)明實(shí)施例提供的服務(wù)器,通過接收應(yīng)用服務(wù)器中的應(yīng)用程序發(fā)送的第一訪問語句,獲取第一訪問語句中攜帶的第一操作指令以及作為第一操作指令的訪問對象的數(shù)據(jù)表的標(biāo)識信息,在第一操作指令為非關(guān)系型數(shù)據(jù)庫可進(jìn)行的操作時,判斷標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫中;在判斷出標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)已被抽取到非關(guān)系型數(shù)據(jù)庫中時,將第一操作指令轉(zhuǎn)譯為目標(biāo)非關(guān)系型數(shù)據(jù)庫可解析的第二操作指令;在判斷出標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)未被抽取到非關(guān)系型數(shù)據(jù)庫中時,將第一操作指令轉(zhuǎn)譯為目標(biāo)關(guān)系型數(shù)據(jù)庫可解析的第三操作指令;將數(shù)據(jù)表的標(biāo)識信息和第二操作指令發(fā)送至目標(biāo)非關(guān)系型數(shù)據(jù)庫,或者將數(shù)據(jù)表的標(biāo)識信息和第三操作指令發(fā)送至目標(biāo)關(guān)系型數(shù)據(jù)庫,以供目標(biāo)非關(guān)系型數(shù)據(jù)庫或目標(biāo)關(guān)系型數(shù)據(jù)庫完成對數(shù)據(jù)表的操作。將關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫統(tǒng)一集成到異構(gòu)數(shù)據(jù)庫服務(wù)引擎中,將標(biāo)準(zhǔn)SQL轉(zhuǎn)譯為NoSQL或不同關(guān)系型數(shù)據(jù)庫分別采用的SQL,使得應(yīng)用程序無需考慮不同類型數(shù)據(jù)庫之間的訪問語言的差異,采用標(biāo)準(zhǔn)SQL即可實(shí)現(xiàn)對不同類型數(shù)據(jù)庫的訪問,并且采用了讀寫分離、實(shí)時備份的解決方案,實(shí)現(xiàn)了在保持關(guān)系型數(shù)據(jù)庫功能的同時,利用非關(guān)系型數(shù)據(jù)庫滿足了對數(shù)據(jù)庫高并發(fā)讀寫、對海量數(shù)據(jù)的高效率存儲和訪問、高可擴(kuò)展性和高可用性等方面的需求。
[0045]進(jìn)一步地,在上述各實(shí)施例的基礎(chǔ)上,所述訪問規(guī)則路由模塊12具體用于,獲取所述接收模塊11接收到的所述第一訪問語句中攜帶的所述第一操作指令以及作為所述第一操作指令的訪問對象的數(shù)據(jù)表的標(biāo)識信息,在查詢到所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表所屬的關(guān)系型數(shù)據(jù)庫為預(yù)設(shè)的所述應(yīng)用程序可訪問的一個或多個關(guān)系型數(shù)據(jù)庫中的關(guān)系型數(shù)據(jù)庫,并且所述第一操作指令為非關(guān)系型數(shù)據(jù)庫可進(jìn)行的操作時,判斷所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫中。
[0046]訪問規(guī)則路由模塊12在獲取接收模塊11接收到的第一訪問語句中的第一操作指令和數(shù)據(jù)表的標(biāo)識信息之后,在判斷第一操作指令為非關(guān)系型數(shù)據(jù)庫可進(jìn)行的操作之前,還需要查詢該數(shù)據(jù)表所屬的關(guān)系型數(shù)據(jù)庫是否為該應(yīng)用程序可訪問的關(guān)系型數(shù)據(jù)庫。若是該應(yīng)用程序可訪問的一個或多個關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)庫,則說明應(yīng)用程序有權(quán)限訪問該數(shù)據(jù)庫,進(jìn)而訪問規(guī)則路由模塊12判斷標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫;若不是該應(yīng)用程序可訪問的一個或多個關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)庫,則說明應(yīng)用程序無權(quán)限訪問該數(shù)據(jù)庫,訪問規(guī)則路由模塊12不再進(jìn)行后續(xù)操作。
[0047]本發(fā)明實(shí)施例提供的服務(wù)器,獲取到第一操作指令以及作為第一操作指令的訪問對象的數(shù)據(jù)表的標(biāo)識信息之后,需要在查詢到標(biāo)識信息對應(yīng)的數(shù)據(jù)表所屬的關(guān)系型數(shù)據(jù)庫為預(yù)設(shè)的應(yīng)用程序可訪問的一個或多個關(guān)系型數(shù)據(jù)庫中的關(guān)系型數(shù)據(jù)庫的前提下,才進(jìn)一步判斷第一操作指令是否為非關(guān)系型數(shù)據(jù)庫可進(jìn)行的操作,以及判斷標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫中,起到了對應(yīng)用程序的訪問請求進(jìn)行認(rèn)證的作用,只將應(yīng)用程序有權(quán)限訪問的數(shù)據(jù)庫開放給該應(yīng)用程序,有效地提高了數(shù)據(jù)庫訪問的安全性。
[0048]進(jìn)一步地,在上述各實(shí)施例的基礎(chǔ)上,所述訪問規(guī)則路由模塊12還用于,預(yù)先配置所述應(yīng)用服務(wù)器中的至少一個應(yīng)用程序分別可訪問的一個或多個關(guān)系型數(shù)據(jù)庫。
[0049]訪問規(guī)則路由模塊12判斷應(yīng)用程序是否有權(quán)限訪問相應(yīng)的關(guān)系型數(shù)據(jù)庫之前,需要在訪問規(guī)則路由模塊12中預(yù)先配置該應(yīng)用程序可訪問的一個或多個關(guān)系型數(shù)據(jù)庫,即具體的數(shù)據(jù)庫實(shí)例。由于應(yīng)用服務(wù)器中可能包括一個或多個應(yīng)用程序,因此,訪問規(guī)則路由模塊12中預(yù)先配置的是應(yīng)用服務(wù)器中各應(yīng)用程序分別可訪問的一個或多個關(guān)系型數(shù)據(jù)庫。
[0050]本發(fā)明實(shí)施例提供的服務(wù)器,在訪問規(guī)則路由模塊中預(yù)先配置應(yīng)用服務(wù)器中各應(yīng)用程序分別可訪問的一個或多個關(guān)系型數(shù)據(jù)庫,以供訪問規(guī)則路由模塊在從應(yīng)用程序發(fā)送的訪問語句中獲取到數(shù)據(jù)表的標(biāo)識信息和第一操作指令之后,可以通過預(yù)先配置的應(yīng)用程序的訪問權(quán)限,對是否允許應(yīng)用程序訪問相應(yīng)的關(guān)系型數(shù)據(jù)進(jìn)行查詢,有效地提高了數(shù)據(jù)庫訪問的安全性。
[0051]圖2為本發(fā)明服務(wù)器另一實(shí)施例的結(jié)構(gòu)示意圖,如圖2所示,在上述各實(shí)施例的基礎(chǔ)上,所述服務(wù)器還包括結(jié)果適配及轉(zhuǎn)發(fā)模塊15。圖3為本發(fā)明服務(wù)器的一種應(yīng)用場景示意圖。
[0052]結(jié)果適配及轉(zhuǎn)發(fā)模塊15用于接收所述目標(biāo)非關(guān)系型數(shù)據(jù)庫或目標(biāo)關(guān)系型數(shù)據(jù)庫所返回的操作結(jié)果,將所述操作結(jié)果轉(zhuǎn)換為所述應(yīng)用程序可解析的數(shù)據(jù)格式,并發(fā)送給所述應(yīng)用服務(wù)器中的所述應(yīng)用程序。
[0053]結(jié)果適配及轉(zhuǎn)發(fā)模塊15設(shè)置在服務(wù)器中,用于接收數(shù)據(jù)庫服務(wù)器中的目標(biāo)非關(guān)系型數(shù)據(jù)庫或目標(biāo)關(guān)系型數(shù)據(jù)庫的操作結(jié)果。由于查詢類操作對應(yīng)的操作結(jié)果與非查詢類操作對應(yīng)的操作結(jié)果的形式不同,因此,結(jié)果適配及轉(zhuǎn)發(fā)模塊15需要對接收到的操作結(jié)果進(jìn)行轉(zhuǎn)換。
[0054]若目標(biāo)非關(guān)系型數(shù)據(jù)庫或目標(biāo)關(guān)系型數(shù)據(jù)庫執(zhí)行的是查詢類的操作,則結(jié)果適配及轉(zhuǎn)發(fā)模塊15將查詢到是數(shù)據(jù)轉(zhuǎn)換為預(yù)先定義的格式,該預(yù)先定義的格式是應(yīng)用程序可識別的格式,進(jìn)而將轉(zhuǎn)換格式后的操作結(jié)果轉(zhuǎn)發(fā)給應(yīng)用程序所在的應(yīng)用服務(wù)器,從而應(yīng)用程序可以接收到可識別格式操作結(jié)果;若目標(biāo)非關(guān)系型數(shù)據(jù)庫或目標(biāo)關(guān)系型數(shù)據(jù)庫執(zhí)行的是非查詢類的操作,則結(jié)果適配及轉(zhuǎn)發(fā)模塊15將操作結(jié)果轉(zhuǎn)換為預(yù)先定義的標(biāo)準(zhǔn)SQL結(jié)果代碼轉(zhuǎn)發(fā)給應(yīng)用程序所在的應(yīng)用服務(wù)器,從而應(yīng)用程序可以接收到該標(biāo)準(zhǔn)SQL格式的操作結(jié)果。
[0055]本發(fā)明實(shí)施例提供的服務(wù)器,接收目標(biāo)非關(guān)系型數(shù)據(jù)庫或目標(biāo)關(guān)系型數(shù)據(jù)庫所返回的操作結(jié)果,將操作結(jié)果轉(zhuǎn)換為應(yīng)用程序可解析的數(shù)據(jù)格式,并發(fā)送給應(yīng)用服務(wù)器中的應(yīng)用程序,從而使得應(yīng)用程序不僅在需要訪問數(shù)據(jù)庫時無需考慮不同數(shù)據(jù)庫的語法差異,而且在接收操作結(jié)果時,所接收到的操作結(jié)果的格式也是應(yīng)用程序可識別的格式,有效地提高了應(yīng)用程序訪問數(shù)據(jù)庫的效率。
[0056]本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述各方法實(shí)施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成。前述的程序可以存儲于一計(jì)算機(jī)可讀取存儲介質(zhì)中。該程序在執(zhí)行時,執(zhí)行包括上述各方法實(shí)施例的步驟;而前述的存儲介質(zhì)包括:R0M、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
[0057]圖4為本發(fā)明數(shù)據(jù)庫訪問方法一實(shí)施例的流程圖,如圖4所示,該方法包括:
[0058]步驟101、接收應(yīng)用服務(wù)器中的應(yīng)用程序發(fā)送的第一訪問語句,所述第一訪問語句為標(biāo)準(zhǔn)的結(jié)構(gòu)化查詢語言;
[0059]步驟102、獲取所述第一訪問語句中攜帶的第一操作指令以及作為所述第一操作指令的訪問對象的數(shù)據(jù)表的標(biāo)識信息,在所述第一操作指令為非關(guān)系型數(shù)據(jù)庫可進(jìn)行的操作時,判斷所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫中;
[0060]步驟103、在判斷出所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)已被抽取到非關(guān)系型數(shù)據(jù)庫中時,將所述數(shù)據(jù)表抽取到的非關(guān)系型數(shù)據(jù)庫確定為目標(biāo)非關(guān)系型數(shù)據(jù)庫,并將所述第一操作指令轉(zhuǎn)譯為所述目標(biāo)非關(guān)系型數(shù)據(jù)庫可解析的第二操作指令,所述第二操作指令為非結(jié)構(gòu)化查詢語言;
[0061]步驟104、將所述第二操作指令和所述數(shù)據(jù)表的標(biāo)識信息發(fā)送至所述目標(biāo)非關(guān)系型數(shù)據(jù)庫,以供所述目標(biāo)非關(guān)系型數(shù)據(jù)庫根據(jù)所述第二操作指令對所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表進(jìn)行查詢。
[0062]圖5為本發(fā)明數(shù)據(jù)庫訪問方法另一實(shí)施例的流程圖,如圖5所示,步驟102中在判斷所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫中之后,該方法包括:
[0063]步驟105、在判斷出所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)未被抽取到非關(guān)系型數(shù)據(jù)庫中時,將所述數(shù)據(jù)表所屬的關(guān)系型數(shù)據(jù)庫確定為目標(biāo)關(guān)系型數(shù)據(jù)庫,并將所述第一操作指令轉(zhuǎn)譯為所述目標(biāo)關(guān)系型數(shù)據(jù)庫可解析的第三操作指令,所述第三操作指令為與所述目標(biāo)關(guān)系型數(shù)據(jù)庫的類型對應(yīng)的結(jié)構(gòu)化查詢語言;
[0064]步驟106、將所述第三操作指令和所述數(shù)據(jù)表的標(biāo)識信息發(fā)送至所述目標(biāo)關(guān)系型數(shù)據(jù)庫,以供所述目標(biāo)關(guān)系型數(shù)據(jù)庫根據(jù)所述第三操作指令對所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表進(jìn)行操作。
[0065]本發(fā)明實(shí)施例提供的數(shù)據(jù)庫訪問方法,通過接收應(yīng)用服務(wù)器中的應(yīng)用程序發(fā)送的第一訪問語句,獲取第一訪問語句中攜帶的第一操作指令以及作為第一操作指令的訪問對象的數(shù)據(jù)表的標(biāo)識信息,在第一操作指令為非關(guān)系型數(shù)據(jù)庫可進(jìn)行的操作時,判斷標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫中;在判斷出標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)已被抽取到非關(guān)系型數(shù)據(jù)庫中時,將第一操作指令轉(zhuǎn)譯為目標(biāo)非關(guān)系型數(shù)據(jù)庫可解析的第二操作指令;在判斷出標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)未被抽取到非關(guān)系型數(shù)據(jù)庫中時,將第一操作指令轉(zhuǎn)譯為目標(biāo)關(guān)系型數(shù)據(jù)庫可解析的第三操作指令;將數(shù)據(jù)表的標(biāo)識信息和第二操作指令發(fā)送至目標(biāo)非關(guān)系型數(shù)據(jù)庫,或者將數(shù)據(jù)表的標(biāo)識信息和第三操作指令發(fā)送至目標(biāo)關(guān)系型數(shù)據(jù)庫,以供目標(biāo)非關(guān)系型數(shù)據(jù)庫或目標(biāo)關(guān)系型數(shù)據(jù)庫完成對數(shù)據(jù)表的操作。將關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫統(tǒng)一集成到異構(gòu)數(shù)據(jù)庫服務(wù)引擎中,將標(biāo)準(zhǔn)SQL轉(zhuǎn)譯為NoSQL或不同關(guān)系型數(shù)據(jù)庫分別采用的SQL,使得應(yīng)用程序無需考慮不同類型數(shù)據(jù)庫之間的訪問語言的差異,采用標(biāo)準(zhǔn)SQL即可實(shí)現(xiàn)對不同類型數(shù)據(jù)庫的訪問,并且采用了讀寫分離、實(shí)時備份的解決方案,實(shí)現(xiàn)了在保持關(guān)系型數(shù)據(jù)庫功能的同時,利用非關(guān)系型數(shù)據(jù)庫滿足了對數(shù)據(jù)庫高并發(fā)讀寫、對海量數(shù)據(jù)的高效率存儲和訪問、高可擴(kuò)展性和高可用性等方面的需求。
[0066]圖6為本發(fā)明數(shù)據(jù)庫訪問方法又一實(shí)施例的流程圖,如圖6所示,在上述各實(shí)施例的基礎(chǔ)上,步驟102具體包括:
[0067]步驟201、獲取所述第一訪問語句中攜帶的所述第一操作指令以及作為所述第一操作指令的訪問對象的數(shù)據(jù)表的標(biāo)識信息;
[0068]步驟202、在查詢到所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表所屬的關(guān)系型數(shù)據(jù)庫為預(yù)設(shè)的所述應(yīng)用程序可訪問的一個或多個關(guān)系型數(shù)據(jù)庫中的關(guān)系型數(shù)據(jù)庫,并且所述第一操作指令為非關(guān)系型數(shù)據(jù)庫可進(jìn)行的操作時,判斷所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫中。
[0069]本發(fā)明實(shí)施例提供的數(shù)據(jù)庫訪問方法,獲取到第一操作指令以及作為第一操作指令的訪問對象的數(shù)據(jù)表的標(biāo)識信息之后,需要在查詢到標(biāo)識信息對應(yīng)的數(shù)據(jù)表所屬的關(guān)系型數(shù)據(jù)庫為預(yù)設(shè)的應(yīng)用程序可訪問的一個或多個關(guān)系型數(shù)據(jù)庫中的關(guān)系型數(shù)據(jù)庫的前提下,才進(jìn)一步判斷第一操作指令是否為非關(guān)系型數(shù)據(jù)庫可進(jìn)行的操作,以及判斷標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫中,起到了對應(yīng)用程序的訪問請求進(jìn)行認(rèn)證的作用,只將應(yīng)用程序有權(quán)限訪問的數(shù)據(jù)庫開放給該應(yīng)用程序,有效地提高了數(shù)據(jù)庫訪問的安全性。
[0070]進(jìn)一步地,在上述各實(shí)施例的基礎(chǔ)上,在查詢所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表所屬的關(guān)系型數(shù)據(jù)庫是否為預(yù)設(shè)的所述應(yīng)用程序可訪問的一個或多個關(guān)系型數(shù)據(jù)庫中的關(guān)系型數(shù)據(jù)庫之前,該方法還包括:
[0071]步驟301、預(yù)先配置所述應(yīng)用服務(wù)器中的至少一個應(yīng)用程序分別可訪問的一個或多個關(guān)系型數(shù)據(jù)庫。
[0072]本發(fā)明實(shí)施例提供的數(shù)據(jù)庫訪問方法,需要預(yù)先配置應(yīng)用服務(wù)器中各應(yīng)用程序分別可訪問的一個或多個關(guān)系型數(shù)據(jù)庫,以供服務(wù)器在從應(yīng)用程序發(fā)送的訪問語句中獲取到數(shù)據(jù)表的標(biāo)識信息和第一操作指令之后,可以通過預(yù)先配置的應(yīng)用程序的訪問權(quán)限,對是否允許應(yīng)用程序訪問相應(yīng)的關(guān)系型數(shù)據(jù)進(jìn)行查詢,有效地提高了數(shù)據(jù)庫訪問的安全性。
[0073]進(jìn)一步地,在上述各實(shí)施例的基礎(chǔ)上,在步驟104或步驟106之后,該方法還包括:
[0074]步驟401、接收所述目標(biāo)非關(guān)系型數(shù)據(jù)庫或目標(biāo)關(guān)系型數(shù)據(jù)庫所返回的操作結(jié)果,將所述操作結(jié)果轉(zhuǎn)換為所述應(yīng)用程序可解析的數(shù)據(jù)格式,并發(fā)送給所述應(yīng)用服務(wù)器中的所述應(yīng)用程序。[0075]本發(fā)明實(shí)施例提供的數(shù)據(jù)庫訪問方法,接收目標(biāo)非關(guān)系型數(shù)據(jù)庫或目標(biāo)關(guān)系型數(shù)據(jù)庫所返回的操作結(jié)果,將操作結(jié)果轉(zhuǎn)換為應(yīng)用程序可解析的數(shù)據(jù)格式,并發(fā)送給應(yīng)用服務(wù)器中的應(yīng)用程序,從而使得應(yīng)用程序不僅在需要訪問數(shù)據(jù)庫時無需考慮不同數(shù)據(jù)庫的語法差異,而且在接收操作結(jié)果時,所接收到的操作結(jié)果的格式也是應(yīng)用程序可識別的格式,有效地提高了應(yīng)用程序訪問數(shù)據(jù)庫的效率。
[0076]具體的,本發(fā)明各實(shí)施例中的數(shù)據(jù)庫訪問方法可以參見上述各裝置實(shí)施例中所述的方法,此處不再贅述。
[0077]最后應(yīng)說明的是:以上各實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述各實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。
【權(quán)利要求】
1.一種服務(wù)器,其特征在于,包括: 接收模塊,用于接收應(yīng)用服務(wù)器中的應(yīng)用程序發(fā)送的第一訪問語句,所述第一訪問語句為標(biāo)準(zhǔn)的結(jié)構(gòu)化查詢語言; 訪問規(guī)則路由模塊,用于獲取所述接收模塊接收到的所述第一訪問語句中攜帶的第一操作指令以及作為所述第一操作指令的訪問對象的數(shù)據(jù)表的標(biāo)識信息,在所述第一操作指令為非關(guān)系型數(shù)據(jù)庫可進(jìn)行的操作時,判斷所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫中; 語義轉(zhuǎn)譯模塊,用于在所述訪問規(guī)則路由模塊判斷出所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)已被抽取到非關(guān)系型數(shù)據(jù)庫中時,將所述數(shù)據(jù)表抽取到的非關(guān)系型數(shù)據(jù)庫確定為目標(biāo)非關(guān)系型數(shù)據(jù)庫,并將所述第一操作指令轉(zhuǎn)譯為所述目標(biāo)非關(guān)系型數(shù)據(jù)庫可解析的第二操作指令,所述第二操作指令為非結(jié)構(gòu)化查詢語言; 連接協(xié)議適配模塊,用于將所述語義轉(zhuǎn)譯模塊得到的所述第二操作指令和所述數(shù)據(jù)表的標(biāo)識信息發(fā)送至所述目標(biāo)非關(guān)系型數(shù)據(jù)庫,以供所述目標(biāo)非關(guān)系型數(shù)據(jù)庫根據(jù)所述第二操作指令對所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表進(jìn)行查詢。
2.根據(jù)權(quán)利要求1所述的服務(wù)器,其特征在于,所述語義轉(zhuǎn)譯模塊還用于: 在所述訪問規(guī)則路由模塊判斷出所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)未被抽取到非關(guān)系型數(shù)據(jù)庫中時,將所述數(shù)據(jù)表所屬的關(guān)系型數(shù)據(jù)庫確定為目標(biāo)關(guān)系型數(shù)據(jù)庫,并將所述第一操作指令轉(zhuǎn)譯為所述目標(biāo)關(guān)系型數(shù)據(jù)庫可解析的第三操作指令,所述第三操作指令為與所述目標(biāo)關(guān)系型數(shù)據(jù)庫的類型對應(yīng)的結(jié)構(gòu)化查詢語言; 相應(yīng)地,所述連接協(xié)議適配模塊還用于,將所述語義轉(zhuǎn)譯模塊得到的所述第三操作指令和所述數(shù)據(jù)表的標(biāo)識信息發(fā)送至所述目標(biāo)關(guān)系型數(shù)據(jù)庫,以供所述目標(biāo)關(guān)系型數(shù)據(jù)庫根據(jù)所述第三操作指令對所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表進(jìn)行操作。`
3.根據(jù)權(quán)利要求2所述的服務(wù)器,其特征在于,所述訪問規(guī)則路由模塊具體用于: 獲取所述接收模塊接收到的所述第一訪問語句中攜帶的所述第一操作指令以及作為所述第一操作指令的訪問對象的數(shù)據(jù)表的標(biāo)識信息,在查詢到所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表所屬的關(guān)系型數(shù)據(jù)庫為預(yù)設(shè)的所述應(yīng)用程序可訪問的一個或多個關(guān)系型數(shù)據(jù)庫中的關(guān)系型數(shù)據(jù)庫,并且所述第一操作指令為非關(guān)系型數(shù)據(jù)庫可進(jìn)行的操作時,判斷所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫中。
4.根據(jù)權(quán)利要求3所述的服務(wù)器,其特征在于,所述訪問規(guī)則路由模塊還用于: 預(yù)先配置所述應(yīng)用服務(wù)器中的至少一個應(yīng)用程序分別可訪問的一個或多個關(guān)系型數(shù)據(jù)庫。
5.根據(jù)權(quán)利要求2所述的服務(wù)器,其特征在于,所述服務(wù)器還包括: 結(jié)果適配及轉(zhuǎn)發(fā)模塊,用于接收所述目標(biāo)非關(guān)系型數(shù)據(jù)庫或目標(biāo)關(guān)系型數(shù)據(jù)庫所返回的操作結(jié)果,將所述操作結(jié)果轉(zhuǎn)換為所述應(yīng)用程序可解析的數(shù)據(jù)格式,并發(fā)送給所述應(yīng)用服務(wù)器中的所述應(yīng)用程序。
6.一種數(shù)據(jù)庫訪問方法,其特征在于,包括: 接收應(yīng)用服務(wù)器中的應(yīng)用程序發(fā)送的第一訪問語句,所述第一訪問語句為標(biāo)準(zhǔn)的結(jié)構(gòu)化查詢語言; 獲取所述第一訪問語句中攜帶的第一操作指令以及作為所述第一操作指令的訪問對象的數(shù)據(jù)表的標(biāo)識信息,在所述第一操作指令為非關(guān)系型數(shù)據(jù)庫可進(jìn)行的操作時,判斷所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫中; 在判斷出所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)已被抽取到非關(guān)系型數(shù)據(jù)庫中時,將所述數(shù)據(jù)表抽取到的非關(guān)系型數(shù)據(jù)庫確定為目標(biāo)非關(guān)系型數(shù)據(jù)庫,并將所述第一操作指令轉(zhuǎn)譯為所述目標(biāo)非關(guān)系型數(shù)據(jù)庫可解析的第二操作指令,所述第二操作指令為非結(jié)構(gòu)化查詢語H ; 將所述第二操作指令和所述數(shù)據(jù)表的標(biāo)識信息發(fā)送至所述目標(biāo)非關(guān)系型數(shù)據(jù)庫,以供所述目標(biāo)非關(guān)系型數(shù)據(jù)庫根據(jù)所述第二操作指令對所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表進(jìn)行查詢。
7.根據(jù)權(quán)利要求6所述的數(shù)據(jù)庫訪問方法,其特征在于,所述判斷所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫中之后,所述方法還包括: 在判斷出所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)未被抽取到非關(guān)系型數(shù)據(jù)庫中時,將所述數(shù)據(jù)表所屬的關(guān)系型數(shù)據(jù)庫確定為目標(biāo)關(guān)系型數(shù)據(jù)庫,并將所述第一操作指令轉(zhuǎn)譯為所述目標(biāo)關(guān)系型數(shù)據(jù)庫可解析的第三操作指令,所述第三操作指令為與所述目標(biāo)關(guān)系型數(shù)據(jù)庫的類型對應(yīng)的結(jié)構(gòu)化查詢語言; 將所述第三操作指令和所述數(shù)據(jù)表的標(biāo)識信息發(fā)送至所述目標(biāo)關(guān)系型數(shù)據(jù)庫,以供所述目標(biāo)關(guān)系型數(shù)據(jù)庫根據(jù)所述第三操作指令對所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表進(jìn)行操作。
8.根據(jù)權(quán)利要求6或7所述的數(shù)據(jù)庫訪問方法,其特征在于,所述獲取所述第一訪問語句中攜帶的第一操作指令以及作為所述第一操作指令的訪問對象的數(shù)據(jù)表的標(biāo)識信息,并判斷所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫中具體為: 獲取所述第一訪問語句中攜帶的所述第一操作指令以及作為所述第一操作指令的訪問對象的數(shù)據(jù)表的標(biāo)識信息; 在查詢到所述標(biāo)識信 息對應(yīng)的數(shù)據(jù)表所屬的關(guān)系型數(shù)據(jù)庫為預(yù)設(shè)的所述應(yīng)用程序可訪問的一個或多個關(guān)系型數(shù)據(jù)庫中的關(guān)系型數(shù)據(jù)庫,并且所述第一操作指令為非關(guān)系型數(shù)據(jù)庫可進(jìn)行的操作時,判斷所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表中的數(shù)據(jù)是否已被抽取到非關(guān)系型數(shù)據(jù)庫中。
9.根據(jù)權(quán)利要求8所述的數(shù)據(jù)庫訪問方法,其特征在于,在查詢所述標(biāo)識信息對應(yīng)的數(shù)據(jù)表所屬的關(guān)系型數(shù)據(jù)庫是否為預(yù)設(shè)的所述應(yīng)用程序可訪問的一個或多個關(guān)系型數(shù)據(jù)庫中的關(guān)系型數(shù)據(jù)庫之前,所述方法還包括: 預(yù)先配置所述應(yīng)用服務(wù)器中的至少一個應(yīng)用程序分別可訪問的一個或多個關(guān)系型數(shù)據(jù)庫。
10.根據(jù)權(quán)利要求6或7所述的數(shù)據(jù)庫訪問方法,其特征在于,所述方法還包括: 接收所述目標(biāo)非關(guān)系型數(shù)據(jù)庫或目標(biāo)關(guān)系型數(shù)據(jù)庫所返回的操作結(jié)果,將所述操作結(jié)果轉(zhuǎn)換為所述應(yīng)用程序可解析的數(shù)據(jù)格式,并發(fā)送給所述應(yīng)用服務(wù)器中的所述應(yīng)用程序。
【文檔編號】G06F17/30GK103823815SQ201210468533
【公開日】2014年5月28日 申請日期:2012年11月19日 優(yōu)先權(quán)日:2012年11月19日
【發(fā)明者】郭志斌, 李衛(wèi), 張?jiān)朴? 申請人:中國聯(lián)合網(wǎng)絡(luò)通信集團(tuán)有限公司