大規模知識圖譜數據流設計
知識圖譜的數據量,更新方式,使用場景的不同,決定其數據流如何設計。
我們的應用有著上億級別的節點數,數據存在著離線批量更新以及用戶實時手工修改兩種方式,使用場景也有著圖查詢以及模糊的搜索查詢。這樣就決定著我們的數據流設計如下圖:
知識圖譜數據流
分別介紹其中的功能模塊:
(1)圖資料庫
我們採用圖資料庫來存儲知識圖譜的數據,圖資料庫天然地滿足節點-->關係-->節點這種存儲格式。目前業界多使用neo4j,titan等,我們使用了公司內部的分散式圖資料庫。感覺目前業界圖資料庫還沒有一個有壓倒性優勢的系統,配置運維起來也比較麻煩。
(2)離線計算平台
我們每天會對圖譜數據進行一次離線批量更新,在離線計算平台hadoop上完成,具體數據流如下:
2.1,新數據:數據源會有新實體進來,例如新增的歌曲,變化的電影播放次數等;
2.2,全量數據:把圖資料庫的最新全量數據同步回來,這部分數據里會包含用戶的修改,會在後文中講到;
2.3,增量數據:對新數據和全量數據進行diff,計算出增量數據,為了簡潔起見,這裡的增量數據僅僅考慮新增的節點,以及某些指定的節點屬性,新增的邊。
(3)Elasticsearch
由於對於圖譜的查詢存在一些分詞模糊查詢,原生的圖資料庫無法很好地滿足查詢需求,所以我們接入了Elasticsearch來承載這部分需求,每天會將圖資料庫數據同步到search。
(4)用戶操作界面
用戶有直接編輯知識圖譜數據的需求,因此提供了操作界面,可以支持用戶的編輯,包括新增節點,刪除節點,修改邊,修改節點屬性等。對於這種用戶操作會將其記錄到mysql,實現操作記錄可追溯,可重放,可撤銷。
(5)定時清理程序
在長期的數據操作過程中,由於程序異常,數據異常等原因,不可避免地會出現一些無效數據,而圖資料庫的數據清理邏輯比較複雜,單獨開啟了一個定期清理程序。它會清理無效節點和無效邊,保證圖資料庫的數據乾淨。
推薦閱讀:
※為什麼知識圖譜終於火了?|甲子光年
※知識圖譜技術如何落地金融行業?
※AAAI 2018論文解讀 | 基於置信度的知識圖譜表示學習框架
※如何用知識圖譜識別欺詐行為
TAG:知識圖譜 |