一文聊“图”,从图数据库到知识图谱
作者 | 穆瓊
責編 | 晉兆雨
頭圖 |?付費下載于視覺中國
隨著知識圖譜的發展,圖數據庫一詞被越來越多的提到。那么到底什么是圖數據庫,為什么要用圖數據庫,如何去建設一個圖數據庫應用系統,圖數據庫與知識圖譜到底是什么關系。今天為大家揭開神秘面紗,以Neo4j為例,淺析圖數據庫相關技術。
作者介紹:穆瓊 中國農業銀行研發中心,致力于AIOps的落地。
圖數據庫簡介
談到圖數據庫,首先要聊聊“圖”,這里的圖不是計算機視覺、圖像處理領域的圖,而是圖論中的圖,它由節點和節點間的線組成,通常用來描述某些實體與它們之間的特定關系。下圖就是一個典型的圖示例,某企業網絡設備拓撲和報警管理應用方案的示意圖。
現實世界中的圖無處不在,社交領域人與人的關系挖掘、零售領域商品購買的關聯推薦、金融領域的反欺詐反洗錢,都是圖技術的典型應用。但是圖的存儲在過去一直沒有特別好的方案。歷史的方案可以概括為兩類,第一類基于傳統關系型數據庫,將圖中的關系用外鍵或關聯表來表示,這種方式對于某些查詢場景需要好幾個昂貴的表連接,增加了復雜性。在這種存儲中,業務數據與外鍵元數據混雜起來,增加了開發和維護的成本。第二類采用鍵值或文檔型的NoSQL數據庫,鍵值型如Redis、DynanoDB 等、文檔數據庫如MongoDB,這些NoSQL都難以表示關聯關系,為技術人員帶來了開發成本和理解上的壁壘。
因此,專門用于圖的存儲和查詢技術是非常必要的。圖技術根據應用方式的不同可以分為兩個方向,第一個方向是圖數據庫,它用于圖數據的存儲和聯機事務查詢,具備實時性,面向OLTP,支持CRUD和事務。第二個方向是圖計算引擎,它用于圖數據的離線查詢分析,更適合海量數據的挖掘,面向OLAP。
圖領域已經有很多的技術和產品,下圖截取自VLDB2019 keynote《Graph Processing: APanaromic View and Some Open Problems》,除了其中所列之外還有很多其他的技術。
圖數據庫有很多成熟的產品,根據底層存儲和處理引擎是否原生,圖數據庫可以分為四類。為了便于后面理解圖數據庫處理圖的優勢,我們解釋一下這兩個分類維度的含義。
存儲方式
原生圖存儲:數據存儲模式為存儲和管理圖而設計,為圖進行過優化。
非原生圖存儲:將圖數據序列化,采用關系型數據庫、面向對象數據庫、或是其他通用數據存儲。
處理方式
原生圖處理:使用免索引鄰接,關聯節點在物理層面指向彼此,這種方式不同于傳統關系型數據庫的樹形全局索引,為查詢圖的關聯節點帶來了巨大的性能優勢。
非原生圖處理:不采用免索引鄰接保存關系。
根據這兩個維度,圖數據庫產品可以分為四類:
Neo4j實踐
我們以Neo4j為例,直觀地感受一下圖數據庫的強大和便捷之處。Neo4j采用Cypher查詢語言(CQL)進行數據的增刪改查,下面的Cypher語句創建了三個Person節點和他們之間的關注關系:
CREATE?(Billy:Person?{name:'Billy',born:1990,?sex:'male'})CREATE?(Ruth:Person?{name:'Ruth',born:1989,?sex:'female'})CREATE?(Harry:Person?{name:'Harry',born:1992,?sex:'male'})CREATE?(Billy)-[:FOLLOWS]->(Harry)CREATE?(Harry)-[:FOLLOWS]->(Billy)CREATE?(Ruth)-[:FOLLOWS]->(Billy)CREATE?(Ruth)-[:FOLLOWS]->(Harry)CREATE?(Harry)-[:FOLLOWS]->(Ruth)查詢關注了Billy的人:
MATCH?(Billy:Person{name:'Billy'})<-[:FOLLOWS]-(followers:Person)RETURN?followers為Billy做個簡單的好友推薦,推薦策略是把Billy好友(互關者)關注的人推薦給他:
MATCH(Billy:Person{name:'Billy'})-[:FOLLOWS]->(friend:Person)-[:FOLLOWS]->(Billy:Person{name:'Billy'}),(friend)-[:FOLLOWS]->(newFriend)WHERE?NOT(Billy)-[:FOLLOWS]->(newFriend)RETURN?newFriend上面的推薦查詢得到Ruth。
可以看到,相較SQL的關聯查詢,Cypher查詢的語法具有更強的語義性。
Neo4j也提供了shortestPath方法來獲取節點間的最短路徑關系,下面這個查詢基于Neo4j官方提供的電影和演員數據:
我們的歷史數據大多都存儲在關系型數據庫中,neo4j也很好的支持了關系型數據表CSV文件的導入,CSV文件的導入有兩種方式:
1.直接用Cypher LOACCSV:
2.用neo4j-import工具,更適用于數據量較大的場景,支持并行、可擴展的CSV數據導入。?
在查詢性能優化方面,Neo4j也做了較好的支持:
Cypher支持對節點的某個屬性上創建索引,使得檢索數據效率更高,但是跟關系型數據庫類似,索引同樣會增加存儲成本、影響寫入效率。
在用Cypher查詢時,我們也可以通過EXPLAIN或PROFILE對查詢語句進行分析,輔助查詢調優。
Neo4j監控工具可以記錄和顯示服務器的各項指標,Neo4j提供了HTTP web界面實時查看監控數據,包括存儲容量、ID分配、頁面緩存和事務數據。
?
Neo4j系統建設
Neo4j開發
Neo4j分別提供Java接口和REST API,對應的,使用Neo4j也有兩種開發模式:Java API嵌入式開發和HTTP API調用開發。
Neo4j天然支持Java,Spring也提供了Spring Data Neo4j,便于我們在Spring應用系統中使用Neo4j。Spring Data Neo4j除了提供Spring Data模塊的實體映射、分頁、事務等功能以外,還針對Neo4j提供了以下附加功能:
支持Neo4j屬性圖模塊;
支持Neo4j Lucence索引;
支持Neo4j Cypher查詢(CQL);
Neo4jTemplate
?Spring Data Neo4j體系結構如下圖:
Spring Data Neo4j提供了不同的API來支持不同的場景,下表給出了對應的Java類和其用法:
Spring Data Neo4j類 | 用法 |
GraphRepository | 用于執行basic Neo4j DB操作 |
GraphTemplate | 類似其他Spring Data模塊的Template,是執行Neo4j DB操作的Spring模板 |
CrudRepository | 用于使用Cypher查詢語言(CQL)執行Neo4j CRUD操作 |
PaginationAndSortingRepository | 用于執行Neo4j CQL查詢結果的分頁和排序 |
?
Neo4j集群搭建
?
考慮到系統實施時大規模生產環境和容錯問題,Neo4j企業版提供高可用集群和因果集群兩種集群功能,實現高可用性和水平讀擴展,有效提高系統整體性能、可靠性、靈活性和可擴展性。
在使用圖數據庫集群時,我們需要考慮集群的負載均衡,提升吞吐量并減少延遲時間。Neo4j自身沒有負載均衡功能,需要依賴網絡基礎設施的負載均衡能力。以下是三種我們常用的負載均衡方式:
1.分離讀寫流量,將絕大部分寫入操作直接在集群主節點上進行,將讀請求和寫請求完全分離開,通過負載均衡器將寫流量定向到主節點,讀流量平衡地分散到整個集群,避免寫操作影響查詢效率。
2.高速緩存分片,這種方式利用了主存儲器中的數據查詢執行最快,如下圖所示,高可用集群中的節點實例將圖的部分數據放在自己的主存儲器,負載均衡器將請求路由到對應的節點實例上,提升查詢效率。
3.集群實例節點讀取自己的寫入,減少查詢開銷。
?
知識圖譜與圖數據庫
圖數據庫雖然強大且易用,但是它并不是完美的適用于所有場景。圖數據庫可以存儲海量數據,但并不適合直接用來進行海量數據的分析計算,而更適合用來進行某個實體及其關聯關系的查詢。因此,僅靠圖數據庫顯然無法解決圖計算領域的所有問題,在知識圖譜的構建和應用方面還有很多需要利用其他圖計算技術來解決的問題。
下圖是一個典型的圖計算技術架構,包括圖數據建模、存儲系統和圖數據計算三個部分。
圖數據建模:對于關系型數據庫的數據,關系和實體已知,建模成圖數據相對簡單。但是對于文本這樣的非結構化數據,將其建模成為圖數據需要應用自然語言處理、機器學習技術,來解決知識抽取、知識融合和知識推理等問題。斯坦福大學Infolab實驗室開源的DeepDive提供了知識抽取的框架,是構建知識圖譜的利器。?
存儲系統:圖數據有多種存儲方式,圖數據庫當然是最適應圖的關系存儲的,但在不同的應用場景下,也可以考慮將圖數據以RDF三元組、關系型數據庫、ES或其他NoSQL方式進行存儲。
圖數據應用:在構建好的圖數據基礎之上,通過圖計算引擎對海量圖數據進行離線的計算分析,針對不同的應用場景,也可以在內存處理或工作存儲中對圖數據進行查詢分析。
圖數據庫非常適用于圖數據的存儲和實時查詢,是知識圖譜的基石,但它并非知識圖譜的全部。在應用時,我們需要針對具體的場景去進行選型,結合不同的圖計算技術進行分析計算。?
目前圖數據庫產品很多,國內各大互聯網公司如阿里、騰訊等也自研了自己的圖數據庫,圖數據庫未來能否像關系型數據庫一樣有統一的查詢語法,目前還是一個未知數。但可預見的是,隨著數據的爆炸式增長,在追求數據驅動運營和決策的潮流下,圖數據庫在社交關系、實時推薦、主數據管理、在線反欺詐、IT網絡管理、地理信息系統等領域都將占據重要的一席之地。
?
更多閱讀推薦
云原生應用Go語言:你還在考慮的時候,別人已經應用實踐
一文告訴你霧計算與云計算的區別及對物聯網的價值!
你可能也會掉進這個簡單的 String 的坑
教你如何用 Python 三行代碼做動圖!
Ethereum2.0:深入了解Lego Money、Sharding、PoS和TPS的真相
總結
以上是生活随笔為你收集整理的一文聊“图”,从图数据库到知识图谱的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据给教育带来怎样的可能?
- 下一篇: 全网最详细TCP参数讲解,再也不用担心没