楊波,趙英俊
(核工業(yè)北京地質(zhì)研究院遙感信息與圖像分析技術(shù)國防科技重點(diǎn)實(shí)驗(yàn)室,北京 100029)
在眾源數(shù)據(jù)中,數(shù)據(jù)的收集和管理是眾源數(shù)據(jù)應(yīng)用的基礎(chǔ)。隨著日常需求量的變化,以單一文件來收集與管理眾源地理知識(shí)已經(jīng)無法滿足地理信息應(yīng)用需求。目前眾源數(shù)據(jù)主要利用數(shù)據(jù)庫技術(shù)進(jìn)行存儲(chǔ)管理。但是,眾源數(shù)據(jù)的地理知識(shí)的數(shù)據(jù)節(jié)點(diǎn)和其屬性關(guān)系的復(fù)雜性,造成經(jīng)典關(guān)系數(shù)據(jù)庫無法滿足對(duì)眾源地理知識(shí)進(jìn)行存儲(chǔ)的場景需求。因此,本次研究以核電站場景為例,探究核電站眾源地理知識(shí)的存儲(chǔ)方法。為了更好地進(jìn)行三元組地理數(shù)據(jù)的存儲(chǔ),筆者查閱了相關(guān)研究文獻(xiàn),發(fā)現(xiàn),當(dāng)前主流方法是利用圖數(shù)據(jù)庫的方法對(duì)地理知識(shí)數(shù)據(jù)進(jìn)行存儲(chǔ)[1-4]。本研究首先分析核電站圖數(shù)據(jù)模型和圖查詢語言等模型設(shè)計(jì)原理,詳細(xì)分析了如何利用各種主流知識(shí)圖譜數(shù)據(jù)庫構(gòu)建地理知識(shí)圖譜,包括基于關(guān)系數(shù)據(jù)庫的存儲(chǔ)方案、面向資源描述框架(Resource Description Framework,RDF)的三元組存儲(chǔ)結(jié)構(gòu)和知識(shí)圖數(shù)據(jù)庫。其次以圖數(shù)據(jù)庫Neo4j為例設(shè)計(jì)核電站圖模型數(shù)據(jù)的底層存儲(chǔ)原理,同時(shí)梳理圖數(shù)據(jù)索引和查詢處理等關(guān)鍵技術(shù)[5]。最后,以Neo4j為例,針對(duì)知識(shí)圖譜數(shù)據(jù)庫開源工具進(jìn)行眾源地理信息的實(shí)踐,數(shù)據(jù)結(jié)果與技術(shù)流程可利用于地理信息領(lǐng)域。
從數(shù)據(jù)模型角度來看,知識(shí)圖譜本質(zhì)上是一種圖數(shù)據(jù)[6-9]。不同領(lǐng)域的知識(shí)圖譜均需遵循相應(yīng)的數(shù)據(jù)模型。往往一個(gè)數(shù)據(jù)模型的生命力要看其數(shù)學(xué)基礎(chǔ)的強(qiáng)弱,關(guān)系模型長盛不衰的一個(gè)重要原因是其數(shù)學(xué)基礎(chǔ)為關(guān)系代數(shù)。知識(shí)圖譜的初始發(fā)展來自數(shù)學(xué)經(jīng)典圖論理論,在圖論中,圖是二元組G=( )V,E,其中,V是節(jié)點(diǎn)集合,E是邊集合。圖論認(rèn)為客觀現(xiàn)實(shí)可以用實(shí)體及其屬性集合來抽取,而眾源數(shù)據(jù)的知識(shí)模型也因此發(fā)展而來。
RDF是萬維網(wǎng)聯(lián)盟(World Wide Web Consortium,W3C)官方認(rèn)證的W3C指定的知識(shí)描述眾源數(shù)據(jù)知識(shí)模型。在RDF三元組集合中,單一的眾源事件信息都配有一個(gè)身份信息。事件信息的抽取方法是用三元組的形式進(jìn)行抽取,三元組模型的抽取結(jié)構(gòu)是(s,p,o)[10-11]。其中,s是主語,p是謂語,o是賓語。(s,p,o)表示知識(shí)s與知識(shí)o之間具有關(guān)聯(lián)p,或表示知識(shí)s具有屬性p且其結(jié)果為o。
圖1所示是核電站員工的基于眾源數(shù)據(jù)的知識(shí)圖譜。其中,有運(yùn)行二部的張某、李某與運(yùn)行三部的趙某、王某4名研究人員。張某、李某來自運(yùn)行二部,屬同事關(guān)系。趙某、王某來自運(yùn)行三部,也屬同事關(guān)系,且李某與趙某屬多元關(guān)系。他們4人共同參與了運(yùn)營管理和實(shí)驗(yàn)2個(gè)項(xiàng)目,其中,實(shí)驗(yàn)項(xiàng)目[12]是屬于運(yùn)營管理項(xiàng)目。由于受本文內(nèi)容的限制,只做簡要的方法建設(shè),現(xiàn)實(shí)中的人員與項(xiàng)目內(nèi)容節(jié)點(diǎn)與屬性的眾源知識(shí)遠(yuǎn)比圖中所示的復(fù)雜度高。
值得注意的是,RDF本身的節(jié)點(diǎn)和屬性并無元數(shù)據(jù)信息。各類節(jié)點(diǎn)及屬性的表示方式如圖1中實(shí)線四邊形,即圖中的矩形。邊上的屬性存儲(chǔ)方法表示起來稍顯繁瑣,在眾源數(shù)據(jù)的表示過程中,通過抽象一類總節(jié)點(diǎn)本體[13]來對(duì)地理實(shí)體進(jìn)行統(tǒng)稱。如在圖2中,通過設(shè)計(jì)超節(jié)點(diǎn)ex:參與實(shí)例類(ex:zhang,參與,ex:operation)來實(shí)現(xiàn)節(jié)點(diǎn)屬性的表達(dá),該節(jié)點(diǎn)通過RDF內(nèi)置屬性rdf:主語、rdf:謂語和rdf:賓語進(jìn)行眾源地理知識(shí)的內(nèi)部建模,其中實(shí)例(ex:參與,權(quán)重,0.4)就實(shí)現(xiàn)了為原三元組增加邊屬性的效果。
圖1 A廠眾源知識(shí)Fig.1 Crowdsourcing data of A factory
圖2 眾源知識(shí)中邊屬性的表示Fig.2 Representation of edge attributes in RDF graph
屬性知識(shí)可以說是目前被圖數(shù)據(jù)庫業(yè)界采納最廣的一種圖數(shù)據(jù)模型。屬性知識(shí)由節(jié)點(diǎn)集和邊集組成,且滿足如下性質(zhì):
(1)每個(gè)節(jié)點(diǎn)具有唯一的id;
(2)每個(gè)節(jié)點(diǎn)具有若干條出邊;
(3)每個(gè)節(jié)點(diǎn)具有若干條入邊;
(4)每個(gè)節(jié)點(diǎn)具有一組屬性,每個(gè)屬性是一個(gè)鍵值對(duì);
(5)每條邊具有唯一的id;
(6)每條邊具有一個(gè)頭節(jié)點(diǎn);
(7)每條邊具有一個(gè)尾節(jié)點(diǎn);
(8)每條邊具有一個(gè)標(biāo)簽,表示聯(lián)系;
(9)每條邊具有一組屬性,每個(gè)屬性是一個(gè)鍵值對(duì)。
圖3的每個(gè)節(jié)點(diǎn)和每條邊均有id,遵照屬性知識(shí)的要素,節(jié)點(diǎn)1的出邊集合為{邊11,邊18},入邊集合為{邊10,邊15},屬性集合為{姓名=趙某,年齡=48,部門=運(yùn)行三部};邊11的頭節(jié)點(diǎn)是節(jié)點(diǎn)5,尾節(jié)點(diǎn)是節(jié)點(diǎn)1,標(biāo)簽是“參與”,屬性集合為{權(quán)重=0.4}。
圖3 屬性知識(shí)示例Fig.3 Example of property graph
為了對(duì)眾源數(shù)據(jù)進(jìn)行有效存儲(chǔ)和管理,調(diào)研發(fā)現(xiàn),眾源數(shù)據(jù)管理方法有三種類型,關(guān)系型、三元組型及原生圖數(shù)據(jù)庫型,通過文獻(xiàn)調(diào)研和核電站數(shù)據(jù)實(shí)驗(yàn)發(fā)現(xiàn),第三種方法最適合本次研究內(nèi)容。其中,關(guān)系數(shù)據(jù)庫擁有40多年的發(fā)展歷史,從理論到實(shí)踐有著一整套的成熟體系[14]。數(shù)據(jù)庫體系從層次數(shù)據(jù)庫到關(guān)系數(shù)據(jù)庫轉(zhuǎn)變,這也帶來了一系列商業(yè)數(shù)據(jù)庫的誕生與發(fā)展[15]。以此類推,知識(shí)型數(shù)據(jù)管理方法的誕生也催生了一類知識(shí)型商業(yè)數(shù)據(jù)管理與存儲(chǔ)產(chǎn)品。因此,本此研究核心部分將要利用知識(shí)型數(shù)據(jù)的管理及存儲(chǔ)方法對(duì)眾源數(shù)據(jù)進(jìn)行有效的收集和管理。為此,構(gòu)建了眾源數(shù)據(jù)的知識(shí)管理方法、橫向存儲(chǔ)方法、屬性存儲(chǔ)方法、縱向存儲(chǔ)方法、多重查詢方法以及混合管理方法,為基于眾源數(shù)據(jù)的地理知識(shí)存儲(chǔ)提供多元存儲(chǔ)方案。
圖4所示是以收集并處理核電站的眾源數(shù)據(jù)集的RDF數(shù)據(jù)作為知識(shí)圖譜進(jìn)行實(shí)驗(yàn)和舉例。該知識(shí)圖譜構(gòu)建了N公司及其董事長陳某和M公司及其董事長劉某的節(jié)點(diǎn)屬性和弧關(guān)聯(lián)。該實(shí)驗(yàn)數(shù)據(jù)對(duì)于其他格式的知識(shí)圖譜,這種存儲(chǔ)方案同樣適用。
圖4 核電站眾源數(shù)據(jù)RDF知識(shí)圖譜Fig.4 Crowdsourcing data RDF knowledge graph for nuclear power plant
知識(shí)管理方法的核心組成如下:知識(shí)管理方法(主語,謂語,賓語)
如表1所示,以M和N公司員工為例,對(duì)眾源數(shù)據(jù)中的知識(shí)信息進(jìn)行抽取挖掘得到下表。每一個(gè)實(shí)體代表一個(gè)類似的主語節(jié)點(diǎn),謂語表示屬性信息,賓語是尾節(jié)點(diǎn)知識(shí)。
表1 三元組存儲(chǔ)案例Table 1 Triple storage case
知識(shí)管理方法的優(yōu)點(diǎn)是結(jié)構(gòu)簡單,眾源數(shù)據(jù)的技術(shù)入門比較低[16]。但缺點(diǎn)是規(guī)則混亂,無標(biāo)準(zhǔn)可參考。圖5所示的SPARSQL查詢時(shí)查找某年份出生且是某出生地的某公司的董事長,并且可以將該SPARSQL查詢轉(zhuǎn)換為關(guān)系型數(shù)據(jù)庫查詢。
圖5 SPARQL查詢與SQL查詢對(duì)比Fig.5 Comparison between SPARQL query and SQL query
橫向存儲(chǔ)法的特點(diǎn)是存儲(chǔ)結(jié)構(gòu)框架模式,該方法與知識(shí)管理方法不同,這里的方法是將眾源數(shù)據(jù)按照行優(yōu)先的策略進(jìn)行存儲(chǔ)。具體內(nèi)容如表2所示,其共有5行、5列,限于篇幅省略了若干列。不難看出,橫向存儲(chǔ)法用列創(chuàng)建眾源數(shù)據(jù)的屬性信息,而行用于創(chuàng)建事件的頭節(jié)點(diǎn)內(nèi)容。
表2 橫向存儲(chǔ)案例Table 2 Horizontal storage case
橫向存儲(chǔ)方法,其眾源數(shù)據(jù)的核心查詢語法規(guī)則是:
SELECT主語
FROM a
WHERE出生=‘年份’AND籍貫=‘出生地’董事長LIKE‘_%’
橫向存儲(chǔ)方法的語法,本文用符號(hào)a代替為查詢表,而且,單表查詢即可完成該任務(wù),不用進(jìn)行連接操作。在基于眾源數(shù)據(jù)的地理信息數(shù)據(jù)集中,該數(shù)據(jù)的存儲(chǔ)方法對(duì)于行優(yōu)先存儲(chǔ)來說,會(huì)出現(xiàn)大量的存儲(chǔ)空間閑置的情況。如果將該方法應(yīng)用到實(shí)際場景中,這種方法會(huì)增加數(shù)據(jù)庫管理的復(fù)雜度和運(yùn)營數(shù)據(jù)的成本。
屬性存儲(chǔ)方法是把橫向存儲(chǔ)方法進(jìn)行更加詳細(xì)的劃分描述,即把一個(gè)橫向存儲(chǔ)方法分為人、專業(yè)化公司和母子公司三個(gè)分欄。對(duì)于圖5中SPARQL查詢,在屬性存儲(chǔ)方法上等價(jià)的SQL查詢?nèi)缦滤荆?/p>
SELECT主語
FROM人
WHERE出生=‘年份’AND籍貫=‘出生地’董事長LIKE‘_%’
該查詢與橫向存儲(chǔ)方法上查詢的唯一區(qū)別是將欄名由a變成了員工。
表3 屬性存儲(chǔ)方法Table 3 Store of attribute
屬性存儲(chǔ)方法是在對(duì)知識(shí)管理方法和橫向存儲(chǔ)法上的優(yōu)化升級(jí),反過來看,知識(shí)管理方法和橫向存儲(chǔ)法又是屬性存儲(chǔ)法的特例。按照屬性存儲(chǔ)方法,雖然它彌補(bǔ)了上面兩個(gè)方法的缺點(diǎn),但是,其本身也出現(xiàn)了數(shù)據(jù)冗余的缺點(diǎn)。而且,屬性存儲(chǔ)方法仍然會(huì)進(jìn)行多個(gè)表之間的連接操作,從而影響查詢效率。
縱向劃分起源于美國高等學(xué)府,該方法以三元組的謂語作為劃分維度,將RDF知識(shí)圖譜劃分為若干張只包含(主語,賓語)兩列的表,該表的突出特征是以眾源數(shù)據(jù)的屬性信息為分表。也就是說,圖6中分表分別是出生、董事長、業(yè)務(wù)、子公司等眾源屬性信息。
圖6 縱向劃分存儲(chǔ)方案Fig.6 Vertical partition storage solution
對(duì)于圖6中的SPARQL查詢,在縱向劃分存儲(chǔ)方案中等價(jià)的SQL查詢?nèi)缦拢?/p>
SELECT出生.主語
FROM出生,業(yè)務(wù),董事長
WHERE出生.賓語=‘年份’AND業(yè)務(wù).賓語=‘天然鈾’AND出生.主語=業(yè)務(wù).主語AND出生.主語=董事長.主語
該查詢涉及3項(xiàng)謂語屬性,出生、業(yè)務(wù)和董事長的連接操作。由于謂語表中的行都是按照主語列進(jìn)行排序的,可以快速執(zhí)行這種以“主語-主語”作為連接條件的查詢操作,而這種連接操作又是常用的。
多重查詢法是對(duì)RDF存儲(chǔ)的一種延伸,該方法利用主、謂、賓語之間的概率分布關(guān)系進(jìn)行自由組合,其典型的三元組排列組合方式如表4所示。因?yàn)樵摲椒▽⑺蠷DF進(jìn)行排列組合,這極大地提升了數(shù)據(jù)庫查詢檢索的效率,但也增加了存儲(chǔ)空間的消耗。
表4 三元組模式查詢能夠使用的索引Table 4 Usable indexes for triple query
圖7所示的鏈?zhǔn)絊PARQL查詢“查找生于某年份目前是公司的董事長的人”,可以通過spo和pso表的連接快速執(zhí)行三元組模式“?person董事長?company”與“?company行業(yè)?ind”的連接操作,避免了單表的自連接。
圖7 一個(gè)鏈?zhǔn)絊PARQL查詢Fig.7 A chained SPARQL query
例如,在表5中的dph欄中,主語劉某的謂語行業(yè)(pred1列)是多值謂語,則在其賓語列(val1)存儲(chǔ)id值lid:1。例如,主語劉某和陳某的謂語董事長都被分配到pred3列,該列也存儲(chǔ)了主語M公司的謂語專業(yè)化公司和直屬單位。
表5 混合管理方案Table 5 Hybrid management solution
SELECT a.主語
FROM dph AS a
WHERE a.pred1=‘籍貫’AND a.val1=‘出生地’AND a.pred2=‘出生’AND a.val2=‘年份’AND a.pred3=‘董事長’
從中可以看出,對(duì)于知識(shí)圖譜的星型查詢,混合管理存儲(chǔ)方案只需查詢dph欄即可完成,無須進(jìn)行連接操作。
現(xiàn)在開始存儲(chǔ)以L公司作為主語的三元組,見表6所示。將(L公司,母公司,M公司)進(jìn)行數(shù)據(jù)添加時(shí),根據(jù)h1的值將謂語母公司存入列pred1。將(L公司,子公司,C廠)進(jìn)行數(shù)據(jù)添加時(shí),根據(jù)h1的值將謂語子公司存儲(chǔ)到pred2。在對(duì)(L公司,業(yè)務(wù),清潔能源)進(jìn)行數(shù)據(jù)添加時(shí),將謂語業(yè)務(wù)被h1映射到列pred1,但該列已被占用,因而接著被h2映射到列pred3。將(L公司,子公司,B廠)插入到知識(shí)庫時(shí),謂語子公司被h1映射到列predk。在把(M公司,直屬單位,X設(shè)計(jì)院)添加到知識(shí)庫中時(shí),此時(shí)數(shù)據(jù)庫原有位置被占用,會(huì)自動(dòng)添加到額外空間內(nèi)容。
表6 謂語到列映射的散列函數(shù)Table 6 Hash function of predicate-to-column mapping
為此,構(gòu)建圖著色算法的沖突圖。圖中節(jié)點(diǎn)為知識(shí)圖譜中的所有謂語。每對(duì)共現(xiàn)謂語節(jié)點(diǎn)之間由一條邊相連。圖著色問題的要求是為沖突圖中的節(jié)點(diǎn)著上顏色使得每個(gè)節(jié)點(diǎn)的顏色不同于其在鄰接節(jié)點(diǎn)的顏色,并使所有顏色數(shù)最少。對(duì)應(yīng)到謂語映射問題,即為沖突圖中的謂語節(jié)點(diǎn)分配列,使得每個(gè)謂語映射到的列不同于其任一共現(xiàn)謂語映射到的列,并使用所用的列數(shù)目最少。圖8給出了圖4中知識(shí)圖譜的沖突圖??梢?,對(duì)于13個(gè)謂語,僅使用了5種顏色,即只需使用5列。需要指出的是,圖著色是經(jīng)典的NP難題,對(duì)于規(guī)模較大的沖突圖可用貪心算法求得近似解。
圖8 沖突圖Fig.8 Interference graph
為了適應(yīng)大規(guī)模知識(shí)圖譜數(shù)據(jù)的存儲(chǔ)管理與查詢處理,知識(shí)圖譜數(shù)據(jù)庫內(nèi)部針對(duì)圖數(shù)據(jù)模型設(shè)計(jì)了專門的存儲(chǔ)方案和查詢后處理機(jī)制,以圖數(shù)據(jù)庫Neo4j為例創(chuàng)建其存儲(chǔ)核電站知識(shí)場景方案。
這一部分將深入Neo4j圖數(shù)據(jù)庫底層,探究其原生的圖存儲(chǔ)方案。作為對(duì)比,將原有的眾源數(shù)據(jù)知識(shí)庫與關(guān)系數(shù)據(jù)庫進(jìn)行存儲(chǔ)原理進(jìn)行分析。圖9左邊給出了一個(gè)全局索引的示例,典型方法是利用B+樹進(jìn)行全局檢索,如查找“張某”的同事,需要O( logn)帶代價(jià),其中,n為節(jié)點(diǎn)總數(shù)。如果覺得這樣的查找代價(jià)還是可以接受的話,那么換一個(gè)問題,誰認(rèn)識(shí)“趙某”的查找代價(jià)是多少?顯然,對(duì)于這個(gè)查詢,需要通過全局索引檢查每個(gè)節(jié)點(diǎn),看其認(rèn)識(shí)的人或共事的人中是否有趙某,總代價(jià)為O(nlogn),這樣的復(fù)雜度對(duì)于圖數(shù)據(jù)的遍歷操作是不可接受的。也有學(xué)者認(rèn)為,可為“被認(rèn)識(shí)”關(guān)系再建一個(gè)同樣的全局索引,但那樣索引的維護(hù)開銷就會(huì)翻倍,而且仍然不能做到圖遍歷操作代價(jià)與圖規(guī)模無關(guān)。
圖9 鄰接關(guān)系的全局索引示例Fig.9 Example of global index for adjacency
在圖數(shù)據(jù)庫中,把屬性信息認(rèn)為是區(qū)別于關(guān)系數(shù)據(jù)庫的關(guān)鍵點(diǎn),即數(shù)據(jù)庫中最基本、最核心的概念,如關(guān)系數(shù)據(jù)庫中的“關(guān)系”,才能實(shí)現(xiàn)真正的“無索引鄰接”特性。在圖6右邊查找“張某”的同事時(shí),可以通過張某的“同事”出邊進(jìn)行索引。搜索認(rèn)識(shí)“趙某”的員工,可以通過趙某入邊進(jìn)行索引。當(dāng)然,目前這種方法的時(shí)間復(fù)雜度為O(1)。
Neo4j與其它眾源數(shù)據(jù)知識(shí)庫不同,它是將屬性數(shù)據(jù)集和節(jié)點(diǎn)數(shù)據(jù)集分開管理。該方法的提出,使得Neo4j的運(yùn)行和管理效率都在同行業(yè)數(shù)據(jù)庫中處于領(lǐng)先地位。首先,在Neo4j中是如何存儲(chǔ)圖節(jié)點(diǎn)和邊。圖10所示,在Neo4j中,存儲(chǔ)單個(gè)節(jié)點(diǎn)和屬性分別占用9和33個(gè)物理存儲(chǔ)單位。其中,節(jié)點(diǎn)集數(shù)據(jù)存儲(chǔ)在neostore.nodestore.db里,在每一個(gè)節(jié)點(diǎn)集中分別存儲(chǔ)著不同的記錄信息。包括,相連節(jié)點(diǎn)、本節(jié)點(diǎn)的身份信息、本節(jié)點(diǎn)的屬性信息以及該節(jié)點(diǎn)屬性信息的身份信息等內(nèi)容。在眾源數(shù)據(jù)屬性信息集中,屬性集存儲(chǔ)在neostore.relationshipstore.db里,在單個(gè)屬性數(shù)據(jù)中,會(huì)依次存儲(chǔ)該屬性物理位置是否使用、該屬性的頭節(jié)點(diǎn)和尾節(jié)點(diǎn)位置信息、還會(huì)包含屬性連接節(jié)點(diǎn)相應(yīng)的身份信息,最后還有頭節(jié)點(diǎn)指向下一個(gè)節(jié)點(diǎn)的地址以及尾節(jié)點(diǎn)指向下一個(gè)節(jié)點(diǎn)的地址信息。
圖10 Neo4j中節(jié)點(diǎn)和邊記錄的物理存儲(chǔ)結(jié)構(gòu)Fig.10 Physical storage structure of the node and edge records in Neo4j
圖11所示是以核電站員工為例,用Neo4j的各種節(jié)點(diǎn)集和屬性集進(jìn)行舉例,來說明各種眾源數(shù)據(jù)的知識(shí)信息是如何相互之間進(jìn)行信息溝通。以張某和趙某節(jié)點(diǎn)為例,二者在存儲(chǔ)關(guān)系上分別屬于數(shù)據(jù)存儲(chǔ)的初始位置。通過二者都關(guān)聯(lián)的同事信息,可以通過虛線鏈接來確定張某與趙某節(jié)點(diǎn)。對(duì)于圖中的核心節(jié)點(diǎn)與項(xiàng)目節(jié)點(diǎn)都使用雙向聯(lián)系,而對(duì)于單一位置員工的屬性信息,則使用單一方向聯(lián)系。該方法不僅方便查詢各個(gè)員工的關(guān)聯(lián)關(guān)系,同時(shí)對(duì)于眾源知識(shí)圖譜添加與管理也非常便捷。
圖11 Neo4j中圖的物理存儲(chǔ)Fig.11 Physical storage diagram in Neo4j
例如,由節(jié)點(diǎn)3導(dǎo)航到節(jié)點(diǎn)1的過程為:
(1)由節(jié)點(diǎn)3知道其第1條邊為7;
(2)在邊文件中通過定長記錄計(jì)算出邊7的存儲(chǔ)地址;
(3)由邊7通過雙向鏈表找到邊8;
(4)由邊8獲得其中的終止節(jié)點(diǎn)id(secondNode),即節(jié)點(diǎn)1;
(5)在節(jié)點(diǎn)文件中通過定長記錄計(jì)算出節(jié)點(diǎn)1的存儲(chǔ)地址。
當(dāng)前有多種知識(shí)圖譜開源及商業(yè)數(shù)據(jù)庫,本文以Neo4j為例,設(shè)計(jì)具體的核電站知識(shí)存儲(chǔ)過程,Neo4j的1.0版本發(fā)布于2010年。Neo4j是典型的以知識(shí)形式進(jìn)行數(shù)據(jù)存儲(chǔ)與管理的數(shù)據(jù)庫,它不僅規(guī)定了專屬使用語言,而且還提供了數(shù)據(jù)庫專業(yè)的核心案例以幫助初學(xué)者更好地入門。同時(shí),Neo4j還具備OLTP數(shù)據(jù)庫必須的ACID事務(wù)處理功能。
Neo4j的不足之處在于其社區(qū)版是單機(jī)系統(tǒng),雖然Neo4j企業(yè)版支持高可用性(High Availability)集群,但其與分布式圖存儲(chǔ)系統(tǒng)的最大區(qū)別在于每個(gè)節(jié)點(diǎn)上存儲(chǔ)圖數(shù)據(jù)庫的完整副本(類似于關(guān)系數(shù)據(jù)庫鏡像的副本集群),不是將圖數(shù)據(jù)劃分為子圖進(jìn)行分布式存儲(chǔ),并非真正意義上的分布式數(shù)據(jù)庫系統(tǒng)。如果圖數(shù)據(jù)超過一定規(guī)模,系統(tǒng)性能就會(huì)因?yàn)榇疟P、內(nèi)存等限制而大幅降低。
開發(fā)者注冊信息后可以免費(fèi)下載Neo4j桌面打包安裝版,其中包括Neo4j企業(yè)版的全部功能,即Neo4j服務(wù)器、客服端及全部組件。安裝之后打開軟件為Neo4j Desktop數(shù)據(jù)庫管理界面,然后選擇瀏覽器,打開Neo4j瀏覽器。Neo4j瀏覽器是功能完成的Neo4j可視化交互式客戶端工具,可以用于執(zhí)行Cypher語言。使用Neo4j內(nèi)置的電影圖數(shù)據(jù)庫執(zhí)行Cypher查詢,返回“湯姆·漢克斯”所出演的全部電影,如圖12所示。此外,成功啟動(dòng)Neo4j服務(wù)器之后,會(huì)在7474和7473端口分別開啟HTTP和HTTPS。例 如,使 用 瀏 覽 器 訪 問http://localhost:7474/進(jìn) 入Web界 面,執(zhí) 行Cypher查詢,其功能與Neo4j瀏覽器一致。
本文以具體知識(shí)存儲(chǔ)過程為例。如圖12所示,對(duì)核電站的工作人員信息進(jìn)行代碼案例測試,六名人員與四個(gè)地理位置信息的知識(shí)結(jié)果見圖12(a),通過分析可以發(fā)現(xiàn),張某與孫某都是來自同一個(gè)城市,并且二人是夫妻關(guān)系;在兩類節(jié)點(diǎn)之間,王某是最受同事喜愛的人。從圖12(b)中可以看出,每個(gè)員工節(jié)點(diǎn)有不少于一類屬性關(guān)系,這表明各類知識(shí)節(jié)點(diǎn)的屬性關(guān)系,不僅僅只是同事和家屬關(guān)系,而且對(duì)比(a)與(b)可以看出,實(shí)體類的關(guān)系存儲(chǔ)和表示,并非是單一的行或列存儲(chǔ)。對(duì)眾源數(shù)據(jù)的地理知識(shí)的存儲(chǔ),表現(xiàn)的具體實(shí)例上可以看出是節(jié)點(diǎn)與屬性知識(shí)的融合。
圖12 Neo4j數(shù)據(jù)庫實(shí)例Fig.12 Neo4j database instance
針對(duì)眾源數(shù)據(jù)這一典型數(shù)據(jù)的存儲(chǔ)問題,利用當(dāng)前流行的知識(shí)圖譜技術(shù)對(duì)眾源數(shù)據(jù)進(jìn)行存儲(chǔ),不僅利用關(guān)系數(shù)據(jù)庫的方法,還利用了圖數(shù)據(jù)庫的方法進(jìn)行存儲(chǔ)。通過對(duì)各種方法的對(duì)比分析,發(fā)現(xiàn)傳統(tǒng)的關(guān)系數(shù)據(jù)庫在存儲(chǔ)眾源地理信息時(shí),會(huì)造成存儲(chǔ)位置上的數(shù)據(jù)稀疏,并且弱化了眾源數(shù)據(jù)中地理知識(shí)的相關(guān)關(guān)系。與之對(duì)比,圖數(shù)據(jù)的優(yōu)點(diǎn)明顯,不僅可以解決關(guān)系型數(shù)據(jù)庫在存儲(chǔ)眾源地理知識(shí)時(shí)數(shù)據(jù)存儲(chǔ)稀疏,造成大量空間浪費(fèi)的問題,而且還可以刻畫了眾源數(shù)據(jù)的關(guān)系特征。最后通過具體案例分析進(jìn)一步表明,利用知識(shí)圖譜數(shù)據(jù)庫存儲(chǔ)眾源地理信息可以達(dá)到復(fù)雜度為O(1)的需求。在后續(xù)研究中,應(yīng)進(jìn)一步優(yōu)化對(duì)眾源數(shù)據(jù)的高效率知識(shí)抽取和挖掘,以及對(duì)抽取知識(shí)的智能化推理等問題。