大規(guī)模知識圖譜數(shù)據(jù)存儲實戰(zhàn)解析
1. 什么是知識圖譜
我們的現(xiàn)實世界中有多種類型的事物:
事物之間有多種類型的鏈接:
而知識圖譜即用來描述真實世界中存在的各種實體或概念,以及它們之間的關(guān)聯(lián)關(guān)系。
其中:
- 每個實體或概念用一個全局唯一確定的ID來標(biāo)識,稱為標(biāo)識符;
- 每個屬性—值對用來刻畫實體的內(nèi)在特性,而關(guān)系用來連接兩個實體,刻畫它們之間的關(guān)聯(lián)。
從抽象層面看,本體最抽象,其次是知識庫,***才是知識圖譜,因此本體與知識圖譜的區(qū)別在于以下三點:
- 知識圖譜并不是本體的替代品,它是在本體的基礎(chǔ)上進(jìn)行了豐富和擴充,這種擴充主要體現(xiàn)在實體(Entity)層面;
- 本體中突出和強調(diào)的是概念以及概念之間的關(guān)聯(lián)關(guān)系,而知識圖譜則是在本體的基礎(chǔ)上,增加了更加豐富的關(guān)于實體的信息;
- 本體描述了知識圖譜的數(shù)據(jù)模式(schema),即為知識圖譜構(gòu)建數(shù)據(jù)模式相當(dāng)于為其建立本體。
1.1 知識圖譜的應(yīng)用
知識圖譜已經(jīng)在人工和商業(yè)智能方面有了一系列的應(yīng)用,包括聊天機器人,臨床決策支持等。
同時為了應(yīng)對大數(shù)據(jù)應(yīng)用的不同挑戰(zhàn),借助知識圖譜,實現(xiàn)不同的業(yè)務(wù)需求。
2. 知識圖譜的適用場景
我們看到知識圖譜有了如此多的應(yīng)用,不過它最適合處理還是這些數(shù)據(jù):
關(guān)系復(fù)雜的數(shù)據(jù);
類型繁多的數(shù)據(jù);
結(jié)構(gòu)多變的數(shù)據(jù)。
作為數(shù)據(jù)融合與鏈接的紐帶,知識圖譜整合結(jié)構(gòu)化、半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù),擁有如下的消費和數(shù)據(jù)場景
但知識圖譜不是銀彈!需要我們依據(jù)不同的問題尋找合適的方法,不要為了用知識圖譜而用知識圖譜。
知識圖譜的不適用場景如下:
不適用的數(shù)據(jù)場景:
- 通常的二進(jìn)制數(shù)據(jù)
- 日志數(shù)據(jù)
- 流式數(shù)據(jù)
不適用的消費場景:
- 數(shù)據(jù)統(tǒng)計
- 數(shù)據(jù)計算
這些不適用場景都需要借助其它工具存儲和處理,同時結(jié)合其它工具和方法使用,最終與知識圖譜進(jìn)行數(shù)據(jù)鏈接。
3. 知識圖譜的存儲
通過上面的內(nèi)容,我們了解到知識圖譜最適合處理關(guān)聯(lián)密集型的數(shù)據(jù),因此首先需要存放的是圖譜中的節(jié)點和邊的數(shù)據(jù);知識圖譜基于圖數(shù)據(jù)庫的優(yōu)點,能夠方便的存放這一類關(guān)系型的數(shù)據(jù),對于大量其他類型的數(shù)據(jù)我們?nèi)绾翁幚砟兀?/p>
由此可知知識圖譜數(shù)據(jù)的存儲不等于圖數(shù)據(jù)庫。
接下來本文重點介紹知識圖譜數(shù)據(jù)存儲的幾種常見方式。
3.1 知識圖譜數(shù)據(jù)存儲的幾種常見方式
知識圖譜的存儲并不依賴特定的底層結(jié)構(gòu),一般的做法是按數(shù)據(jù)和應(yīng)用的需求采用不同的底層存儲。你甚至可以基于現(xiàn)有關(guān)系數(shù)據(jù)庫或NoSQL數(shù)據(jù)庫進(jìn)行構(gòu)建。我們來列舉一下幾種常見做法:
三元組表(S,P,O)
類似RDF存儲結(jié)構(gòu)(下文會進(jìn)行介紹),以元組為單元進(jìn)行存儲。語義較為明確。
問題:大量自連接操作的開銷巨大。
屬性表:屬性相似的主語聚為一張表
類似關(guān)系型數(shù)據(jù)結(jié)構(gòu),每一條數(shù)據(jù)代表一個實體,每一列代表一個屬性。
問題:1.RDF靈活性(高于一階的關(guān)系查詢很復(fù)雜);2.查詢時必須指定屬性,無法做不確定屬性的查詢。
垂直分割:以謂語劃分三元組表
根據(jù)屬性的不同建立數(shù)據(jù)表,數(shù)據(jù)結(jié)構(gòu)較為清晰。
問題:1.大量數(shù)據(jù)表;2.刪除屬性代價大。
以上這些方案都會有各自的優(yōu)缺點,在實現(xiàn)時需要根據(jù)不同的應(yīng)用場景來進(jìn)行選擇,并設(shè)計索引、約束等方法來解決查詢效率問題。
目前圖結(jié)構(gòu)存儲有兩種通用的存儲方案:RDF存儲和圖數(shù)據(jù)庫(Graph Database)。下圖為兩種存儲在http://db-engines.com/上的發(fā)展趨勢:
可以明顯地看到基于圖的存儲方式在整個數(shù)據(jù)庫存儲領(lǐng)域的發(fā)展飛速。
3.1.1 RDF存儲
RDF存儲亦稱三元組存儲(triplestore),它是專為存儲三元組形式的數(shù)據(jù)而設(shè)計的專用數(shù)據(jù)庫,通過六重索引(SPO、SOP、PSO、POS、OSP、OPS)的方式解決了三元組搜索的效率問題。
其優(yōu)點是:
三元組模式查詢(triple pattern)的高效執(zhí)行;
任意兩個三元組模式的高效歸并連接(merge-join)。
但缺點也很明顯:
六重索引意味著6倍空間開銷,如果是 (S, P, O, C) 四元組呢?
更新維護(hù)代價大。
現(xiàn)在越來越多的RDF數(shù)據(jù)庫通過列式存儲的方式來對三元組進(jìn)行存儲,進(jìn)一步提高六重索引下的查詢效率。
3.1.2 圖數(shù)據(jù)庫
圖數(shù)據(jù)庫的結(jié)構(gòu)定義相比RDF數(shù)據(jù)庫更為通用,實現(xiàn)了圖結(jié)構(gòu)中的節(jié)點,邊以及屬性來進(jìn)行圖數(shù)據(jù)的存儲,典型的開源圖數(shù)據(jù)庫就是Neo4j。
這種做法的優(yōu)點是數(shù)據(jù)庫本身提供完善的圖查詢語言、支持各種圖挖掘算法,但圖數(shù)據(jù)庫的分布式存儲實現(xiàn)代價高,數(shù)據(jù)更新速度慢,大節(jié)點的處理開銷很高。
3.2 大規(guī)模知識圖譜存儲***解決方案
指導(dǎo)思想仍舊是之前提到的“數(shù)據(jù)思維”和“No Size Fits All”,整體原則歸結(jié)為以下六點:
(1)基礎(chǔ)存儲
可按數(shù)據(jù)場景選擇使用關(guān)系數(shù)據(jù)庫、NoSQL數(shù)據(jù)庫及內(nèi)存數(shù)據(jù)庫;
基礎(chǔ)存儲保證可擴展、高可用。
(2)數(shù)據(jù)分割
屬性表:依據(jù)數(shù)據(jù)類型劃分
基本類型:整數(shù)表、浮點數(shù)表、日期類型表、…
集合類型:List型表、Range型表、Map型表、…
大屬性單獨列表:例如數(shù)量超過10M的屬性單獨列表。
(3)緩存與索引
使用分布式 Redis 作為緩存,按需對數(shù)據(jù)進(jìn)行緩存;
對三元組表按需進(jìn)行索引,最多情況下可建立九重索。
(4)善于使用現(xiàn)有成熟存儲
使用ElasticSearch實現(xiàn)數(shù)據(jù)的全文檢索;
結(jié)構(gòu)固定型的數(shù)據(jù)可使用關(guān)系數(shù)據(jù)庫或NoSQL。
(5)對于非關(guān)系型的數(shù)據(jù)盡量不入圖存儲,避免形成大節(jié)點
非關(guān)系型的數(shù)據(jù),使用適合的數(shù)據(jù)存儲機器進(jìn)行存儲,通過實體鏈接的方式實現(xiàn)與圖譜數(shù)據(jù)的關(guān)聯(lián)。
(6)不直接在圖存儲中進(jìn)行統(tǒng)計分析計算
對于需要進(jìn)行統(tǒng)計分析計算的數(shù)據(jù),需要導(dǎo)出到合適的存儲中進(jìn)行。
4. 知識圖譜時態(tài)信息及存儲
眾所周知,信息是有時態(tài)的,時態(tài)特性是信息的客觀存在,同時知識和數(shù)據(jù)是不斷更新的,這些變化的時間點同樣代表了有意義的信息。
時態(tài)信息的需求與技術(shù)一直伴隨著數(shù)據(jù)庫技術(shù)的發(fā)展而產(chǎn)生和發(fā)展。下圖為時態(tài)數(shù)據(jù)庫與其他類型數(shù)據(jù)庫相比的發(fā)展趨勢:
可以發(fā)現(xiàn)時態(tài)數(shù)據(jù)庫的發(fā)展趨勢遠(yuǎn)遠(yuǎn)高于與其他數(shù)據(jù)存儲方式。
知識圖譜中的時態(tài)信息包含以下四個方面:
- 事實的生成時間;
- 某事實的有效時間段;
- 某一對象在特定歷史時刻的狀態(tài);
- 知識圖譜在過去特定時間的版本。
下面的視頻為利用PlantData知識圖譜數(shù)據(jù)智能平臺,查詢出的北京小桔科技有限公司(嘀嘀打車)擁有時態(tài)信息的企業(yè)創(chuàng)投知識圖譜。
結(jié)合最近很火的一部電視劇《人民的名義》我們來理解一下知識圖譜中的時態(tài)信息。
知識圖譜時態(tài)信息存儲實現(xiàn)的設(shè)計原則如下:
5. 使用圖數(shù)據(jù)庫進(jìn)行數(shù)據(jù)存儲
在選擇圖數(shù)據(jù)存儲的指標(biāo)上,需要考慮以下幾個方面:
數(shù)據(jù)存儲支持;
數(shù)據(jù)操作和管理方式;
支持的圖結(jié)構(gòu);
實體和關(guān)系表示;
查詢機制。
此處選擇圖數(shù)據(jù)庫進(jìn)行知識圖譜數(shù)據(jù)的存儲:
- 應(yīng)用場景:創(chuàng)投知識圖譜;
- 數(shù)據(jù)維度:創(chuàng)投知識圖譜描述創(chuàng)業(yè)企業(yè)與投資機構(gòu)之間以投資為主線的多種關(guān)系,包含:企業(yè)產(chǎn)品、創(chuàng)始人、股東、高管、行業(yè)、細(xì)分行業(yè)、新聞、投融資事件、關(guān)注度、活躍度、招聘等方面;
- 應(yīng)用目標(biāo):基于創(chuàng)投知識圖譜及平臺分析功能,投資機構(gòu)能夠完成創(chuàng)業(yè)企業(yè)、行業(yè)調(diào)研及追蹤,為投資進(jìn)行輔助決策;創(chuàng)業(yè)企業(yè)也可以分析熱點投資賽道、關(guān)注行業(yè)動態(tài)及競爭對手動向。
初創(chuàng)企業(yè)相關(guān)的數(shù)據(jù)包括:
- 工商注冊信息
- 企業(yè)產(chǎn)品
- 創(chuàng)始人/股東/高管
- 所屬行業(yè)/領(lǐng)域
- 投融資事件
- 專利/招聘/訴訟/失信
- 新聞/社交網(wǎng)絡(luò)數(shù)據(jù)
- 產(chǎn)品活躍數(shù)據(jù)
關(guān)系型數(shù)據(jù)(通過關(guān)系形成網(wǎng)絡(luò)):
企業(yè)與創(chuàng)始人
企業(yè)與投資人(機構(gòu))
企業(yè)與產(chǎn)品
企業(yè)與高管
高管與高校
關(guān)系型數(shù)據(jù)的存儲方法:作為實體存入知識圖譜,通過它們之間的關(guān)系形成圖譜網(wǎng)絡(luò)。
結(jié)構(gòu)型數(shù)據(jù)(與主體進(jìn)行關(guān)聯(lián),但不會再續(xù)延伸):
企業(yè)與專利/招聘/訴訟/失信
企業(yè)與新聞
企業(yè)與投融資事件
企業(yè)產(chǎn)品活躍數(shù)據(jù)
結(jié)構(gòu)型數(shù)據(jù)的存儲方法:作為記錄型數(shù)據(jù)存入合適的存儲中,通過鏈接與圖譜中的實體進(jìn)行關(guān)聯(lián)。
屬性型數(shù)據(jù):
企業(yè)的工商注冊中基本信息
企業(yè)的所屬行業(yè)
創(chuàng)始人的基本信息
產(chǎn)品的基本信息
投資機構(gòu)基本信息
高校基本信息
屬性型數(shù)據(jù)的存儲方法:作為實體的數(shù)值屬性存入知識圖譜。
時態(tài)型數(shù)據(jù):
企業(yè)的成立時間
高管的任職時間
投資關(guān)系的發(fā)生時間
產(chǎn)品的發(fā)布時間
時態(tài)型數(shù)據(jù)的存儲方法:使用基于知識圖譜上的時間存儲中間件進(jìn)行存儲和查詢處理。
Schema定義:概念選取
企業(yè)
創(chuàng)業(yè)企業(yè)
投資機構(gòu)
人物
投資個人
高管
股東
產(chǎn)品
Schema定義:關(guān)系和屬性的定義
關(guān)系的定義
企業(yè)與創(chuàng)始人的關(guān)系
企業(yè)與投資人(機構(gòu))的投資關(guān)系
企業(yè)與產(chǎn)品的所屬關(guān)系
企業(yè)與高管的任職關(guān)系
高管與高校的教育背景關(guān)系
屬性的定義
企業(yè)的屬性
人物的屬性
產(chǎn)品的屬性
使用圖數(shù)據(jù)庫進(jìn)行數(shù)據(jù)存儲一般過程:
導(dǎo)入實體,概念(Label)
導(dǎo)入實體屬性
導(dǎo)入實體間關(guān)系
***實踐過程:
分批導(dǎo)入,并使用Index提升導(dǎo)入時查詢效率
按數(shù)據(jù)的類型、屬性不同準(zhǔn)備導(dǎo)入文件
數(shù)據(jù)主鍵維護(hù),使用Constraints
盡可能保證導(dǎo)入數(shù)據(jù)格式正確
總結(jié)一下,復(fù)雜應(yīng)用場景下知識圖譜數(shù)據(jù)存儲的原則:
- 關(guān)系型數(shù)據(jù):使用圖形數(shù)據(jù)存儲;
- 關(guān)聯(lián)型數(shù)據(jù):作為記錄型數(shù)據(jù)存入合適的存儲中,通過實體鏈接與圖譜中實體關(guān)聯(lián);
- 屬性型數(shù)據(jù):作為實體的數(shù)值屬性存入知識圖譜;
- 時態(tài)型數(shù)據(jù):使用基礎(chǔ)存儲上的時態(tài)處理中間件進(jìn)行存儲與查詢。






