官术网_书友最值得收藏!

2.3 Neo4j圖數據中基本元素與概念

2.3.1 節點

節點(Node)是圖數據庫中的一個基本元素,用以表示一個實體記錄,就像關系數據庫中的一條記錄一樣。在Neo4j中節點可以包含多個屬性(Property)和多個標簽(Label),如圖2-36所示。

圖2-36 帶有屬性和標簽的節點

下面介紹一個最簡單的節點,它只有一個屬性,屬性名是name,屬性值是Tom,如圖2-37所示。

圖2-37 只有屬性的簡單節點

2.3.2 關系

關系(Relationship)同樣是圖數據庫中的基本元素。當數據庫中已經存在節點后,需要將節點連接起來構成圖。關系就是用來連接兩個節點,關系也稱為圖論的邊(Edge),其始端和末端都必須是節點,關系不能指向空也不能從空發起。關系和節點一樣可以包含多個屬性,但關系只能有一個類型(Type),如圖2-38所示;一個節點可以被多個關系指向或作為關系的起始節點,如圖2-39所示多個關系指向同一節點。

圖2-38 帶有類型和屬性的關系

圖2-39 多個關系指向同一節點

關系必須有開始節點(Start node)和結束節點(End node),兩頭都不能為空,如圖2-40所示。

圖2-40 關系的起始節點和結束節點

節點可以被關系串聯或并聯起來,如圖2-41、圖2-42所示。由于關系可以是有方向的,所以可在由節點、關系組成的圖中進行遍歷操作。

圖2-41 關系串聯節點

圖2-42 關系并聯節點

在圖的遍歷操作中我們可以指定關系遍歷的方向或者指定為無方向,因此在創建關系時不必為兩個節點創建相互指向的關系,而是在遍歷時不指定遍歷方向即可。

特別注意一個節點可以存在指向自己的關系,如圖2-43所示。

圖2-43 關系的起始、結束節點為同一節點

2.3.3 屬性

上面提到節點和關系都可以有多個屬性。屬性是由鍵值對組成的,就像Java的哈希表一樣,屬性名類似變量名,屬性值類似變量值。屬性值可以是基本的數據類型,或者由基本數據類型組成的數組。

需要注意的是屬性值沒有null的概念,如果一個屬性不需要了可以直接將整個鍵值對都移除,在使用Cypher或Java API時(詳見“第4章Neo4j程序開發”),可用IS NULL關鍵字判斷屬性是否存在。表2-1列出了Neo4j中屬性值的基本數據類型。

表2-1 屬性值類型

2.3.4 路徑

當使用節點和關系創建了一個圖后,在此圖中任意兩個節點間都是可能存在路徑的,如圖2-44所示。圖中任意兩節點都存在由節點和關系組成的路徑,路徑也有長度的概念,也就是路徑中關系的條數。

圖2-44 路徑

當然也可以說單獨一個節點就可以組成長度為0的路徑,如圖2-45所示。

圖2-45 長度為0的路徑

如果是兩個簡單的節點,中間只存在一條關系,那這條路徑的長度就是1,如圖2-46所示。

圖2-46 長度為1的路徑

2.3.5 遍歷(Traversal)

遍歷一張圖就是按照一定的規則,根據它們之間的關系,依次訪問所有相關聯的節點的操作。

對于遍歷操作不必自己實現,因為Neo4j提供了一套高效的遍歷API,可以指定遍歷規則,然后讓Neo4j自動按照遍歷規則遍歷并返回遍歷的結果。遍歷規則可以是廣度優先,也可以是深度優先。

想對遍歷框架有一個深入的了解,請參見“第3章Neo4j之Cypher”的有關章節;想了解更多的Java代碼范例,請參見“第4章Neo4j程序開發”的有關章節。

主站蜘蛛池模板: 化德县| 云林县| 桃江县| 纳雍县| 天水市| 西青区| 元氏县| 湖南省| 塔城市| 凤台县| 崇明县| 郸城县| 美姑县| 西青区| 安义县| 大埔区| 楚雄市| 荔波县| 年辖:市辖区| 阜阳市| 绵阳市| 朝阳县| 怀宁县| 龙陵县| 西充县| 新宁县| 南岸区| 台前县| 黔西县| 连城县| 乌鲁木齐县| 临猗县| 永州市| 库车县| 南陵县| 时尚| 晋宁县| 阿坝县| 临武县| 越西县| 深水埗区|