Date: 2016-01-27
Title: 圖形數據庫-1
Published: true
Type: post
Excerpt:
Category: GraphDB
圖形數據庫(GraphDB)
如果您對此文章感興趣,歡迎發郵件至
## 何謂圖形數據庫
在我們生存的實際世界當中,到處都存在着"關系"。世界當中沒有獨立存在的事物,在我們身邊充斥着大量的,相互交織的各種關系。
如果需要處理這些相互交織的關系數據,憑借關系型數據庫是無法完成的。此時,就需要一種以關系為核心,並且可以高效存儲,高效處理的數據庫。
相對於圖形數據庫而言,關系型數據庫雖然也可以計算這些"關系"數據,但計算的代價卻是異常昂貴。得益於圖形數據庫天生以"關系"為核心,因此其在檢索關系數據時非常高效,目前可以支持每顆CPU每秒處理百萬次關系檢索,效率比RDBMS高出好幾個數量級。
那圖形數據庫會替代RDBMS嗎?首先來說,兩者適用場景不同。圖形數據庫更加側重於處理海量數據下的,高度鏈接的關系拓撲關系和復雜的查詢需求,而這些恰恰不是RDBMS的強項。

圖形數據庫使用的數據模型
如果讀者接觸過對象模型或者實體圖,那么想必對下面的模型必然不陌生。在圖形數據庫模型中,一個實體稱之為一個節點(node),每個node都有非常多的屬性,這些屬性通過key-value來表示。相同的node在不同的場景當中可以擁有不同的標簽信息(lable)。而這些Lable信息,除了可以用來標記node之外,也可以用來附加一些metadata(例如索引信息或者約束信息等).

而在兩個節點之間,有向並且語義清楚的連接就稱之為關系。
通常來說,一個關系包括方向,類型,起點node和結束node四個要素。而對於node來說,一個關系則可以同時擁有多個屬性。例如權重,代價,距離,級別,新鮮度或者優勢度等等。因為在圖形數據庫當中,維護一條關系是一個代價非常小的事情,所以兩個節點之間可以在不帶來額外性能損失的情況下,擁有無限條的關系或者屬性。
但有一點需要注意,盡管關系是有向的,但關系本身卻不關心方向。只有node才會關心方向。
雖然關系很便宜,但在圖形數據庫當中卻有一條鐵的紀律:"不允許存在死鏈"。因為每條關系都必須存在起始node和結束node,所以用戶無法在刪除所有關系之前刪除掉與之相關聯的node。用戶可以認為,一條存在的關系必然會連接兩個存在的node。