Date: 2016-01-27
Title: 圖形數據庫-1
Published: true
Type: post
Excerpt:
Category: GraphDBnode
若是您對此文章感興趣,歡迎發郵件至andy.zhangtao@hotmail.com
數據庫
在咱們生存的實際世界當中,處處都存在着"關係"。世界當中沒有獨立存在的事物,在咱們身邊充斥着大量的,相互交織的各類關係。post
若是須要處理這些相互交織的關係數據,憑藉關係型數據庫是沒法完成的。此時,就須要一種以關係爲核心,而且能夠高效存儲,高效處理的數據庫。性能
相對於圖形數據庫而言,關係型數據庫雖然也能夠計算這些"關係"數據,但計算的代價倒是異常昂貴。得益於圖形數據庫天生以"關係"爲核心,所以其在檢索關係數據時很是高效,目前能夠支持每顆CPU每秒處理百萬次關係檢索,效率比RDBMS高出好幾個數量級。對象
那圖形數據庫會替代RDBMS嗎?首先來講,二者適用場景不一樣。圖形數據庫更加側重於處理海量數據下的,高度連接的關係拓撲關係和複雜的查詢需求,而這些偏偏不是RDBMS的強項。索引
若是讀者接觸過對象模型或者實體圖,那麼想必對下面的模型必然不陌生。在圖形數據庫模型中,一個實體稱之爲一個節點(node),每一個node都有很是多的屬性,這些屬性經過key-value來表示。相同的node在不一樣的場景當中能夠擁有不一樣的標籤信息(lable)。而這些Lable信息,除了能夠用來標記node以外,也能夠用來附加一些metadata(例如索引信息或者約束信息等).get
而在兩個節點之間,有向而且語義清楚的鏈接就稱之爲關係。it
一般來講,一個關係包括方向,類型,起點node和結束node四個要素。而對於node來講,一個關係則能夠同時擁有多個屬性。例如權重,代價,距離,級別,新鮮度或者優點度等等。由於在圖形數據庫當中,維護一條關係是一個代價很是小的事情,因此兩個節點之間能夠在不帶來額外性能損失的狀況下,擁有無限條的關係或者屬性。效率
但有一點須要注意,儘管關係是有向的,但關係自己卻不關心方向。只有node纔會關心方向。meta
雖然關係很便宜,但在圖形數據庫當中卻有一條鐵的紀律:"不容許存在死鏈"。由於每條關係都必須存在起始node和結束node,因此用戶沒法在刪除全部關係以前刪除掉與之相關聯的node。用戶能夠認爲,一條存在的關係必然會鏈接兩個存在的node。