楊 嵐
(泉州信息工程學(xué)院 軟件學(xué)院 ,福建 泉州 362000)
互聯(lián)網(wǎng)技術(shù)高速發(fā)展,IT行業(yè)產(chǎn)生的、分析的業(yè)務(wù)數(shù)據(jù)規(guī)模不斷擴(kuò)大。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫受到數(shù)據(jù)模型、存儲(chǔ)模式等方面的局限,在需要對(duì)大量數(shù)據(jù)進(jìn)行查詢與管理等操作過程中,處理能力較為薄弱,難以適應(yīng)現(xiàn)代化市場(chǎng)與企業(yè)的發(fā)展現(xiàn)狀。為了提升大數(shù)據(jù)背景下數(shù)據(jù)處理的效率與質(zhì)量,需要對(duì)傳統(tǒng)關(guān)系型數(shù)據(jù)庫進(jìn)行創(chuàng)新,于是NoSQL數(shù)據(jù)庫出現(xiàn)了。NoSQL全稱為Not Only SQL,是一種數(shù)據(jù)存儲(chǔ)系統(tǒng),該系統(tǒng)特征為非關(guān)系型、分布式的、不確定遵守ACID原則,該系統(tǒng)遵循CAP理論以及BASE原則。與傳統(tǒng)數(shù)據(jù)庫相比較,NoSQL系統(tǒng)對(duì)數(shù)據(jù)存儲(chǔ)功能進(jìn)行了精簡(jiǎn),著重于分布式的數(shù)據(jù)管理。另外,與傳統(tǒng)數(shù)據(jù)庫相比較,該系統(tǒng)易擴(kuò)展、性能高、數(shù)據(jù)模型靈活、可用性高,但NoSQL系統(tǒng)卻在查詢功能方面有著明顯的缺陷。在全文檢索中,倒排文件是較為常用的一種索引結(jié)構(gòu),目前關(guān)于靜態(tài)文檔集合構(gòu)建倒排索引的研究較為豐富和全面。在信息檢索系統(tǒng)中,倒排索引是關(guān)鍵的內(nèi)容,存儲(chǔ)結(jié)構(gòu)直接影響著檢索的效率與質(zhì)量。計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的迅速普及和發(fā)展,需存儲(chǔ)的數(shù)據(jù)越來越多,且特殊的應(yīng)用領(lǐng)域?qū)ζ涓滦阅艿囊笤絹碓礁?,例如新聞、桌面搜索等,因此要能夠借助更為高效的索引更新策略,也就是運(yùn)用動(dòng)態(tài)索引,滿足各領(lǐng)域的需求?;趧?dòng)態(tài)的文檔環(huán)境,例如標(biāo)簽系統(tǒng)等,用戶端能夠添加、刪除標(biāo)簽或者是文件。但是,動(dòng)態(tài)索引致使計(jì)算多個(gè)鍵為主索引的有意義數(shù)據(jù)是較難操作的。在此背景下,需研發(fā)更為優(yōu)質(zhì)的查詢驅(qū)動(dòng)優(yōu)化技術(shù),用作常用查詢數(shù)據(jù)鍵的存儲(chǔ)。面對(duì)隨時(shí)處于變化中數(shù)據(jù)對(duì)象,引入增量更新機(jī)制,能夠高效處理上述對(duì)象。大量研究顯示,組合索引可降低整體寬帶的消耗,耗能節(jié)約為50%左右,節(jié)約的部分能夠使容量擴(kuò)大,從而實(shí)現(xiàn)更加快捷的查詢功能處理,在保持性能的基礎(chǔ)上可節(jié)約成本。
(1)CAP理論。在NoSQL系統(tǒng)中,CAP理論是其基礎(chǔ),CAP代表了其重要的三個(gè)特征,分別為一致性、可用性、分區(qū)容錯(cuò)性?;贑AP理論,數(shù)據(jù)共享系統(tǒng)僅能夠同時(shí)滿足其中的兩個(gè)特征,而并非同時(shí)滿足于三個(gè)特征。受到現(xiàn)有的網(wǎng)絡(luò)硬件條件的約束,在操作中必然會(huì)存在延遲、丟包等現(xiàn)象,因此必須要實(shí)現(xiàn)分區(qū)容錯(cuò)性。因此,系統(tǒng)的設(shè)計(jì)中,需要保留分區(qū)容錯(cuò)性的特性,另外要在一致性以及可用性中選擇其一。
(2)BASE理論。在CAP理論中的三個(gè)特性中,由于分區(qū)容錯(cuò)性、可用性的要求要明顯優(yōu)于強(qiáng)一致性,且難以滿足要求的ACID特性,因此BASE理論應(yīng)運(yùn)而生。BASE理論的構(gòu)成為基本可用、軟狀態(tài)以及最終一致性。其中,基本可用表示系統(tǒng)能夠長(zhǎng)時(shí)間的維持基本可使用的狀態(tài),為用戶提供長(zhǎng)期的、穩(wěn)定的服務(wù);軟狀態(tài)表示系統(tǒng)不對(duì)強(qiáng)一致狀態(tài)硬性要求,可異步;最終一致性表示系統(tǒng)在特定的一段時(shí)間內(nèi)維持?jǐn)?shù)據(jù)的一致性。BASE理論是基于CAP理論上演變而來的,而與ACID特性有著非常顯著的區(qū)別,兩者毫無關(guān)聯(lián)。BASE理論放棄了強(qiáng)一致性,從而滿足其基本以執(zhí)行、柔性可靠性的性能,進(jìn)而實(shí)現(xiàn)最終一致性,實(shí)現(xiàn)系統(tǒng)性能的提升以及可用性的提升。NoSQL系統(tǒng)則是遵循了BASE理論。
NoSQL數(shù)據(jù)的解決方案較多,但系統(tǒng)架構(gòu)可劃分為兩種,分別是Master-Slave架構(gòu)、Peer to Peer (P2P)環(huán)狀結(jié)構(gòu)。其中,Master-Slave架構(gòu)的構(gòu)成方式為一個(gè)管理節(jié)點(diǎn)(Master節(jié)點(diǎn))與數(shù)個(gè)計(jì)算節(jié)點(diǎn)(Slave節(jié)點(diǎn)),管理節(jié)點(diǎn)的主要內(nèi)容為負(fù)責(zé)系統(tǒng)的整體管理,同時(shí)對(duì)所有計(jì)算節(jié)點(diǎn)的狀態(tài)進(jìn)行監(jiān)控,保持負(fù)載的均衡性;計(jì)算節(jié)點(diǎn)為數(shù)據(jù)存儲(chǔ)的節(jié)點(diǎn),每個(gè)計(jì)算節(jié)點(diǎn)都要對(duì)本地?cái)?shù)據(jù)的索引表進(jìn)行維護(hù),同時(shí)還要定期將運(yùn)行與負(fù)載狀態(tài)匯報(bào)給管理節(jié)點(diǎn)。Master-Slave架構(gòu)優(yōu)缺點(diǎn)非常明顯,優(yōu)點(diǎn)在于簡(jiǎn)單可控,維護(hù)過程簡(jiǎn)單易操作,而缺點(diǎn)表現(xiàn)為管理節(jié)點(diǎn)將會(huì)對(duì)性能造成制約。該架構(gòu)的運(yùn)用也較為廣泛,其中以Big table、H Base為代表。P2P環(huán)狀架構(gòu)中,“一致性哈希算法”將系統(tǒng)節(jié)點(diǎn)連接成一個(gè)閉環(huán),所有節(jié)點(diǎn)地位均等,沒有主與次之分,所有節(jié)點(diǎn)均實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)和管理功能。該架構(gòu)系統(tǒng)的優(yōu)點(diǎn)表現(xiàn)為負(fù)載均衡、良好的協(xié)調(diào)性、易擴(kuò)展,而缺點(diǎn)為系統(tǒng)的復(fù)雜性較高、可控性能差。其中,Cassandra、Dynamo是P2P架構(gòu)使用者的典型代表。
基于數(shù)據(jù)模型的視角,NoSQL數(shù)據(jù)庫能夠分成較多種類,結(jié)合數(shù)據(jù)存儲(chǔ)的模型與特征,可以分成以下四種典型的類型:
(1)鍵值存儲(chǔ)數(shù)據(jù)模型。NoSQL數(shù)據(jù)庫最為常用的存儲(chǔ)形式為鍵值存儲(chǔ)數(shù)據(jù)模型,該模型最初源于哈希表中的鍵值對(duì)(Key-Value)。鍵值對(duì)(Key-Value)為一個(gè)映射,其中Key是計(jì)算后得到的關(guān)鍵字,value表示存儲(chǔ)的內(nèi)容。鍵值存儲(chǔ)數(shù)據(jù)模型中,數(shù)據(jù)根據(jù)key-value的形式實(shí)現(xiàn)組織、存儲(chǔ)以及索引。數(shù)據(jù)存儲(chǔ)系統(tǒng)中,數(shù)據(jù)的量非常龐大,鍵值存儲(chǔ)模型有助于簡(jiǎn)化數(shù)據(jù)的結(jié)構(gòu),從而增強(qiáng)其實(shí)用性,實(shí)現(xiàn)其讀寫的性能需求。但該數(shù)據(jù)模型難以完成批量的數(shù)據(jù)處理,尤其是查詢以及更新等方面的操作,另外,該數(shù)據(jù)也難以實(shí)現(xiàn)邏輯復(fù)雜程度較高的數(shù)據(jù)處理。運(yùn)用鍵值存儲(chǔ)數(shù)據(jù)模型的數(shù)據(jù)庫系統(tǒng)也較多,例如Redis、Dynamo等等。
(2)列式存儲(chǔ)數(shù)據(jù)模型。該模型同樣也運(yùn)用于“表”相似的傳統(tǒng)數(shù)據(jù)模型,與關(guān)系數(shù)據(jù)庫的存儲(chǔ)數(shù)據(jù)方式“行”相比,列式模型以“列”的方式實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)。列式存儲(chǔ)盡量將同一列的數(shù)據(jù)存在硬盤的同一頁中,且支持多個(gè)列合并為一個(gè)組(列族)的特征,進(jìn)而提升存儲(chǔ)空間的利用率以及查詢的效率,可減少較多的I/O操作內(nèi)容。列式存儲(chǔ)是基于大數(shù)據(jù)背景下開展數(shù)據(jù)的分析以及數(shù)據(jù)倉庫操作,因此存在寫入的效率低下、數(shù)據(jù)完整性欠缺的劣勢(shì)。運(yùn)用列式存儲(chǔ)數(shù)據(jù)模型的數(shù)據(jù)庫系統(tǒng)較多,具備代表性的有Bigtable、Cassandra、Hbase以及Hyper Table等等。
(3)文檔存儲(chǔ)數(shù)據(jù)模型。文檔存儲(chǔ)數(shù)據(jù)模型中,存儲(chǔ)的格式較多,不存在傳統(tǒng)關(guān)系數(shù)據(jù)庫的存儲(chǔ)形式,此類型的存儲(chǔ)中數(shù)據(jù)大多基于JSON或者與該格式類似格式進(jìn)行文檔的存儲(chǔ),JSON格式中較為常見的有XML以及BSON等。文檔存儲(chǔ)數(shù)據(jù)模型能夠滿足用戶以復(fù)雜的查詢條件進(jìn)行數(shù)據(jù)查詢,進(jìn)而獲取數(shù)據(jù)。在一些應(yīng)用領(lǐng)域中,文檔數(shù)據(jù)庫與鍵值數(shù)據(jù)庫相比有著更高的查詢率,使用難度也較低,同時(shí)還能夠支持嵌套結(jié)構(gòu),具備較強(qiáng)的擴(kuò)展性能力。該存儲(chǔ)數(shù)據(jù)模型也存在顯著的缺點(diǎn),例如存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù)、缺乏關(guān)系數(shù)據(jù)的處理能力、缺乏JSON的處理能力。采用該數(shù)據(jù)存儲(chǔ)模型的數(shù)據(jù)庫系統(tǒng)主要有MongoDB、CouchDB等等。
(4)圖形存儲(chǔ)數(shù)據(jù)模型。圖形存儲(chǔ)數(shù)據(jù)模型是基于網(wǎng)格結(jié)構(gòu)的圖理論實(shí)現(xiàn)的,該模型的構(gòu)成主要有節(jié)點(diǎn)、關(guān)系以及屬性,其中,節(jié)點(diǎn)用于代表實(shí)體對(duì)象,邊用于代表實(shí)體對(duì)象間的聯(lián)系。圖結(jié)構(gòu)存儲(chǔ)數(shù)據(jù)的運(yùn)用能夠?qū)崿F(xiàn)較為復(fù)雜的運(yùn)算,例如用于最短路徑的計(jì)算、用于集中度的測(cè)量等。運(yùn)用該模型的數(shù)據(jù)庫系統(tǒng)主要有Neo4j、GraphDB等。
按照數(shù)據(jù)模型進(jìn)行分類,NoSQL數(shù)據(jù)庫能夠分為鍵值數(shù)據(jù)庫、列式數(shù)據(jù)庫、文檔數(shù)據(jù)庫、圖數(shù)據(jù)庫。鍵值數(shù)據(jù)庫運(yùn)用最具代表性的為Redis以及Riak,列式數(shù)據(jù)庫運(yùn)用中最為代表的有HBase,而發(fā)展最為迅速的為Cassandra,文檔型數(shù)據(jù)庫中具備代表性的有MongoDB,最近發(fā)展最為迅速的有CouchDB,而圖數(shù)據(jù)庫運(yùn)用中,Neo4j具備較高的代表性。下文將對(duì)7種NoSQL數(shù)據(jù)庫系統(tǒng)進(jìn)行分析與比較。
(1)Redis(Remote Dictionary Service),遠(yuǎn)程字典服務(wù),Redis的多數(shù)系統(tǒng)中均運(yùn)用基本的C語言。Redis與其他的鍵值數(shù)據(jù)庫相比較,該數(shù)據(jù)組織的優(yōu)點(diǎn)明顯,不僅有著非常靈活的數(shù)據(jù)組織,同時(shí)還能夠支持字符串、哈希表等。
(2)Riak,同樣為Key-Value系統(tǒng),且受到廣泛的重視,其特征顯著,主要表現(xiàn)為三個(gè)方面,分別為分布式集群、彈性擴(kuò)展功能強(qiáng)大、容錯(cuò)性能強(qiáng)大。
(3)HBase是目前行業(yè)認(rèn)可的保存數(shù)據(jù)庫,具有非常良好的前景,特點(diǎn)顯著,具備列表存數(shù)據(jù)、水平擴(kuò)展性等特點(diǎn)。HBase的運(yùn)用,有助于在性能相對(duì)較低的PC服務(wù)器中構(gòu)建較為健全的集群體系。
(4)Cassanda由Facebook于2007年研發(fā),并且發(fā)展成具備較高可靠性的大規(guī)模NoSQL數(shù)據(jù)庫系統(tǒng)。在云處理平臺(tái)中,其有著良好的表現(xiàn),優(yōu)點(diǎn)主要體現(xiàn)在延展性高、數(shù)據(jù)的一致性以及并行分布三方面。
(5)CouchDB,面向文檔數(shù)據(jù)庫系統(tǒng),是在JSON與REST基礎(chǔ)上構(gòu)建而成。CouchDB存儲(chǔ)鍵值對(duì)于構(gòu)成的JSON文檔,其值可根據(jù)需求選擇其中的一種類型,同時(shí)還能夠嵌套不同層次的其他對(duì)象。CouchDB每一行都記錄各項(xiàng)值,包括文檔編號(hào)、版本號(hào)、存儲(chǔ)值等內(nèi)容。通常情況下,存儲(chǔ)的值為TEXT類型樣式的文本,內(nèi)容與數(shù)據(jù)組織的形式?jīng)]有關(guān)聯(lián),能夠任意進(jìn)行定義。但存儲(chǔ)受到相應(yīng)的規(guī)范限制,數(shù)據(jù)存儲(chǔ)依據(jù)JSON樣式完成保存,這同樣是CouchDB優(yōu)于其他數(shù)據(jù)庫的優(yōu)點(diǎn)。
(6)MongoDB,在NoSQL數(shù)據(jù)庫中,具備最豐富的功能,其顯著優(yōu)點(diǎn)在于能夠滿足不同查詢語言的需求,包含RUBY,PYTHON,JAVE,C++,PHP在內(nèi)等多樣化的語言,預(yù)防形式與面向?qū)ο蟛樵冋Z言有著一定的共性。該數(shù)據(jù)庫既能夠?qū)崿F(xiàn)與傳統(tǒng)數(shù)據(jù)庫單個(gè)表格查詢的相關(guān)操作,同時(shí)還能夠構(gòu)建數(shù)據(jù)索引。
(7)Neo4j,較為新穎的NoSQL數(shù)據(jù)庫,為以圖為數(shù)據(jù)組織形式的數(shù)據(jù)庫,Neo4j支持ACID事務(wù),與關(guān)系數(shù)據(jù)庫中PosterSQL相似。分布式的特點(diǎn)還能夠?qū)崿F(xiàn)Lucene的整合,進(jìn)而滿足快速查詢的功能。
表1給出了NoSQL 數(shù)據(jù)庫的綜合比較。
表1 NoSQL 數(shù)據(jù)庫的綜合對(duì)照表
在索引技術(shù)中,倒排索引是較為常用的一種技術(shù)方法,其獨(dú)特性在于索引表中數(shù)據(jù)以倒敘的方式進(jìn)行排序。其基本功能在于存儲(chǔ)全文查詢中特定詞匯到對(duì)應(yīng)文檔中位置的對(duì)應(yīng)關(guān)系。目前,在檢索領(lǐng)域中,倒排索引成為應(yīng)用非常廣泛、受用度非常高的索引方式。而涵蓋特定單詞的文檔列表能夠借助于倒排索引實(shí)現(xiàn)快速獲得。與順序索引相比較,倒排索引有著顯著的區(qū)別,其將“文檔-詞”轉(zhuǎn)變成“詞-文檔”后創(chuàng)編索引。在倒排索引的引用中,最常見的方法是先構(gòu)建一個(gè)由索引項(xiàng)記錄構(gòu)成的索引項(xiàng)數(shù)據(jù)表,在數(shù)據(jù)表中,每一項(xiàng)紀(jì)錄均為用于文檔描述的單一不重復(fù)的最小單元,通常為單詞、語塊或者是音節(jié)。然后,輸入的隨意一篇文檔按照文檔包含的索引項(xiàng)進(jìn)行拆分,并且在索引項(xiàng)數(shù)據(jù)表中將每一個(gè)索引項(xiàng)在文檔中的位置與文檔號(hào)添加進(jìn)去,進(jìn)而形成倒排索引。例如,運(yùn)用五個(gè)短語進(jìn)行文檔的模擬,在單詞的基礎(chǔ)上構(gòu)建出倒排索引,具體如圖1所示:
圖1 倒排索引示意圖
倒排索引技術(shù)的運(yùn)用有兩個(gè)主要步驟。第一步:構(gòu)建索引,也就是根據(jù)文檔集獲得文檔的詞表,在表中標(biāo)明單詞在文檔中的位置序號(hào)和文檔序號(hào)。例如,若忽視大小寫的差異,educational將會(huì)在a與d兩個(gè)句子中出現(xiàn),索引的位置都為1,因此,能夠記錄成“educational(a,1;d,1)”;第二步:運(yùn)用索引實(shí)現(xiàn)檢索。檢索過程中,用戶僅僅需要提取倒排索引,探尋到該詞有關(guān)的出現(xiàn)記錄。例如,在用戶檢索“technology”中,運(yùn)用倒排索引,能夠得出在a、b、e三條記錄中出現(xiàn)檢索詞,且索引的位置都在2處,與c、d文檔無關(guān)聯(lián)。換言之,當(dāng)檢索“technology”時(shí),僅查詢與之相關(guān)的語句,減少了不必要的無關(guān)操作。同樣,如果用戶在檢索“Educational technology”時(shí),用戶只需要檢索與這兩個(gè)詞匯有關(guān)的記錄,隨后根據(jù)文檔的序號(hào)確定交集,如需兩個(gè)詞匯同時(shí)且連續(xù)存在,在得到交集后,再對(duì)索引序號(hào)進(jìn)行比較,最終通過是否連續(xù)進(jìn)行結(jié)果確認(rèn)。倒排索引特點(diǎn)顯著,其具備易理解、構(gòu)建操作簡(jiǎn)單、使用效率高的特點(diǎn),因此在搜索引擎、大數(shù)據(jù)組織以及龐大信息數(shù)據(jù)檢索等方面有著非常重要和廣泛的運(yùn)用。
結(jié)合關(guān)鍵字搜索,僅涉及到數(shù)據(jù)對(duì)象有關(guān)的主鍵屬性的范疇,在此范圍內(nèi)進(jìn)行查詢,因此倒排列表僅需構(gòu)建二級(jí)索引即可。另外,為降低倒排列表中鍵組合查詢的交叉成本,本文中提出了組合多條件的倒排索引技術(shù),將條目與標(biāo)簽聯(lián)系起來設(shè)置為索引的鍵。本文引用的書簽系統(tǒng)中,組合倒排索引如圖2所示。如果單獨(dú)用于索引的數(shù)目數(shù)量到達(dá)預(yù)定的閾值時(shí),將會(huì)引發(fā)合并操作,所有的單獨(dú)索引會(huì)整合成統(tǒng)一的個(gè)體,這一整體為段索引。段索引的數(shù)量不斷增加,當(dāng)總數(shù)量達(dá)到預(yù)定的值時(shí),將會(huì)出現(xiàn)合并行為,多個(gè)段索引將會(huì)整合進(jìn)入到主索引中。索引合并過程中,要能夠設(shè)置出合理的閾值。若設(shè)置的閾值過小,將會(huì)導(dǎo)致合并操作過于頻繁的發(fā)生,進(jìn)而增加系統(tǒng)資源的消耗;若設(shè)置的閾值過大,合并操作發(fā)生的頻次過低,周期較長(zhǎng),文檔更新難以快速體現(xiàn)在倒排索引中,降低系統(tǒng)的時(shí)效性。
圖2 組合倒排索引
查詢處理算法流程如圖3所示。
圖3 查詢處理算法流程
本文中運(yùn)用啟發(fā)式確定鍵訪問索引的集合與順序,以圖1為例,計(jì)算訪問二級(jí)索引列表的組鍵L,于最短倒排表的鍵開始,隨之增加鍵到L,L最大化,覆蓋q以及所有的q的查詢條件。若其中部分鍵已經(jīng)滿足了覆蓋的最大化需求,那么節(jié)點(diǎn)將會(huì)選擇此類鍵,且用作于最短的倒排表。當(dāng)發(fā)起節(jié)點(diǎn)對(duì)列表L進(jìn)行了計(jì)算,就能夠用于訪問索引進(jìn)而檢索獲取查詢的結(jié)果,具體如圖4所示。第一步,L將會(huì)被輸送到每一個(gè)節(jié)點(diǎn);第二步,所有節(jié)點(diǎn)將對(duì)應(yīng)鍵的倒排表添加到中間的結(jié)果中;第三步,最末節(jié)點(diǎn)將會(huì)反饋?zhàn)詈蠼Y(jié)果到發(fā)起的節(jié)點(diǎn)。對(duì)于多個(gè)條件查詢和單個(gè)條件查詢而言,該機(jī)制同樣適用,且原理一致。
圖4 查詢處理列表
NoSQL數(shù)據(jù)庫提供的大數(shù)據(jù)查詢技術(shù)有著非常重要的作用,在鐵路實(shí)名制購票系統(tǒng)中發(fā)揮著重要的作用。實(shí)踐操作中,要能夠有效運(yùn)用NoSQL數(shù)據(jù)庫的返鄉(xiāng)索引技術(shù),構(gòu)建全新的數(shù)據(jù)查詢、測(cè)量及處理的流程,進(jìn)而確保實(shí)名制信息系統(tǒng)的高效運(yùn)行。
鐵路票務(wù)實(shí)名制信息綜合分析系統(tǒng)是基于JAVA基礎(chǔ)上實(shí)行分層設(shè)計(jì)的,同時(shí)借助于數(shù)據(jù)庫的數(shù)據(jù)層組織模式進(jìn)行系統(tǒng)的設(shè)計(jì),共分為展現(xiàn)層、應(yīng)用層、服務(wù)層以及數(shù)據(jù)云四個(gè)層次。
(1)數(shù)據(jù)層。該層次中,為實(shí)現(xiàn)實(shí)名制信息、售票信息等功能,可借助NoSQL數(shù)據(jù)庫功能發(fā)揮出TRS系統(tǒng)的作用。為發(fā)揮最優(yōu)效果,還要運(yùn)用開源ETL工具Kettle實(shí)現(xiàn)數(shù)據(jù)的定期抽取,從而完成加載與轉(zhuǎn)換,滿足服務(wù)層的調(diào)用需求。
(2)服務(wù)層。基于數(shù)據(jù)層,綜合運(yùn)用JAVA數(shù)和工作流機(jī)制,滿足應(yīng)用層的需求,提供查詢、分析以及數(shù)據(jù)接口等應(yīng)用功能,服務(wù)層是業(yè)務(wù)應(yīng)用功能實(shí)現(xiàn)的基礎(chǔ)條件。
(3)應(yīng)用層。該層基于服務(wù)層構(gòu)建,發(fā)揮接口作用,具體使用體現(xiàn)在實(shí)名制信息的管理與信息推送等功能。
(4)展現(xiàn)層。展現(xiàn)層是最后一個(gè)層次,同時(shí)也是NoSQL數(shù)據(jù)庫查詢技術(shù)應(yīng)用的最后體現(xiàn)。該層的展現(xiàn)功能在系統(tǒng)內(nèi)結(jié)合瀏覽器展現(xiàn),提供查詢功能和導(dǎo)航功能,滿足管理系統(tǒng)的應(yīng)用需求。該層,基于分析結(jié)果進(jìn)行信息分配,為客戶端實(shí)現(xiàn)信息輸出。
鐵路客票實(shí)名制信息分析系統(tǒng)的業(yè)務(wù)場(chǎng)景根據(jù)一條或者批量乘客信息進(jìn)行票務(wù)信息查詢,以及對(duì)乘車行程,或者結(jié)合多樣條件進(jìn)行查詢。此業(yè)務(wù)中,售票信息、身份信息包含了車票的信息。
NoSQL數(shù)據(jù)庫的存儲(chǔ)模型為五維分布式的key-value結(jié)構(gòu),包含鍵值空間、列、列族、超列、行等形式,基于4級(jí)嵌套的方式出現(xiàn)。數(shù)據(jù)存儲(chǔ)的流程表現(xiàn)方式為:首先,將寫入動(dòng)作添加到提交日志中;其次,將數(shù)據(jù)寫入到colum family相對(duì)的Memtable中;最后,滿足系統(tǒng)預(yù)設(shè)條件后,將Memtable數(shù)據(jù)批量的存入到磁盤中。
如果查詢的條件是使用存儲(chǔ)模型中的部分列實(shí)現(xiàn)檢索,構(gòu)建如下的反向索引K′。
K′→{Fi|i=1,2,...,I},
其中,K′={Ct|Ct?C}
針對(duì)不同客戶端的查詢需求,結(jié)合公式中相應(yīng)的索引結(jié)構(gòu)完成查詢。如果要求圖3中數(shù)據(jù)存儲(chǔ)模型中尋找到某一車次的車票信息,要能夠首先構(gòu)建出反向索引,聯(lián)系起車次(key)與售票信息(ID),隨后聯(lián)系車票信息確定數(shù)據(jù)在NoSQL集群節(jié)點(diǎn)上的分布,最后在節(jié)點(diǎn)上基于索引反向檢索對(duì)應(yīng)的車票信息。NoSQL數(shù)據(jù)庫中,構(gòu)建反向索引占用部分空間,以空間換取時(shí)間,提升了查詢的有效性。
基于反向索引關(guān)系能夠從實(shí)名制售票業(yè)務(wù)數(shù)據(jù)(ticket info)以及實(shí)名制旅客身份信息(passenger info)中尋求出相對(duì)應(yīng)的鍵值信息,隨后進(jìn)行關(guān)聯(lián)操作,進(jìn)而按條件查詢到實(shí)名制乘車信息。因此,基于NoSQL數(shù)據(jù)的反向索引技術(shù),設(shè)計(jì)查詢策略,具體如圖5所示。
圖5 查詢策略
圖5查詢策略中,先結(jié)合查詢條件,基于實(shí)名制票務(wù)數(shù)據(jù)(ticket info)與實(shí)名制旅客的身份信息(passenger info)構(gòu)建出反向索引(ticket info _index),passenger info_index ticket info_index中columns涵蓋了兩張表關(guān)聯(lián)時(shí)所需的唯一鍵值,聯(lián)系車票信息實(shí)現(xiàn)查詢條件(train_date,train_no)包含在key列表中,passenger info_index的columns也涵蓋了兩張表關(guān)聯(lián)時(shí)所需的唯一鍵值,聯(lián)系實(shí)名制身份信息查詢時(shí)要具備的查詢條件(id_kind,id_no),此條件也在passenger info_index中的key列表中。因此,在查詢中,隨意一個(gè)查詢條件或者其他查詢條件的組合出現(xiàn)時(shí),都能夠換成兩組滿足條件的唯一索引鍵值列表,均基于唯一的索引鍵值列表進(jìn)行檢索,能夠快速檢索且獲得對(duì)應(yīng)信息。
運(yùn)用NoSQL數(shù)據(jù)庫的大數(shù)據(jù)查詢技術(shù)有助于節(jié)省大量的搜索時(shí)間,提升了數(shù)據(jù)的讀寫有效性,明顯強(qiáng)化了數(shù)據(jù)庫的拓展功能,滿足不同行業(yè)、不同領(lǐng)域查詢工作的技術(shù)需求。聯(lián)系鐵路客票實(shí)名制信息的分析系統(tǒng),對(duì)NoSQL數(shù)據(jù)庫的實(shí)際運(yùn)用進(jìn)行了探討,基于反向索引科學(xué)設(shè)計(jì)鐵路客票實(shí)名制信息查詢策略與流程,研究表明NoSQL數(shù)據(jù)庫能夠最優(yōu)化地實(shí)現(xiàn)大數(shù)據(jù)分析與查詢功能。
湖北第二師范學(xué)院學(xué)報(bào)2020年8期