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






