Neo4j 第二篇:圖形資料庫

來源:互聯網
上載者:User

標籤:不必要   收集統計資訊   label   重要   item   lin   樣本   ber   intro   

在深入學習圖形資料庫之前,首先理解屬性圖的基本概念。一個屬性圖是由頂點(Vertex),邊(Edge),標籤(Lable),關聯類型和屬性(Property)組成的有向圖。頂點也稱作節點(Node),邊也稱作關係(Relationship);在圖形中,節點和關係是最重要的實體,所有的節點是獨立存在的,為節點設定標籤,那麼擁有相同標籤的節點屬於一個分組,一個集合;關係通過關聯類型來分組,類型相同的關係屬於同一個集合。關係是有向的,關係的兩端是起始節點和結束節點,通過有向的箭頭來標識方向,節點之間的雙向關係通過兩個方向相反的關係來標識。節點可有零個,一個或多個標籤,但是關係必須設定關聯類型,並且只能設定一個關聯類型。Neo4j圖形資料庫的查詢語言是Cypher,用於操作屬性圖,是圖形語言中事實上的標準。

 

我的Neo4j系列的文章收錄在:Neo4j

 

一,圖形資料庫的基本概念

Neo4j建立的圖(Graph)基於屬性圖模型,在該模型中,每個實體都有ID(Identity)唯一標識,每個節點由標籤(Lable)分組,每個關係都有一個唯一的類型,屬性圖模型的基本概念有:

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

二,圖形樣本

在下面的圖形中,存在三個節點和兩個關係共5個實體;Person和Movie是Lable,ACTED_ID和DIRECTED是關聯類型,name,title,roles等是節點和關係的屬性。

實體包括節點和關係,節點有標籤和屬性,關係是有向的,連結兩個節點,具有屬性和關聯類型。

1,實體

在樣本圖形中,包含三個節點,分別是:

包含兩個關係,分別是:

  • 兩個關聯類型:ACTED_IN和DIRECTED,
  • 兩個關係:串連name屬性為Tom Hank節點和Movie節點的關係,串連name屬性為Forrest Gump的節點和Movie節點的關係。

其中一個關係如:

2,標籤(Lable)

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

在樣本圖形中,有兩個標籤Person和Movie,兩個節點是Person,一個節點是Movie,標籤有點像節點的類型,但是,每個節點可以有多個標籤。

3,屬性(Property)

屬性是一個索引值對(Key/Value),用於為節點或關係提供資訊。一般情況下,每個節點都由name屬性,用於命名節點。

在樣本圖形中,Person節點有兩個屬性name和title,Movie節點有兩個屬性:title和released,

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

三,遍曆(Traversal)

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

在樣本圖形中,尋找Tom Hanks參演的電影,遍曆的過程是:從Tom Hanks節點開始,沿著ACTED_IN關係,尋找標籤為Movie的目標節點。

遍曆的路徑

 

四,圖形資料庫的模式

模式通常是指索引,約束和統計。Neo4j資料庫可以是無模式的,如果為資料庫建立模式,那麼通過模式,能夠獲得查詢效能的提升和建模的便利。

1,索引

圖形資料庫也能建立索引,用於提高圖形資料庫的查詢效能。和關係型資料庫一樣,索引是圖形資料的一個冗餘副本,通過額外的儲存空間和犧牲資料寫操作的效能,來提高資料搜尋的效能,避免建立不必要的索引,這樣能夠減少資料更新的效能損失。

Neo4j在圖形節點的一個或多個屬性上建立索引,在索引建立完成之後,當圖形資料更新時,Neo4j負責索引的自動更新,索引的資料是即時同步的;在查詢被索引的屬性時,Neo4j自動應用索引,以獲得查詢效能的提升。

例如,使用Cypher建立索引:

CREATE INDEX ON :Person(firstname)CREATE INDEX ON :Person(firstname, surname)

2,約束

在圖形資料庫中,能夠建立四種類型的約束:

  • 節點屬性值唯一約束(Unique node property):如果節點具有指定的標籤和指定的屬性,那麼這些節點的屬性值是唯一的
  • 節點屬性存在約束(Node property existence):建立的節點必須存在標籤和指定的屬性
  • 關係屬性存在約束(Relationship property existence):建立的關係存在類型和指定的屬性
  • 節點鍵約束(Node Key):在指定的標籤中的節點中,指定的屬性必須存在,並且屬性值的組合是唯一的

例如,使用Cypher建立約束:

CREATE CONSTRAINT ON (book:Book) ASSERT book.isbn IS UNIQUE;CREATE CONSTRAINT ON (book:Book) ASSERT exists(book.isbn);CREATE CONSTRAINT ON ()-[like:LIKED]-() ASSERT exists(like.day);CREATE CONSTRAINT ON (n:Person) ASSERT (n.firstname, n.surname) IS NODE KEY;

3,統計資訊

當使用Cypher查詢圖形資料庫時,Cypher指令碼被編譯成一個執行計畫,執行該執行計畫獲得查詢結果。為了產生一個效能最佳化的執行計畫,Neo4j需要收集統計資訊以對查詢進行最佳化。當統計資訊變化到一定的賦值時,Neo4j需要重建執行計畫,以保證Cypher查詢是效能最佳化的,Neo4j儲存的統計資訊包括:

  • The number of nodes with a certain label.
  • Selectivity per index. 
  • The number of relationships by type.
  • The number of relationships by type, ending or starting from a node with a specific label.

預設情況下,Neo4j自動更新統計資訊,但是,統計資訊的更新不是即時的,更新統計資料可能是一個非常耗時的操作,因此,Neo4j在後台運行,並且只有當變化的資料達到一定的閾值時,才會更新統計資料。

Neo4j keeps the statistics up to date in two different ways. For label counts for example, the number is updated whenever you set or remove a label from a node. For indexes, Neo4j needs to scan the full index to produce the selectivity number. Since this is potentially a very time-consuming operation, these numbers are collected in the background when enough data on the index has been changed.

Neo4j把執行計畫被緩衝起來,在統計資訊變化之前,執行計畫不會被重建。通過配置選項,Neo4j能夠控制執行計畫的重建:

  • dbms.index_sampling.background_enabled:是否在後台統計索引資訊,由於Cypher查詢的執行計畫是根據統計資訊產生的,及時更新索引的統計資料對產生效能最佳化的執行計畫非常重要;
  • dbms.index_sampling.update_percentage:在更新索引的統計資訊之前,索引中有多大比例的資料被更新;
  • cypher.statistics_divergence_threshold:當統計資訊變化時,Neo4j不會立即更新Cypher查詢的執行計畫;只有當統計資訊變化到一定的程度時,Neo4j才會重建執行計畫。

 

參考文檔:

Graph database concepts

Chapter 3. Cypher

Neo4j 第二篇:圖形資料庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.