王戰(zhàn)英, 王占宏
(上海眾恒信息產(chǎn)業(yè)股份有限公司,上海 200042)
基于元數(shù)據(jù)的分布式通用查詢系統(tǒng)研究與實(shí)現(xiàn)
王戰(zhàn)英, 王占宏
(上海眾恒信息產(chǎn)業(yè)股份有限公司,上海 200042)
信息查詢是所有信息系統(tǒng)中的基礎(chǔ)功能,不同的業(yè)務(wù)有不同的查詢要求和結(jié)果展示要求。傳統(tǒng)的解決方法是由程序員根據(jù)不同的業(yè)務(wù)要求定制開發(fā)不同的查詢模塊,造成了很多的重復(fù)工作,既降低了開發(fā)效率,又增加了開發(fā)成本。另一方面,傳統(tǒng)的查詢模塊大多是和業(yè)務(wù)系統(tǒng)共用一個(gè)數(shù)據(jù)庫,少部分有獨(dú)立的查詢、分析數(shù)據(jù)庫,基本都是集中式的關(guān)系型數(shù)據(jù)庫,隨著業(yè)務(wù)數(shù)據(jù)的快速增長,系統(tǒng)的性能就往往有明顯的下降,很難滿足用戶的實(shí)時(shí)性需求。針對這兩方面的問題,在長期實(shí)踐的基礎(chǔ)上,提出了基于元數(shù)據(jù)的分布式通用查詢系統(tǒng)研究,一方面使用模板引擎解析不同的元數(shù)據(jù),自動適應(yīng)不同的業(yè)務(wù)查詢需求,提高查詢的通用性;另一方面,基于分布式搜索引擎技術(shù),利用全索引和并行計(jì)算提高系統(tǒng)的查詢性能。通過多個(gè)系統(tǒng)的開發(fā)實(shí)踐,該成果不僅能夠滿足不同行業(yè)、不同類型系統(tǒng)90%以上的查詢需求,且響應(yīng)時(shí)間基本都在毫秒級,取得了較好的應(yīng)用效果。
通用查詢; 元數(shù)據(jù); 分布式搜索
隨著信息化的快速,各領(lǐng)域都逐步建設(shè)了符合自己業(yè)務(wù)需求的信息化系統(tǒng),這些系統(tǒng)都自成體系。伴隨信息化的深入發(fā)展,人們發(fā)現(xiàn)將一定范圍中的相關(guān)數(shù)據(jù)整合到一起,統(tǒng)一組織、開發(fā)、利用,才能使這些信息資源發(fā)揮更大的價(jià)值,實(shí)施這項(xiàng)工作的早期技術(shù)就是人們比較熟悉的數(shù)據(jù)倉庫技術(shù),按應(yīng)用主題把相關(guān)數(shù)據(jù)組織存儲在統(tǒng)一的數(shù)據(jù)庫中,既可以在各自的主題中快速查詢分析,也可以在主題之間關(guān)聯(lián)分析,消除了數(shù)據(jù)之間彼此隔離的障礙,使人們可以在更大范圍中充分發(fā)掘這些數(shù)據(jù)中蘊(yùn)含的信息,為日常的輔助決策提供有力的數(shù)據(jù)支撐[1]。數(shù)據(jù)集中存儲、統(tǒng)一管理后,面對的最直接需求就是對這些數(shù)據(jù)進(jìn)行檢索、查詢,以展示數(shù)據(jù)本來的面貌和數(shù)據(jù)之間的關(guān)聯(lián)關(guān)系。通常系統(tǒng)中的檢索、查詢功能都是根據(jù)不同的業(yè)務(wù)需求,針對不同的數(shù)據(jù)表定制開發(fā),面對大型數(shù)據(jù)倉庫中的成千上萬的數(shù)據(jù)表,這種開發(fā)方式的工作量相當(dāng)大,且也缺乏適應(yīng)性、靈活性。因此,研發(fā)一套與業(yè)務(wù)無關(guān)但又能體現(xiàn)不同業(yè)務(wù)特點(diǎn)的檢索、查詢系統(tǒng)成為應(yīng)對這個(gè)問題的關(guān)鍵。另一方面,隨著大數(shù)據(jù)時(shí)代的到來,數(shù)據(jù)呈爆炸式增長,人們很快發(fā)現(xiàn),關(guān)系型、集中式數(shù)據(jù)倉庫技術(shù)面對大規(guī)模、超大規(guī)模數(shù)據(jù)的檢索請求,不僅響應(yīng)速度慢,且經(jīng)常因資源消耗大而造成宕機(jī)。因此,急需探索新的技術(shù)來應(yīng)對大數(shù)據(jù)的挑戰(zhàn)。所以分布式存儲、分布式計(jì)算應(yīng)運(yùn)而生,分布式技術(shù)的核心思路是把超大規(guī)模的數(shù)據(jù)集分割成多個(gè)較小規(guī)模的數(shù)據(jù)集,這些較小規(guī)模的數(shù)據(jù)集分別存儲在不同的機(jī)器中,計(jì)算請求也被分發(fā)到相關(guān)的機(jī)器上,大量機(jī)器并行地在自己管理的小規(guī)模數(shù)據(jù)中快速的完成計(jì)算,最后把各自的結(jié)果匯總到客戶端形成最終結(jié)果[2]。針對以上兩方面問題,本文討論了采用分布式技術(shù),以元數(shù)據(jù)為核心,通過靈活配置,以適應(yīng)不同業(yè)務(wù)需求查詢功能的設(shè)計(jì)思路與實(shí)現(xiàn)方法。
1.1 查詢功能的內(nèi)容
查詢功能是根據(jù)用戶輸入的查詢條件,查詢出滿足條件的數(shù)據(jù)記錄。此功能包含3個(gè)部分的內(nèi)容,查詢條件的輸入與構(gòu)造,查詢結(jié)果列表的展示,單條記錄詳細(xì)信息的展示以及關(guān)聯(lián)信息展示。
1.2 查詢功能的分類
查詢功能根據(jù)條件、操作靈活性、查詢結(jié)果的處理方式以及查詢數(shù)據(jù)的格式具有不同的分類方法。
(1) 根據(jù)查詢條件的匹配精度分
根據(jù)查詢條件的匹配精度,可以把查詢功能分為精確查詢和模糊查詢。精確查詢指的是用戶輸入的每個(gè)查詢字符串與數(shù)據(jù)庫中的相應(yīng)字段值完全匹配才算命中;模糊查詢指的是用戶輸入的查詢字符串與數(shù)據(jù)庫中的相應(yīng)字段值部分匹配就算命中;模糊查詢又可根據(jù)匹配范圍分為單字段模糊查詢和多字段模糊查詢。單字段模糊查詢是指,對單個(gè)表的單個(gè)字段進(jìn)行前綴匹配、后綴匹配、包含匹配。多字段模糊查詢是指,對單個(gè)表的多個(gè)字段或多個(gè)表的多個(gè)字段進(jìn)行前綴匹配、后綴匹配、包含匹配及相識度匹配。
(2) 根據(jù)查詢操作的靈活程度分
根據(jù)查詢操作的靈活程度,可以把查詢功能分為簡單固定條件查詢、復(fù)雜自定義條件查詢和全文檢索。簡單固定條件查詢,指的是針對單個(gè)業(yè)務(wù)表,給用戶提供幾個(gè)常用字段進(jìn)行查詢,每個(gè)字段的條件一般為相等關(guān)系,也可以通過在輸入字符串中添加通配符實(shí)現(xiàn)模糊查詢,多個(gè)字段間一般為邏輯并的關(guān)系;復(fù)雜自定義條件查詢,指的是針對單個(gè)業(yè)務(wù)表,把表中可能需要查詢的所有字段都提供給用戶,由用戶在其中自己選擇用哪幾個(gè)字段來組合查詢條件,每個(gè)條件根據(jù)字段值的類型可以支持相等、不相等、大于、大于等于、小于、小于等于、包含、為空、不為空等比較運(yùn)算,多個(gè)條件之間可以由用戶選擇邏輯并或者邏輯或關(guān)系,多個(gè)條件也可以通過添加括號來支持條件分組嵌套;全文檢索,指的是只給用戶提供一個(gè)條件輸入框,用戶可以在其中輸入用空格分隔的多個(gè)字符串,查詢是相對于整個(gè)庫的所有表的所有字段進(jìn)行模糊匹配,也可以讓用戶選擇查詢范圍。
(3) 根據(jù)查詢結(jié)果的處理方式分
根據(jù)查詢結(jié)果的處理方式,可以把查詢功能分為簡單定位查詢和多級關(guān)聯(lián)查詢。簡單定位查詢,是指根據(jù)查詢條件得到單條或多條滿足條件的結(jié)果記錄,然后簡單地查看每條記錄本身的信息而不關(guān)注額外信息;多級關(guān)聯(lián)查詢,指的是除過查看滿足條件的記錄本身的信息外,也給用戶提供這條記錄其他的關(guān)聯(lián)信息,使用戶對結(jié)果了解地更清楚,并且用戶也能夠通過交互導(dǎo)航到其他相關(guān)信息。比如:對人口信息的查詢,先查詢到滿足條件的一個(gè)或多個(gè)人的信息,然后選中一個(gè)人進(jìn)一步查看此人的更詳細(xì)的信息,在詳細(xì)信息中除過展示人的基本信息外,同時(shí)展示這個(gè)人的家庭成員、工作履歷等關(guān)聯(lián)信息,用戶也可以進(jìn)一步查看此人的某個(gè)家庭成員而導(dǎo)航到另一個(gè)相關(guān)的目標(biāo),這種關(guān)聯(lián)查詢可以使用戶對查詢結(jié)果有更全面的理解。
(4) 根據(jù)查詢數(shù)據(jù)的形式分
根據(jù)查詢數(shù)據(jù)的形式,可以把查詢功能分為結(jié)構(gòu)化數(shù)據(jù)查詢和非結(jié)構(gòu)化數(shù)據(jù)查詢。結(jié)構(gòu)化數(shù)據(jù)查詢,是指對關(guān)系型數(shù)據(jù)庫中,或來自其他數(shù)據(jù)源中可以用二維表格表達(dá)的數(shù)據(jù)進(jìn)行查詢,這種查詢一般都是字段級的精確查詢;非結(jié)構(gòu)化數(shù)查詢,指的是對網(wǎng)頁、文本文件、word、excel、ppt、pdf等文本型數(shù)據(jù)進(jìn)行查詢,這種查詢一般都是文檔級的全文檢索。
1.3 通用查詢功能分析
(1) 通用查詢功能
通用查詢是指能夠滿足上述所分析的各類查詢功能要求。即能夠?qū)Ω鱾€(gè)行業(yè)的相關(guān)數(shù)據(jù),進(jìn)行滿足其業(yè)務(wù)特點(diǎn)的查詢要求。
(2) 通用查詢功能的特點(diǎn)
1) 與業(yè)務(wù)無關(guān);各業(yè)務(wù)領(lǐng)域數(shù)據(jù)都能用此功能進(jìn)行查詢操作。
2) 能夠體現(xiàn)不同業(yè)務(wù)的特點(diǎn);根據(jù)不同業(yè)務(wù)的特點(diǎn),支持不同的查詢方式及展示方式。
3) 能夠動態(tài)適應(yīng)業(yè)務(wù)要求的變化;通過功能調(diào)整而非程序代碼來快速響應(yīng)用戶需求的變化。
4) 能夠高效地響應(yīng)結(jié)果;查詢一般都屬于在線操作,響應(yīng)時(shí)間應(yīng)控制在毫秒級。
元數(shù)據(jù)是“關(guān)于數(shù)據(jù)的數(shù)據(jù)”,它通過對信息資源的描述和限定,實(shí)現(xiàn)對資源的定位和管理,從而最終有助于實(shí)現(xiàn)對這種資源及相關(guān)數(shù)據(jù)的檢索[3]。
通用查詢功能既要與業(yè)務(wù)無關(guān),又要體現(xiàn)不同業(yè)務(wù)的特點(diǎn),從而動態(tài)適應(yīng)其業(yè)務(wù)變化,必須對各種不同的物理數(shù)據(jù)表示給出相應(yīng)抽象的邏輯表示,必須根據(jù)不同的描述信息對界面提供靈活的定制功能。要適應(yīng)這些動態(tài)變化的要求,就要求程序邏輯不能固化,而要能夠根據(jù)一些描述性信息作出不同的變化。所以,描述性信息是實(shí)現(xiàn)通用性的核心、基礎(chǔ),而描述性信息即元數(shù)據(jù),描述數(shù)據(jù)的數(shù)據(jù)。通用查詢功能中的元數(shù)據(jù)我們分為兩類,描述數(shù)據(jù)結(jié)構(gòu)的元數(shù)據(jù)和描述頁面展示的元數(shù)據(jù)。
2.1 描述數(shù)據(jù)結(jié)構(gòu)的元數(shù)據(jù)
此類元數(shù)據(jù)用來描述不同業(yè)務(wù)數(shù)據(jù)的物理結(jié)構(gòu)、邏輯結(jié)構(gòu)以及數(shù)據(jù)之間的關(guān)聯(lián)關(guān)系。包括物理表、物理表字段、業(yè)務(wù)實(shí)體、業(yè)務(wù)實(shí)體屬性、關(guān)聯(lián)子實(shí)體、關(guān)聯(lián)子實(shí)體屬性六個(gè)方面的信息,他們之間的關(guān)系,如圖1所示。
圖1 通用查詢元數(shù)據(jù)邏輯結(jié)構(gòu)圖
(1) 物理表
物理表描述系統(tǒng)中所有表,關(guān)鍵信息有表的存儲名稱、顯示名稱,還可以包含表的管理性信息,如表的類型(業(yè)務(wù)數(shù)據(jù)表、內(nèi)部控制表等),表中數(shù)據(jù)的更新方式、更新周期等。
(2) 物理表字段
物理表字段描述構(gòu)成物理表的字段信息,關(guān)鍵信息有字段的存儲名稱、字段的顯示名稱、字段的存儲類型、字段長度、是否為主鍵、是否為外鍵、是否唯一、是否可為空等。
(3) 業(yè)務(wù)實(shí)體
業(yè)務(wù)實(shí)體是從業(yè)務(wù)的角度來描述系統(tǒng)中數(shù)據(jù)單元,大多數(shù)情況下一個(gè)物理表對應(yīng)一個(gè)業(yè)務(wù)實(shí)體信息,也有物理表中的數(shù)據(jù)存儲多個(gè)相似但不相同的業(yè)務(wù)邏輯的數(shù)據(jù),比如,對一個(gè)城市的人口信息進(jìn)行管理,所有的人信息都可以存儲在一張物理表中,但從業(yè)務(wù)管理上,可以把人分成常住人口、外來人口和境外人口,三類人口信息的管理方式不一樣,相關(guān)業(yè)務(wù)操作都有區(qū)別,如查詢字段、展示字段都有差別。對業(yè)務(wù)實(shí)體和業(yè)務(wù)實(shí)體所擁有的屬性描述是通用查詢功能的核心內(nèi)容。從數(shù)據(jù)結(jié)構(gòu)方面看,業(yè)務(wù)實(shí)體包含的關(guān)鍵信息有業(yè)務(wù)標(biāo)識名稱、業(yè)務(wù)顯示名稱、業(yè)務(wù)所屬類別。
(4) 業(yè)務(wù)實(shí)體屬性
業(yè)務(wù)實(shí)體屬性是描述一個(gè)業(yè)務(wù)具體信息項(xiàng)的元數(shù)據(jù),是用戶操作最多的數(shù)據(jù)項(xiàng),也是業(yè)務(wù)差別最大的信息。因此,它是通用查詢功能處理的重點(diǎn)。從數(shù)據(jù)結(jié)構(gòu)方面看,業(yè)務(wù)實(shí)體屬性包含的關(guān)鍵元數(shù)據(jù)有屬性表示名稱、屬性顯示名稱、屬性的類型、是否主鍵屬性、是否外鍵等。通常,一個(gè)業(yè)務(wù)實(shí)體屬性關(guān)聯(lián)一個(gè)物理表字段,也有根據(jù)業(yè)務(wù)的需要,關(guān)聯(lián)多個(gè)物理表字段,如地址信息,在物理表中可能會按城市、區(qū)縣、街道、路名、號、室等多個(gè)字段存儲,但查詢展示的時(shí)候可能需要把這些字段合并成一個(gè)地址屬性,這樣的屬性稱為虛擬屬性。
(5) 關(guān)聯(lián)子實(shí)體
關(guān)聯(lián)子實(shí)體是用來描述與一個(gè)實(shí)體有關(guān)聯(lián)關(guān)系的實(shí)體元數(shù)據(jù),用來描述兩個(gè)業(yè)務(wù)實(shí)體之間的關(guān)系,關(guān)鍵信息有父實(shí)體ID、子實(shí)體ID、關(guān)聯(lián)類型(一對一、一對多、多對多)、關(guān)聯(lián)名稱,如果關(guān)聯(lián)類型為多對多,則還需要描述多對多關(guān)聯(lián)實(shí)體ID、多對多目標(biāo)實(shí)體屬性、多對多關(guān)聯(lián)實(shí)體屬性。
(6) 關(guān)聯(lián)子實(shí)體屬性
關(guān)聯(lián)子實(shí)體屬性是用來描述兩個(gè)實(shí)體之間關(guān)聯(lián)條件的元數(shù)據(jù),可以支持單條件關(guān)聯(lián)和多條件關(guān)聯(lián),關(guān)鍵信息有子實(shí)體屬性ID、父實(shí)體屬性ID。
2.2 描述頁面展示的元數(shù)據(jù)
查詢功能是面向最終用戶的,它的所有功能都是靠界面來體現(xiàn),根據(jù)需求及使用場景不同,查詢功能被分成很多種類,每一種都是通過不同的界面形式來表達(dá)。為了使實(shí)現(xiàn)的功能達(dá)到通用,就需要使用大量描述性元數(shù)據(jù)來定義頁面的不同元素。界面反映的都是業(yè)務(wù)需求,所以頁面展示的元數(shù)據(jù)都與描述數(shù)據(jù)結(jié)構(gòu)元數(shù)據(jù)中的業(yè)務(wù)實(shí)體元數(shù)據(jù)和業(yè)務(wù)實(shí)體屬性元數(shù)據(jù)對應(yīng),都是對這兩個(gè)元數(shù)據(jù)的擴(kuò)充。
(1) 查詢功能頁面結(jié)構(gòu)分析
常用的查詢功能由輸入查詢條件界面、展示結(jié)果列表界面和展示單條結(jié)果詳細(xì)信息界面組成。
1) 輸入查詢條件界面
該界面需要考慮哪些業(yè)務(wù)屬性用作查詢條件;根據(jù)重要性及常用性,這些屬性的排列順序如何;根據(jù)界面大小,一行最多能夠擺放幾個(gè)查詢屬性;每一個(gè)查詢屬性的比較運(yùn)算符是固定的還是可變化的;多個(gè)查詢條件之間的邏輯關(guān)系是固定的還是可變化的;每個(gè)查詢條件值的輸入方式如何適應(yīng)不同屬性類型的變化。
2) 展示結(jié)果列表界面
該界面要考慮哪些業(yè)務(wù)屬性需要展示在結(jié)果列表中;這些屬性的排列順序如何;根據(jù)屬性值的可能長短如何控制不同屬性在列表中的寬度大小;表頭是否支持排序;每一行的哪個(gè)屬性值支持超鏈接關(guān)聯(lián)查詢。
3) 展示單條結(jié)果詳細(xì)信息界面
該界面要考慮哪些業(yè)務(wù)屬性需要展示在詳細(xì)信息界面中;這些屬性的排列順序如何;一般這個(gè)界面都是以表格方式進(jìn)行排列,需要控制一行最多擺放幾個(gè)屬性,哪個(gè)屬性需要進(jìn)行跨多列、跨多行擺放;哪個(gè)屬性需要支持超鏈接關(guān)聯(lián)查詢;哪些屬性應(yīng)該歸為同一組,使展示更清楚;同時(shí),此界面也會展示出當(dāng)前業(yè)務(wù)的關(guān)聯(lián)信息,要考慮如何擺放這些關(guān)聯(lián)信息。
(2) 描述頁面展示的元數(shù)據(jù)
綜合考慮查詢功能的不同頁面要求,分別給業(yè)務(wù)實(shí)體和業(yè)務(wù)實(shí)體屬性擴(kuò)充相關(guān)元數(shù)據(jù)。
業(yè)務(wù)實(shí)體包括查詢頁面列數(shù)、詳細(xì)頁面列數(shù)、查詢頁面模板、列表頁面模板、詳細(xì)頁面模板。
業(yè)務(wù)實(shí)體屬性包括查詢頁面序號、列表頁面序號、詳細(xì)頁面序號、輸入類型(單行文本、多行文本、單選下拉列表、多選下拉列表、選項(xiàng)字典、日期、日期時(shí)間、樹形單選、樹形多選)、頁面出現(xiàn)位置(查詢條件頁面、列表頁面、詳細(xì)頁面、自定義查詢頁面)、查詢頁面跨列數(shù)、詳細(xì)頁面跨列數(shù)、詳細(xì)頁面跨行數(shù)、列表顯示寬度、列表對齊方式(左對齊、右對齊、居中對齊)、默認(rèn)查詢符號(等于、大于、小于、大于等于、小于等于、不等于、為空、不為空、模糊、包含、不包含、前綴、后綴)、屬性分組名稱、日期時(shí)間格式、超鏈接地址。
2.3 元數(shù)據(jù)解析模型
使用元數(shù)據(jù)的目的是使查詢功能能夠隨元數(shù)據(jù)的變化而變化,從而適應(yīng)不同的業(yè)務(wù)需求,實(shí)現(xiàn)查詢功能的通用性,不同的查詢功能是通過不同的界面來體現(xiàn)的,界面是由元數(shù)據(jù)、業(yè)務(wù)數(shù)據(jù)、頁面布局和控件聯(lián)合生成,頁面布局也稱為頁面模板。因此,本文利用模板引擎來解析元數(shù)據(jù),動態(tài)生成不同的查詢功能界面,如圖2所示。
圖2 通用查詢元數(shù)據(jù)解析模型圖
系統(tǒng)預(yù)先設(shè)計(jì)一組常用的、實(shí)現(xiàn)不同功能的頁面模板,并實(shí)現(xiàn)元數(shù)據(jù)的配置功能。針對不同的業(yè)務(wù)數(shù)據(jù)及查詢功能要求,通過選擇適當(dāng)?shù)捻撁婺0?,配置不同的元?shù)據(jù),自動生成不同的查詢頁面,從而實(shí)現(xiàn)不同業(yè)務(wù)需求的通用查詢功能。
3.1 集中式關(guān)系型數(shù)據(jù)庫特點(diǎn)及局限性
傳統(tǒng)查詢功能都是基于集中式的關(guān)系型數(shù)據(jù)庫實(shí)現(xiàn)的,特別是對于結(jié)構(gòu)化、有關(guān)聯(lián)關(guān)系的數(shù)據(jù),關(guān)系型數(shù)據(jù)庫提供了很好的存儲支撐和標(biāo)準(zhǔn)的SQL查詢語言,可以很方便、高效地實(shí)現(xiàn)特定的查詢功能。對于特定條件的查詢,關(guān)系型數(shù)據(jù)庫可以通過對特定字段建立索引或?qū)Χ鄠€(gè)字段建立聯(lián)合索引來滿足高性能的查詢需求。另外,對于一定規(guī)模的數(shù)據(jù)的查詢,關(guān)系型數(shù)據(jù)庫也可以通過對數(shù)據(jù)提供分區(qū)存儲的技術(shù),在一定程度上提高查詢效率,滿足應(yīng)用要求。
但是,針對通用查詢,關(guān)系型數(shù)據(jù)庫遇到了難以克服的挑戰(zhàn)。首先,通用查詢會針對一個(gè)業(yè)務(wù)表的任何字段進(jìn)行查詢,而關(guān)系型數(shù)據(jù)庫中當(dāng)一張表中的數(shù)據(jù)達(dá)到千萬記錄時(shí),如果對沒有創(chuàng)建索引的字段執(zhí)行查詢時(shí),響應(yīng)時(shí)間是不可接受的。所以,為了面對任意字段查詢,就需要對每個(gè)字段都創(chuàng)建索引。關(guān)系型數(shù)據(jù)庫中的索引,分單列索引和多列復(fù)合索引,單列索引相對單條件查詢,多列復(fù)合索引相對多條件查詢,而且多列復(fù)合索引的順序也是固定的(與業(yè)務(wù)相關(guān))。通用查詢既要查詢單列又要查詢多列,所以關(guān)系型數(shù)據(jù)庫中的索引機(jī)制是受限制的,不能滿足通用查詢的業(yè)務(wù)無關(guān)性要求。其次,通用查詢既要能夠針對小規(guī)模數(shù)據(jù)量查詢,也要能夠滿足一定的大規(guī)模數(shù)據(jù)量的查詢性能要求,關(guān)系型數(shù)據(jù)庫可以通過存儲分區(qū)的技術(shù)有限地解決特定場景的大數(shù)據(jù)查詢問題,它的分區(qū)是根據(jù)業(yè)務(wù)字段進(jìn)行分區(qū),如果查詢條件相對一個(gè)分區(qū),查詢將是很高效的,但是有些查詢也是要求跨分區(qū),那么查詢效率會受很大影響,也即這種分區(qū)技術(shù)是與業(yè)務(wù)相關(guān)的,滿足不了通用查詢的要求。受關(guān)系型數(shù)據(jù)庫這兩方面的限制,本文采用分布式搜索引擎作為通用查詢
功能的技術(shù)支撐。
3.2 分布式搜索引擎的優(yōu)勢
分布式并行計(jì)算技術(shù)是當(dāng)前解決大規(guī)模數(shù)據(jù)應(yīng)用的最佳方案。分布式并行計(jì)算技術(shù)的核心思想是,把超大規(guī)模的數(shù)據(jù)集分片成多個(gè)較小規(guī)模的數(shù)據(jù)集,這些較小規(guī)模的數(shù)據(jù)集分別存儲在不同的物理機(jī)器中,計(jì)算請求被分發(fā)到相關(guān)的機(jī)器上,大量機(jī)器并行地在自己管理的小規(guī)模數(shù)據(jù)中快速的完成計(jì)算,最后把各自的結(jié)果匯總而形成最終結(jié)果。這里的數(shù)據(jù)分片對應(yīng)關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)分區(qū),但分布式計(jì)算中的數(shù)據(jù)分片是不與業(yè)務(wù)相關(guān)的,而是由分布式框架自動來管理,也自動實(shí)現(xiàn)跨分片計(jì)算,所以,不受業(yè)務(wù)限制,可以滿足通用查詢功能對業(yè)務(wù)無關(guān)性的要求。
其次,分布式技術(shù)通過為數(shù)據(jù)自動管理副本來提高數(shù)據(jù)的安全性和負(fù)載均衡,這可以解決通用查詢功能的可用性和高效性。最后,分布式技術(shù)也能夠自動對分布式集群中的計(jì)算節(jié)點(diǎn)進(jìn)行管理,當(dāng)數(shù)據(jù)規(guī)模不大,用戶并發(fā)不高的情況下,可以使用較小的集群來滿足查詢要求,隨著數(shù)據(jù)量的增大及并發(fā)量的提高,可以動態(tài)增加機(jī)器來提高計(jì)算能力來滿足查詢要求,這種能力可以滿足通用查詢對不同數(shù)據(jù)量、不同使用場景的應(yīng)用要求。
全文搜索引擎[4]是通過專門的索引結(jié)構(gòu)來實(shí)現(xiàn)高效率的文本查詢功能的技術(shù)。搜索引擎由索引引擎和查詢引擎組成,索引引擎對需要查詢的文本內(nèi)容進(jìn)行適當(dāng)?shù)姆衷~切割,使長文本變成多個(gè)可能被用戶用來檢索的詞語,把這些詞語按一定的索引結(jié)構(gòu)存儲起來,以便高效檢索查詢。查詢引擎對用戶輸入的查詢關(guān)鍵字也是先進(jìn)行分詞,然后用這些短的詞語通過高效的匹配算法在索引中查找,最終定位到索引所指向的原始數(shù)據(jù),從而返回最終結(jié)果給用戶。因此全文搜索引擎是通過對所有數(shù)據(jù)建立索引來提高查詢效率,這一特點(diǎn)正好與通用查詢功能中可能對所有字段進(jìn)行查詢的要求匹配,是用來提高通用查詢效率的最佳技術(shù)路線。
3.3 ElasticSearch搜索引擎
彈性搜索(ElasticSearch,簡稱ES),是一個(gè)基于Lucene構(gòu)建的分布式搜索引擎,能夠?qū)崿F(xiàn)實(shí)時(shí)、穩(wěn)定、可靠的搜索功能[5]。(1)它是基于分布式架構(gòu)的,包含分布式架構(gòu)中的關(guān)鍵概念,集群、分片、副本、數(shù)據(jù)重新分配。(2)它是基于高效、通用的全文搜索庫Lucene構(gòu)建的,Lucene是當(dāng)前最受歡迎的開源Java信息檢索程序庫,提供靈活、高效的搜索能力。(3)它的內(nèi)部是以Json格式來組織數(shù)據(jù),因此可以存儲各種結(jié)構(gòu)的文本數(shù)據(jù),并且數(shù)據(jù)結(jié)構(gòu)可以動態(tài)變化,這一點(diǎn)可以很好地滿足通用查詢業(yè)務(wù)無關(guān)性的要求。(4)它提供了簡單、一致的restfull Api接口,既可以用來創(chuàng)建索引,也可以用來檢索查詢,可以很好地兼容各種語言的開發(fā)需要。它既支持全文本檢索,也支持按字段精確或模糊查詢,也就是說它既支持非結(jié)構(gòu)化文本內(nèi)容的檢索,也支持結(jié)構(gòu)化內(nèi)容的查詢。所以,此工具是理想的實(shí)現(xiàn)通用查詢功能的技術(shù)支撐。
基于上述分析的各項(xiàng)理論及技術(shù),本人主導(dǎo),基于JAVA語言、JAVAEE架構(gòu)、SPRING框架實(shí)現(xiàn)了一套完整的通用查詢功能,整體架構(gòu),如圖3所示。
圖3 通用查詢參考實(shí)現(xiàn)架構(gòu)圖
外部不同形式的數(shù)據(jù)通過ETL工具,根據(jù)元數(shù)據(jù)中的標(biāo)識信息,形成需要搜索的數(shù)據(jù)輸入索引引擎,進(jìn)而建立索引存儲在索引庫中。用戶請求特定業(yè)務(wù)的查詢功能,模板引擎解析相應(yīng)業(yè)務(wù)的查詢頁面模板生成查詢頁面,用戶在查詢頁面中輸入查詢條件后執(zhí)行查詢,由查詢控制器構(gòu)造查詢語句提交到查詢引擎,返回命中的結(jié)果給查詢控制器,查詢控制器再根據(jù)查詢業(yè)務(wù)所配置的結(jié)果頁面模板由頁面模板引擎結(jié)合元數(shù)據(jù)生成查詢結(jié)果頁面展示給用戶。
4.1 簡單固定條件查詢頁面
如圖4所示。
圖4 簡單固定條件查詢頁面參考圖
每個(gè)業(yè)務(wù)實(shí)體都會歸屬到一個(gè)特定的資源目錄條目中,左邊為所有需要查詢的業(yè)務(wù)的目錄分類樹,用戶選擇一個(gè)業(yè)務(wù),右邊展示出查詢條件的頁面和查詢結(jié)果的頁面,這兩部分都是根據(jù)配置的元數(shù)據(jù)自動生成。
4.2 復(fù)雜自定義條件查詢頁面
如圖5所示。
圖5 復(fù)雜自定義條件查詢頁面參考圖
左邊擺放的是一個(gè)業(yè)務(wù)的所有可能需要查詢的字段,可以通過拖動的方式把想要用來構(gòu)造查詢條件的字段放到右邊的上半部分,對每個(gè)條件可以選擇不同的比較運(yùn)算符,多個(gè)條件可以通過添加括號合并,可以選擇合并的邏輯符號,構(gòu)造好查詢條件后執(zhí)行查詢,在右邊的下半部分展示匹配到的查詢結(jié)果。
4.3 全文檢索頁面
如圖6所示。
圖6 全文檢索頁面參考圖
頁面上面為一個(gè)查詢框,在其中輸入檢索關(guān)鍵詞,多個(gè)關(guān)鍵詞用空格分隔,執(zhí)行檢索,頁面下面的左邊展示的是所有匹配到的記錄在相應(yīng)資源分類中的記錄數(shù),通過選擇相應(yīng)的業(yè)務(wù)資源,在右邊展示每個(gè)業(yè)務(wù)匹配到的具體記錄信息。
4.4 元數(shù)據(jù)配置頁面
如圖7所示。
圖7 元數(shù)據(jù)配置頁面參考圖
主要的元數(shù)據(jù)配置是業(yè)務(wù)實(shí)體元數(shù)據(jù)和業(yè)務(wù)實(shí)體屬性元數(shù)據(jù),左邊維護(hù)業(yè)務(wù)實(shí)體列表,右邊是每個(gè)業(yè)務(wù)實(shí)體的屬性列表,業(yè)務(wù)實(shí)體屬性的描述元數(shù)據(jù)是配置的主要內(nèi)容。
本文對查詢功能做了詳細(xì)而全面的研究分析后,提出基于元數(shù)據(jù)的分布式通用查詢解決方案,既解決了查詢功能的多樣性、復(fù)雜性問題,也滿足了大規(guī)模數(shù)據(jù)下的查詢性能問題。
基于此方案開發(fā)了一套完整的通用查詢系統(tǒng),并在多個(gè)行業(yè)的不同項(xiàng)目中得到了成功的應(yīng)用,極大地節(jié)約了項(xiàng)目的開發(fā)、維護(hù)成本,系統(tǒng)的功能、性能也得到了使用者的一致好評。
[1] 王志海. 數(shù)據(jù)倉庫[M]. 北京:機(jī)械工業(yè)出版社, 2003.
[2] 劉麗,米振強(qiáng),熊曾剛. 深入理解云計(jì)算:基本原理和應(yīng)用程序編程技術(shù)[M]. 北京:機(jī)械工業(yè)出版社, 2015.
[3] 尹文燕. 元數(shù)據(jù)發(fā)展現(xiàn)狀及存在問題研究[D]. 北京:中國科學(xué)技術(shù)信息研究所, 2003. 1.
[4] 李永春,丁華福. Lucene的全文檢索的研究與應(yīng)用[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2010, 20(2): 12-15.
[5] 王占宏, 王戰(zhàn)英, 顧國強(qiáng), 等. 分布式彈性搜索研究與實(shí)踐[J]. 微型電腦應(yīng)用, 2014, 30(7): 9-12.
Research and Implementation of Distributed General Query System Based on Metadata
Wang Zhanying,Wang Zhanhong
(Shanghai Triman Information & Technology Co.,Ltd., Shanghai 200042)
Information query is a basic function of information systems. Different businesses have different requests of query and result presenting. A typical approach is to require that the programmer custom-develop query modules based on different business requirements. It causes a lot of duplicating efforts, reduces development efficiency and increases development cost. On the other hand, a typical query module and business systems share a same database. Few of them has independent query and analysis database, which basically is centralized relational database. With the rapid growth of business data, system performance decreases significantly, it is hardly to meet real-time requirement of users. In response to these two issues, after a long-term practice, this paper proposes a distributed general- query-system research, which is based on metadata. On one hand, different metadata are analyzed by using template engine. The system can automatically adapt to different business query needs, and improves the versatility. On the other hand, based on distributed search engine technique, it utilizes full index and parallel computing to improve query performance. Through multiple systems development practice, this achievement can meet more than 90% query needs of different industries and different types of systems, the response time is basically in the millisecond level, and it achieves good application effect.
General-query; Metadata; Distributed-search
王戰(zhàn)英(1978-),工程師,學(xué)士,研究方向:電子政務(wù)規(guī)劃。 王占宏(1975-),教授級高工,博士,研究方向:電子政務(wù)規(guī)劃,數(shù)據(jù)倉庫與數(shù)據(jù)挖掘。
1007-757X(2017)08-0046-05
TP311
A
2017.03.10)