數(shù)據(jù)的查詢方法及查詢裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及數(shù)據(jù)庫(kù)技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)的查詢方法及數(shù)據(jù)的查詢裝置。
【背景技術(shù)】
[0002]隨著社交網(wǎng)絡(luò)和移動(dòng)互聯(lián)網(wǎng)的發(fā)展,數(shù)據(jù)呈現(xiàn)爆炸式增長(zhǎng),甚至過(guò)去數(shù)年里產(chǎn)生的數(shù)據(jù)量超越了以往數(shù)千年的數(shù)據(jù)量。數(shù)據(jù)成為企業(yè)最寶貴的資源,而數(shù)據(jù)挖掘、數(shù)據(jù)分析等技術(shù)的不斷深入,使得企業(yè)決策越來(lái)越依賴于數(shù)據(jù),全面、完整的數(shù)據(jù)將為決策提供更好的支持。
[0003]企業(yè)可獲得的數(shù)據(jù)往往涉及到各種不同的存儲(chǔ)引擎和存儲(chǔ)模式,例如,既有RDS(Relat1nal Database Service,關(guān)系型數(shù)據(jù)庫(kù)服務(wù))類(lèi)型的數(shù)據(jù)庫(kù),包括Oracle、MySQL、OceanBase等存儲(chǔ)引擎,也有KV (Key-Value,鍵值)類(lèi)型的數(shù)據(jù)庫(kù),包括Tair、Hbase等存儲(chǔ)引擎。如果某個(gè)上層業(yè)務(wù)需要查詢所有這些數(shù)據(jù)庫(kù),則實(shí)現(xiàn)起來(lái)有一定難度。
[0004]現(xiàn)有技術(shù)中,微軟的Polybase技術(shù)通過(guò)將PDW(ParalIel Data Warehouse,并彳丁數(shù)據(jù)倉(cāng)庫(kù))中的數(shù)據(jù)導(dǎo)出或?qū)氲紿adoop,可以實(shí)現(xiàn)關(guān)聯(lián)查詢Hadoop數(shù)據(jù)和關(guān)系型數(shù)據(jù)庫(kù),從而能夠部分實(shí)現(xiàn)上述功能。但是,將數(shù)據(jù)導(dǎo)入導(dǎo)出Hadoop仍需要相當(dāng)?shù)墓ぷ髁?,并且不能夠適配所有的存儲(chǔ)引擎(如Tai^OceanBase等并不適用),影響了數(shù)據(jù)查詢的完整性。
【發(fā)明內(nèi)容】
[0005]有鑒于此,本申請(qǐng)?zhí)峁┮环N數(shù)據(jù)的查詢方法,所述數(shù)據(jù)保存在至少兩個(gè)不同的數(shù)據(jù)庫(kù)中,所述方法包括:
[0006]接收基于業(yè)務(wù)模型的查詢請(qǐng)求;所述業(yè)務(wù)模型包括業(yè)務(wù)元素;
[0007]根據(jù)業(yè)務(wù)模型與存儲(chǔ)模型的轉(zhuǎn)換規(guī)則,將所述查詢請(qǐng)求轉(zhuǎn)換為匹配于所查詢數(shù)據(jù)庫(kù)的執(zhí)行方式;所述存儲(chǔ)模型包括所查詢數(shù)據(jù)庫(kù)的屬性信息;所述轉(zhuǎn)換規(guī)則包括業(yè)務(wù)元素與所查詢數(shù)據(jù)庫(kù)中屬性的對(duì)應(yīng)關(guān)系;
[0008]按照所述執(zhí)行方式訪問(wèn)對(duì)應(yīng)的數(shù)據(jù)庫(kù)。
[0009]本申請(qǐng)還提供了一種數(shù)據(jù)的查詢裝置,所述數(shù)據(jù)保存在至少兩個(gè)不同的數(shù)據(jù)庫(kù)中,所述裝置包括:
[0010]請(qǐng)求接收單元,用于接收基于業(yè)務(wù)模型的查詢請(qǐng)求;所述業(yè)務(wù)模型包括業(yè)務(wù)元素;
[0011]轉(zhuǎn)換單元,用于根據(jù)業(yè)務(wù)模型與存儲(chǔ)模型的轉(zhuǎn)換規(guī)則,將所述查詢請(qǐng)求轉(zhuǎn)換為匹配于所查詢數(shù)據(jù)庫(kù)的執(zhí)行方式;所述存儲(chǔ)模型包括所查詢數(shù)據(jù)庫(kù)的屬性信息;所述轉(zhuǎn)換規(guī)則包括業(yè)務(wù)元素與所查詢數(shù)據(jù)庫(kù)中屬性的對(duì)應(yīng)關(guān)系;
[0012]數(shù)據(jù)庫(kù)訪問(wèn)單元,用于按照所述執(zhí)行方式訪問(wèn)對(duì)應(yīng)的數(shù)據(jù)庫(kù)。
[0013]由以上技術(shù)方案可見(jiàn),本申請(qǐng)的實(shí)施例通過(guò)業(yè)務(wù)模型和存儲(chǔ)模型間的轉(zhuǎn)換規(guī)則,將用戶以業(yè)務(wù)模型為基礎(chǔ)的查詢請(qǐng)求轉(zhuǎn)換為針對(duì)所查詢數(shù)據(jù)庫(kù)的執(zhí)行方式,不僅避免了數(shù)據(jù)在不同數(shù)據(jù)庫(kù)間的導(dǎo)入導(dǎo)出,而且能夠?qū)m用的數(shù)據(jù)庫(kù)沒(méi)有限制;同時(shí)在用戶層面屏蔽了底層數(shù)據(jù)庫(kù)的差異,提高了查詢的便利性和完備性。
【附圖說(shuō)明】
[0014]圖1是本申請(qǐng)實(shí)施例中業(yè)務(wù)模型的一種元數(shù)據(jù)描述示例圖;
[0015]圖2是本申請(qǐng)實(shí)施例中數(shù)據(jù)的查詢方法的流程圖;
[0016]圖3是計(jì)算設(shè)備的一種硬件結(jié)構(gòu)圖;
[0017]圖4是本申請(qǐng)實(shí)施例中一種數(shù)據(jù)的查詢裝置的邏輯結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0018]本申請(qǐng)的實(shí)施例提出一種新的數(shù)據(jù)的查詢方法來(lái)解決現(xiàn)有技術(shù)中存在的問(wèn)題。本申請(qǐng)的實(shí)施例中,按照業(yè)務(wù)需求,總結(jié)業(yè)務(wù)特征,生成面向業(yè)務(wù)的業(yè)務(wù)模型;依據(jù)被訪問(wèn)數(shù)據(jù)庫(kù)的存儲(chǔ)引擎、數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)、存儲(chǔ)模式等因素生成存儲(chǔ)模型;在業(yè)務(wù)模型和存儲(chǔ)模型之間建立轉(zhuǎn)換規(guī)則,將用戶從業(yè)務(wù)角度所做的查詢轉(zhuǎn)換為匹配于被訪問(wèn)數(shù)據(jù)庫(kù)的查詢指令,從而能夠適配與任何類(lèi)型的數(shù)據(jù)庫(kù);并且對(duì)用戶而言只需關(guān)注于業(yè)務(wù)本身,屏蔽了底層的數(shù)據(jù)差異。
[0019]業(yè)務(wù)模型通常由業(yè)務(wù)人員分析業(yè)務(wù)的具體場(chǎng)景,將完成業(yè)務(wù)場(chǎng)景所需的各項(xiàng)信息作為業(yè)務(wù)元素,并且結(jié)合業(yè)務(wù)特征總結(jié)這些業(yè)務(wù)元素之間的關(guān)聯(lián)關(guān)系,從而生成描述業(yè)務(wù)場(chǎng)景的業(yè)務(wù)模型。
[0020]在一種實(shí)施方式中,可以采用以元數(shù)據(jù)格式來(lái)描述業(yè)務(wù)場(chǎng)景的業(yè)務(wù)模型。例如,一個(gè)業(yè)務(wù)模型可以用如下元數(shù)據(jù)描述,其示意圖請(qǐng)參見(jiàn)圖1:
[0021]業(yè)務(wù)元素子集:定義該業(yè)務(wù)模型中包括的各項(xiàng)業(yè)務(wù)元素;
[0022]約束子集:定義業(yè)務(wù)元素的約束信息、和/或業(yè)務(wù)元素之間的約束信息;如業(yè)務(wù)元素的值域范圍、某些業(yè)務(wù)元素不能同時(shí)使用等;
[0023]實(shí)例子集:定義業(yè)務(wù)元素的實(shí)例信息,即使用業(yè)務(wù)元素描述的實(shí)例是哪些;
[0024]流子集:定義數(shù)據(jù)流信息,即與業(yè)務(wù)元素相關(guān)的時(shí)序流程、動(dòng)作等;
[0025]映射子集:定義本業(yè)務(wù)模型與其他業(yè)務(wù)模型的映射關(guān)系,包括與其他模型之間的關(guān)聯(lián)、對(duì)應(yīng)以及相互轉(zhuǎn)換的情形。
[0026]以一種具體的業(yè)務(wù)場(chǎng)景——客戶管理為例,總結(jié)業(yè)務(wù)特征抽象的業(yè)務(wù)模型——客戶模型的元數(shù)據(jù)描述包括:
[0027]業(yè)務(wù)元素子集:客戶編號(hào)、客戶名稱、客戶類(lèi)型、客戶聯(lián)系方式;
[0028]約束子集:客戶編號(hào)、客戶名稱不能為空;客戶類(lèi)型為個(gè)人或機(jī)構(gòu)二選一;
[0029]實(shí)例子集:客戶模型的實(shí)例有個(gè)人客戶和機(jī)構(gòu)客戶。
[0030]通過(guò)采用元數(shù)據(jù)語(yǔ)言,在更高的抽象層面統(tǒng)一了業(yè)務(wù)元素和業(yè)務(wù)模型的建模方法,提供了完整、共享、一致的業(yè)務(wù)元素和業(yè)務(wù)模型的視圖。
[0031]本申請(qǐng)的實(shí)施例中,存儲(chǔ)模型描述所查詢數(shù)據(jù)庫(kù)的數(shù)據(jù)存儲(chǔ),包括定義一個(gè)數(shù)據(jù)存儲(chǔ)所需的必要信息,還可以包括各類(lèi)實(shí)際存儲(chǔ)引擎共性的信息。具體而言,存儲(chǔ)模型包括所查詢數(shù)據(jù)庫(kù)的屬性信息,還可以包括存儲(chǔ)數(shù)據(jù)源名稱、存儲(chǔ)數(shù)據(jù)源類(lèi)型、存儲(chǔ)sharding(分片)模式和/或存儲(chǔ)數(shù)據(jù)區(qū)名稱。
[0032]所查詢數(shù)據(jù)庫(kù)的屬性信息包括數(shù)據(jù)庫(kù)中實(shí)體型所具有的屬性;存儲(chǔ)數(shù)據(jù)源名稱包括用來(lái)建立到所查詢數(shù)據(jù)庫(kù)的連接所需的信息;存儲(chǔ)數(shù)據(jù)源類(lèi)型可以是所查詢數(shù)據(jù)庫(kù)的存儲(chǔ)引擎等信息;存儲(chǔ)sharding模式可以是讀寫(xiě)分離、水平拆分等;存儲(chǔ)數(shù)據(jù)區(qū)名稱對(duì)關(guān)系型數(shù)據(jù)庫(kù)可以是表,對(duì)KV存儲(chǔ)可以是命名空間等。
[0033]可以根據(jù)具體的應(yīng)用場(chǎng)景需要來(lái)確定存儲(chǔ)模型中具體要包括哪些信息。例如,如果需要查詢的所有數(shù)據(jù)庫(kù)都采用同樣的sharding模式、具有同樣的存儲(chǔ)數(shù)據(jù)源類(lèi)型,則存儲(chǔ)模型中可以不包括這兩項(xiàng)。
[0034]存儲(chǔ)模型可以人工生成,也可以由程序自動(dòng)生成。
[0035]本申請(qǐng)實(shí)施例中的數(shù)據(jù)查詢方法應(yīng)用于所查詢的數(shù)據(jù)保存在至少兩個(gè)不同的數(shù)據(jù)庫(kù)中的場(chǎng)景。這些數(shù)據(jù)庫(kù)的不同是指對(duì)這些數(shù)據(jù)庫(kù)做相同的查詢時(shí),其具體的實(shí)現(xiàn)方式不同,例如,可以是所采用的存儲(chǔ)引擎不同,也可以是存儲(chǔ)引擎相同而數(shù)據(jù)的組織形式不同。本實(shí)施例中,數(shù)據(jù)查詢方法的流程如圖2所示。
[0036]在步驟S210,接收基于業(yè)務(wù)模型的查詢請(qǐng)求。
[0037]本實(shí)施例中,向用戶提供基于業(yè)務(wù)模型的查詢方式。由于業(yè)務(wù)模型以業(yè)務(wù)元素為基礎(chǔ),用戶的查詢請(qǐng)求中通常包括基于業(yè)務(wù)元素的查詢條件。如前所述,業(yè)務(wù)模型是針對(duì)業(yè)務(wù)場(chǎng)景抽象而成的,基于業(yè)務(wù)模型的查詢方式可以使得用戶關(guān)注于業(yè)務(wù)需求本身,而不必關(guān)心底層不同數(shù)據(jù)庫(kù)之間的差異。
[0038]查詢請(qǐng)求的格式可以根據(jù)業(yè)務(wù)需求自行定義,也可以參照數(shù)據(jù)庫(kù)的查詢指令來(lái)定義。本實(shí)施例對(duì)此不作限定。
[0039]在一種實(shí)施方式中,可以在查詢請(qǐng)求包括兩種基于業(yè)務(wù)元素的查詢條件:基于業(yè)務(wù)元素的存儲(chǔ)獲取條件和結(jié)果過(guò)濾條件。其中,存儲(chǔ)獲取條件用來(lái)作為查詢條件,將查詢請(qǐng)求轉(zhuǎn)換為匹配于所查詢數(shù)據(jù)庫(kù)的執(zhí)行方式;而結(jié)果過(guò)濾條件用來(lái)作為在結(jié)果中進(jìn)行過(guò)濾的條件,在從各個(gè)數(shù)據(jù)庫(kù)獲得的訪問(wèn)結(jié)果中進(jìn)行篩選(即,在步驟S230中獲得的查詢結(jié)果中進(jìn)行篩選)。
[0040]例如,面向業(yè)務(wù)的查詢請(qǐng)求可以以CQL(Cassandra Query Language,Cassandra查詢語(yǔ)句)為載體,采用基于業(yè)務(wù)模型元數(shù)據(jù)的類(lèi)sql (Structured Query Language,結(jié)構(gòu)化查詢語(yǔ)言)查詢語(yǔ)言,來(lái)盡量完備、無(wú)歧義的描述查詢語(yǔ)義。
[0041]一種可能的CQL語(yǔ)句如下:
[0042]SELECT [業(yè)務(wù)元素,業(yè)務(wù)模型]FROM [業(yè)務(wù)模型]
[0043]ID業(yè)務(wù)元素判斷條件I [AND業(yè)務(wù)元素判斷條件2]
[0044][WHERE業(yè)務(wù)元素判斷條件3 [AND業(yè)務(wù)元素判斷條件4]]
[0045]上述語(yǔ)句的含義為:在業(yè)務(wù)模型中查找符合業(yè)務(wù)元素判斷條件1、業(yè)務(wù)元素判斷條件2 (可選)、業(yè)務(wù)元素判斷條件3 (可選)和業(yè)務(wù)元素判斷條件4 (可選)的業(yè)務(wù)元素或業(yè)務(wù)模型。其中,業(yè)務(wù)元素判斷條件I和業(yè)務(wù)元素判斷條件2為存儲(chǔ)獲取條件,業(yè)務(wù)元素判斷條件3和業(yè)務(wù)元素判斷條件4為結(jié)果過(guò)濾條件。
[0046]在步驟S220,根據(jù)業(yè)務(wù)模型與存儲(chǔ)模型的轉(zhuǎn)換規(guī)則,將所述查詢請(qǐng)求轉(zhuǎn)換為匹配于所查詢數(shù)據(jù)庫(kù)的執(zhí)行方式。
[0047]業(yè)務(wù)模型到存儲(chǔ)模型之間的轉(zhuǎn)換規(guī)則將業(yè)務(wù)模型中的業(yè)務(wù)元素與所查詢數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)聯(lián)系起來(lái),并且將面向業(yè)務(wù)的查詢請(qǐng)求轉(zhuǎn)換為所查詢面向數(shù)據(jù)庫(kù)的查詢指令,從而將從用戶接收的查詢請(qǐng)求轉(zhuǎn)換為匹配于數(shù)據(jù)庫(kù)的執(zhí)行方式。
[0048]轉(zhuǎn)換規(guī)則中包括業(yè)務(wù)元素與所查詢數(shù)據(jù)庫(kù)中屬性的對(duì)應(yīng)關(guān)系。例如,一個(gè)名稱為CsCustomer的業(yè)務(wù)模型,包括業(yè)務(wù)元素UserType ;一個(gè)名稱為cs_customer的存儲(chǔ)模型,包括屬性u(píng)ser_type ;則業(yè)務(wù)模型CsCustomer到存儲(chǔ)模型cs_customer的轉(zhuǎn)換規(guī)則可以是:「CsCustomer, UserType, cs_customer, user_type, oneToOneMapping」,含義為 Customer 業(yè)務(wù)模型中的UserType業(yè)務(wù)元素在cs_customer存儲(chǔ)模型中的user_type屬性字段里,這個(gè)業(yè)務(wù)元素與屬性之間是一一映射的(即在數(shù)據(jù)庫(kù)中是什么值,在業(yè)務(wù)模型里就是什么值)。在根據(jù)轉(zhuǎn)換規(guī)則將查詢請(qǐng)求轉(zhuǎn)換為匹配于所查詢數(shù)據(jù)庫(kù)的執(zhí)行方式時(shí),會(huì)按照業(yè)務(wù)元素與屬性的對(duì)應(yīng)關(guān)系,將查詢條件、或者還包括查詢對(duì)象由業(yè)務(wù)元素描述轉(zhuǎn)換為由數(shù)據(jù)庫(kù)的屬性描述。
[0049]根據(jù)具體的業(yè)務(wù)場(chǎng)景、所采用的業(yè)務(wù)模型和存儲(chǔ)模型,轉(zhuǎn)換規(guī)則中還可以包括將查詢請(qǐng)求轉(zhuǎn)換為對(duì)數(shù)據(jù)庫(kù)訪問(wèn)指令所需的其他規(guī)則。例如,要查詢的數(shù)據(jù)庫(kù)采用不同存儲(chǔ)引擎(如包括Oracle數(shù)據(jù)庫(kù)和Tair數(shù)據(jù)庫(kù)的情形),則轉(zhuǎn)換規(guī)則中,還會(huì)包括所查詢數(shù)據(jù)庫(kù)的存儲(chǔ)數(shù)據(jù)