1. 程式人生 > >Neo4j_01屬性圖

Neo4j_01屬性圖

robert role 結構 width 屬性 標簽 pat ont 標量

參考自作者悅光陰 http://www.cnblogs.com/ljhdo/

在深入學習圖形數據庫之前,首先理解屬性圖的基本概念。一個屬性圖是由頂點(Vertex),邊(Edge),標簽(Label),關系類型和屬性(Property)組成的有向圖。頂點也稱作節點(Node),邊也稱作關系(Relationship);在圖形中,節點和關系是最重要的實體,所有的節點是獨立存在的,為節點設置標簽,那麽擁有相同標簽的節點屬於一個分組,一個集合;關系通過關系類型來分組,類型相同的關系屬於同一個集合。關系是有向的,關系的兩端是起始節點和結束節點,通過有向的箭頭來標識方向,節點之間的雙向關系通過兩個方向相反的關系來標識。節點可有零個,一個或多個標簽,但是關系必須設置關系類型,並且只能設置一個關系類型。

Neo4j圖形數據庫的查詢語言是Cypher,用於操作屬性圖,是圖形語言中事實上的標準。

一,圖形數據庫的基本概念

Neo4j創建的圖(Graph)基於屬性圖模型,在該模型中,每個實體都有IDIdentity)唯一標識,每個節點由標簽(Label)分組,每個關系都有一個唯一的類型,屬性圖模型的基本概念有:

  • 實體(Entity是指節點(Node)和關系(Relationship);
    • 每個實體都有一個唯一的ID
    • 每個實體都有零個,一個或多個屬性,一個實體的屬性鍵是唯一的;
    • 每個節點都有零個,一個或多個標簽,屬於一個或多個分組;
    • 每個關系都只有一個類型,用於連接兩個節點;
  • 路徑(Path
    是指由起始節點和終止節點之間的實體(節點和關系)構成的有序組合;
  • 標記(Token是非空的字符串,用於標識標簽(Label),關系類型(Relationship Type),或屬性鍵(Property Key);
    • 標簽:用於標記節點的分組,多個節點可以有相同的標簽,一個節點可以有多個LabelLabel用於對節點進行分組;
    • 關系類型:用於標記關系的類型,多個關系可以有相同的關系類型;
    • 屬性鍵:用於唯一標識一個屬性;
  • 屬性(Property是一個鍵值對(Key/Value Pair),每個節點或關系可以有一個或多個屬性;屬性值可以是標量類型,或這標量類型的列表(數組);

二,圖形示例

在下面的圖形中,存在三個節點和兩個關系共5個實體;PersonMovieLabelACTED_IDDIRECTED是關系類型,nametitleroles等是節點和關系的屬性。

技術分享圖片

實體包括節點和關系,節點有標簽和屬性,關系是有向的,鏈接兩個節點,具有屬性和關系類型。

1,實體

在示例圖形中,包含三個節點,分別是:

技術分享圖片

包含兩個關系,分別是:

  • 兩個關系類型:ACTED_INDIRECTED
  • 兩個關系:連接name屬性為Tom Hank節點和Movie節點的關系,連接name屬性為Robert Zemechis的節點和Movie節點的關系。

其中一個關系如下圖:

技術分享圖片

2,標簽(Label

在圖形結構中,標簽用於對節點進行分組,相當於節點的類型,擁有相同標簽的節點屬於同一個分組。一個節點可以擁有零個,一個或多個標簽,因此,一個節點可以屬於多個分組。對分組進行查詢,能夠縮小查詢的節點範圍,提高查詢的性能。

在示例圖形中,有兩個標簽PersonMovie,兩個節點是Person,一個節點是Movie,標簽有點像節點的類型,但是,每個節點可以有多個標簽。

技術分享圖片

3,屬性(Property

屬性是一個鍵值對(Key/Value),用於為節點或關系提供信息。一般情況下,每個節點都由name屬性,用於命名節點。

在示例圖形中,Person節點有兩個屬性namebornMovie節點有兩個屬性:titlereleased

技術分享圖片

關系類型ACTED_IN有一個屬性:roles,該屬性值是一個數組,而關系類型為DIRECTED的關系沒有屬性

技術分享圖片

三,遍歷(Traversal

遍歷一個圖形,是指沿著關系及其方向,訪問圖形的節點。關系是有向的,連接兩個節點,從起始節點沿著關系,一步一步導航(navigate)到結束節點的過程叫做遍歷,遍歷經過的節點和關系的有序組合稱作路徑(Path)。

在示例圖形中,查找Tom Hanks參演的電影,遍歷的過程是:從Tom Hanks節點開始,沿著ACTED_IN關系,尋找標簽為Movie的目標節點。

遍歷的路徑如圖:

技術分享圖片

Neo4j_01屬性圖