日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

图形数据库Neo4j基本了解

發(fā)布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图形数据库Neo4j基本了解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

?

?

一,圖形數(shù)據(jù)庫的基本概念

Neo4j創(chuàng)建的圖(Graph)基于屬性圖模型,在該模型中,每個實體都有ID(Identity)唯一標識,每個節(jié)點由標簽(Lable)分組,每個關系都有一個唯一的類型,屬性圖模型的基本概念有:

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

二,圖形示例

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

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

1,實體

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

包含兩個關系,分別是:

  • 兩個關系類型:ACTED_IN和DIRECTED,
  • 兩個關系:連接name屬性為Tom Hank節(jié)點和Movie節(jié)點的關系,連接name屬性為Forrest Gump的節(jié)點和Movie節(jié)點的關系。

其中一個關系如下圖:

2,標簽(Lable)

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

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

3,屬性(Property)

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

在示例圖形中,Person節(jié)點有兩個屬性name和born,Movie節(jié)點有兩個屬性:title和released,

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

三,遍歷(Traversal)

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

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

遍歷的路徑如圖:

?

四,圖形數(shù)據(jù)庫的模式

Neo4j的模式(Schema)通常是指索引,約束和統(tǒng)計,通過創(chuàng)建模式,Neo4j能夠獲得查詢性能的提升和建模的便利;Neo4j數(shù)據(jù)庫的模式可選的,也可以是無模式的。

1,索引

圖形數(shù)據(jù)庫也能創(chuàng)建索引,用于提高圖形數(shù)據(jù)庫的查詢性能。和關系型數(shù)據(jù)庫一樣,索引是圖形數(shù)據(jù)的一個冗余副本,通過額外的存儲空間和犧牲數(shù)據(jù)寫操作的性能,來提高數(shù)據(jù)搜索的性能,避免創(chuàng)建不必要的索引,這樣能夠減少數(shù)據(jù)更新的性能損失。

Neo4j在圖形節(jié)點的一個或多個屬性上創(chuàng)建索引,在索引創(chuàng)建完成之后,當圖形數(shù)據(jù)更新時,Neo4j負責索引的自動更新,索引的數(shù)據(jù)是實時同步的;在查詢被索引的屬性時,Neo4j自動應用索引,以獲得查詢性能的提升。

例如,使用Cypher創(chuàng)建索引:

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

2,約束

在圖形數(shù)據(jù)庫中,能夠創(chuàng)建四種類型的約束:

  • 節(jié)點屬性值唯一約束(Unique node property):如果節(jié)點具有指定的標簽和指定的屬性,那么這些節(jié)點的屬性值是唯一的
  • 節(jié)點屬性存在約束(Node property existence):創(chuàng)建的節(jié)點必須存在標簽和指定的屬性
  • 關系屬性存在約束(Relationship property existence):創(chuàng)建的關系存在類型和指定的屬性
  • 節(jié)點鍵約束(Node Key):在指定的標簽中的節(jié)點中,指定的屬性必須存在,并且屬性值的組合是唯一的

例如,使用Cypher創(chuàng)建約束:

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,統(tǒng)計信息

當使用Cypher查詢圖形數(shù)據(jù)庫時,Cypher腳本被編譯成一個執(zhí)行計劃,執(zhí)行該執(zhí)行計劃獲得查詢結(jié)果。為了生成一個性能優(yōu)化的執(zhí)行計劃,Neo4j需要收集統(tǒng)計信息以對查詢進行優(yōu)化。當統(tǒng)計信息變化到一定的賦值時,Neo4j需要重新生成執(zhí)行計劃,以保證Cypher查詢是性能優(yōu)化的,Neo4j存儲的統(tǒng)計信息包括:

  • 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自動更新統(tǒng)計信息,但是,統(tǒng)計信息的更新不是實時的,更新統(tǒng)計信息可能是一個非常耗時的操作,因此,Neo4j在后臺運行,并且只有當變化的數(shù)據(jù)達到一定的閾值時,才會更新統(tǒng)計信息。

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把執(zhí)行計劃被緩存起來,在統(tǒng)計信息變化之前,執(zhí)行計劃不會被重新生成。通過配置選項,Neo4j能夠控制執(zhí)行計劃的重新生成:

  • dbms.index_sampling.background_enabled:是否在后臺統(tǒng)計索引信息,由于Cypher查詢的執(zhí)行計劃是根據(jù)統(tǒng)計信息生成的,及時更新索引的統(tǒng)計數(shù)據(jù)對生成性能優(yōu)化的執(zhí)行計劃非常重要;
  • dbms.index_sampling.update_percentage:在更新索引的統(tǒng)計信息之前,索引中有多大比例的數(shù)據(jù)被更新;
  • cypher.statistics_divergence_threshold:當統(tǒng)計信息變化時,Neo4j不會立即更新Cypher查詢的執(zhí)行計劃;只有當統(tǒng)計信息變化到一定的程度時,Neo4j才會重新生成執(zhí)行計劃。

??

參考文檔:

Graph database concepts

Chapter 3. Cypher

原文地址:https://www.cnblogs.com/ljhdo/p/5178225.html

轉(zhuǎn)載于:https://www.cnblogs.com/jstarseven/p/9546576.html

總結(jié)

以上是生活随笔為你收集整理的图形数据库Neo4j基本了解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。