国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Neo4j 圖形數(shù)據(jù)庫

這篇具有很好參考價值的文章主要介紹了Neo4j 圖形數(shù)據(jù)庫。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

Neo4j?基礎(chǔ)

什么是Neo4j

Neo4j?模塊構(gòu)建

Neo4j的主要應(yīng)用場景

Neo4j?環(huán)境搭建

Docker 安裝Neo4j

Neo4j數(shù)據(jù)瀏覽器

?Neo4j CQL

CQL簡介

Neo4j CQL高級

CQL?函數(shù)

CQL多深度關(guān)系節(jié)點

事務(wù)

索引

約束

Neo4j之Admin管理員操作

Neo4j -?數(shù)據(jù)庫備份和恢復(fù)

調(diào)優(yōu)思路

?Neo4j?程序訪問

SpringBoot?整合Neo4j


Neo4j?基礎(chǔ)

什么是Neo4j

Neo4j是一個開源的 無Shcema的 基于java開發(fā)的 圖形數(shù)據(jù)庫,它將結(jié)構(gòu)化數(shù)據(jù)存儲在圖中而不是表中。它是一個嵌入式的、基于磁盤的、具備完全的事務(wù)特性的Java持久化引擎。程序數(shù)據(jù)是在一個面向?qū)ο蟮?、靈活的網(wǎng)絡(luò)結(jié)構(gòu)下,而不是嚴格、靜態(tài)的表中,但可以享受到具備完全的事務(wù)特性、企業(yè)級的數(shù)據(jù)庫的所有好處。

https://db-engines.com/en/ranking

Neo4j?模塊構(gòu)建

Neo4j?主要構(gòu)建塊

  • 節(jié)點
  • 屬性
  • 關(guān)系
  • 標簽
  • 數(shù)據(jù)瀏覽器

節(jié)點

節(jié)點是圖表的基本單位。 它包含具有鍵值對的屬性

屬性

屬性是用于描述圖節(jié)點和關(guān)系的鍵值對

Key =值

其中Key是一個字符串

值可以通過使用任何Neo4j數(shù)據(jù)類型來表示

關(guān)系

關(guān)系是圖形數(shù)據(jù)庫的另一個主要構(gòu)建塊。 它連接兩個節(jié)點,如下所示。

Neo4j 圖形數(shù)據(jù)庫

?這里Emp和Dept是兩個不同的節(jié)點。?“WORKS_FOR”是Emp和Dept節(jié)點之間的關(guān)系。

因為它表示從Emp到Dept的箭頭標記,那么這種關(guān)系描述的一樣

Emp WORKS_FOR Dept

每個關(guān)系包含一個起始節(jié)點和一個結(jié)束節(jié)點。

這里“Emp”是一個起始節(jié)點。

“Dept”是端節(jié)點。

由于該關(guān)系箭頭標記表示從“Emp”節(jié)點到“Dept”節(jié)點的關(guān)系,該關(guān)系被稱為“進入關(guān)系”到“Dept”節(jié)點。

并且“外向關(guān)系”到“Emp”節(jié)點。

像節(jié)點一樣,關(guān)系也可以包含屬性作為鍵值對。

標簽

Label將一個公共名稱與一組節(jié)點或關(guān)系相關(guān)聯(lián)。 節(jié)點或關(guān)系可以包含一個或多個標簽。 我們可以為現(xiàn)

有節(jié)點或關(guān)系創(chuàng)建新標簽。 我們可以從現(xiàn)有節(jié)點或關(guān)系中刪除現(xiàn)有標簽。

從前面的圖中,我們可以觀察到有兩個節(jié)點。

左側(cè)節(jié)點都有一個標簽:“EMP”,而右側(cè)節(jié)點都有一個標簽:“Dept”。

這兩個節(jié)點之間的關(guān)系,也有一個標簽:“WORKS_FOR”

:?-Neo4j將數(shù)據(jù)存儲在節(jié)點或關(guān)系的屬性中。

Neo4j的主要應(yīng)用場景

社交媒體和社交網(wǎng)絡(luò)

當(dāng)使用圖形數(shù)據(jù)庫為社交網(wǎng)絡(luò)應(yīng)用程序提供動力時,可以輕松利用社交關(guān)系或根據(jù)活動推斷關(guān)系。

查詢社區(qū)聚類分析,朋友的朋友推薦,影響者分析,共享和協(xié)作關(guān)系分析等

推薦引擎和產(chǎn)品推薦系統(tǒng)

圖形驅(qū)動的推薦引擎通過實時利用多種連接,幫助公司個性化產(chǎn)品,內(nèi)容和服務(wù)。

內(nèi)容和媒體推薦,圖形輔助搜索引擎,產(chǎn)品推薦,專業(yè)網(wǎng)絡(luò),社會推薦。

身份和訪問管理

使用圖形數(shù)據(jù)庫進行身份和訪問管理時,可以快速有效地跟蹤用戶,資產(chǎn),關(guān)系和授權(quán)。

查詢訪問管理,資產(chǎn)來源,數(shù)據(jù)所有權(quán),身份管理,互連組織,主數(shù)據(jù),資源授權(quán)

金融反欺詐多維關(guān)聯(lián)分析場景

通過圖分析可以清楚地知道洗錢網(wǎng)絡(luò)及相關(guān)嫌疑,例如對用戶所使用的帳號、發(fā)生交易時的IP地址、MAC地址、手機IMEI號等進行關(guān)聯(lián)分析。

Neo4j?環(huán)境搭建

Neo4j環(huán)境Linux下搭建

(1).切換到Linux下 到安裝目錄neo4j?上傳安裝包 或者 下載安裝包

使用?ftp?工具上傳neo4j-community-3.5.17.tar?到?liunx?下

或者?wget?https://neo4j.com/artifact.php?name=neo4j-community-3.5.17-unix.tar.gz

(2).?解壓

tar -xvf neo4j-community-3.5.17.tar

(3).?修改配置文件?neo4j.conf

vi conf/neo4j.conf

主要是修改 允許遠程訪問的地址 把對應(yīng)的注釋打開即可

dbms.connectors.default_listen_address=0.0.0.0

(4).開放對應(yīng)的訪問端口 默認要開放7474?和?7687

fifirewall-cmd --zone=public --add-port=7474/tcp --permanent

fifirewall-cmd --zone=public --add-port=7687/tcp --permanent

systemctl reload fifirewalld

(5).啟動

./bin/neo4j start

(6).使用瀏覽器 訪問服務(wù)器上的?neo4j

http://192.168.8.128:7474

默認的賬號是?neo4j?密碼?neo4j?這里第一次登錄的話會要求修改密碼

Neo4j 圖形數(shù)據(jù)庫

Docker 安裝Neo4j

1.拉取Neo4j鏡像

docker pull neo4j

2. 簡單運行Neo4j

docker run -d --name neo4j ?-p 7474:7474 -p 7687:7687 ?neo4j

3.查看日志是否啟動成功

docker logs -f neo4j?

4.訪問數(shù)據(jù)瀏覽器查看是否成功

http://192.168.8.128:7474/browser

如需掛載目錄:

  • data——數(shù)據(jù)存放的文件夾
  • logs——運行的日志文件夾
  • conf——數(shù)據(jù)庫配置文件夾(在配置文件neo4j.conf中配置包括開放遠程連接、設(shè)置默認激活的數(shù)據(jù)庫)
  • import——為了大批量導(dǎo)入csv來構(gòu)建數(shù)據(jù)庫,需要導(dǎo)入的節(jié)點文件nodes.csv和關(guān)系文件rel.csv需要放到這個文件夾下)
docker run -d --name container_name \  //-d表示容器后臺運行 --name指定容器名字
	-p 7474:7474 -p 7687:7687 \  //映射容器的端口號到宿主機的端口號
	-v /home/neo4j/data:/data \  //把容器內(nèi)的數(shù)據(jù)目錄掛載到宿主機的對應(yīng)目錄下
	-v /home/neo4j/logs:/logs \  //掛載日志目錄
	-v /home/neo4j/conf:/var/lib/neo4j/conf   //掛載配置目錄
	-v /home/neo4j/import:/var/lib/neo4j/import \  //掛載數(shù)據(jù)導(dǎo)入目錄
	--env NEO4J_AUTH=neo4j/password \  //設(shè)定數(shù)據(jù)庫的名字的訪問密碼
	neo4j //指定使用的鏡像

Neo4j數(shù)據(jù)瀏覽器

數(shù)據(jù)瀏覽器訪問

一旦我們安裝Neo4j,我們可以訪問Neo4j數(shù)據(jù)瀏覽器使用以下URL

http:// localhost:7474/browser/Neo4j 圖形數(shù)據(jù)庫

?Neo4j數(shù)據(jù)瀏覽器用于執(zhí)行CQL命令并查看輸出輸出。

這里我們需要在美元提示符處執(zhí)行所有CQL命令:“$”?如?CREATE(cc:CreditCard)在美元符號后鍵入命令,然后單擊“執(zhí)行”按鈕運行命令。

它與Neo4j數(shù)據(jù)庫服務(wù)器交互,檢索和顯示下面的結(jié)果到那個美元提示。

使用“VI視圖”按鈕以圖形格式查看結(jié)果。 上圖以“UI視圖”格式顯示結(jié)果。

Neo4j 圖形數(shù)據(jù)庫

導(dǎo)出?CSV?或者?JSON

單擊“導(dǎo)出CSV”按鈕以csv文件格式導(dǎo)出結(jié)果

?Neo4j CQL

CQL簡介

CQL代表Cypher查詢語言。 像關(guān)系型數(shù)據(jù)庫具有查詢語言SQL,Neo4j使用CQL作為查詢語言。

Neo4j CQL

  • 它是Neo4j圖形數(shù)據(jù)庫的查詢語言。
  • 它是一種聲明性模式匹配語言。
  • 它遵循SQL語法。
  • 它的語法是非常簡單且人性化、可讀的格式。

常用的Neo4j CQL命令/條款如下:

S.No.?

CQL命令/條?

作用

1

CREATE?創(chuàng)建?

創(chuàng)建節(jié)點,關(guān)系和屬性

2

MATCH?匹配?

檢索有關(guān)節(jié)點,關(guān)系和屬性數(shù)據(jù)

3

RETURN?返回

返回查詢結(jié)果
4

WHERE?條件

提供條件過濾檢索MATCH數(shù)據(jù)
5

DELETE?刪除

刪除節(jié)點和關(guān)系
6

REMOVE?移除

刪除節(jié)點和關(guān)系的屬性
7

SET?設(shè)置

添加或更新標簽
8

ORDER BY?排序

對結(jié)果排序
9

SKIP LIMIT?分頁

分頁
10

DISTINCT?排重

排重

?CREATE

CREATE (?

<node-name>:<label-name>?

[{?

<property1-name>:<property1-Value>?

........?

<propertyn-name>:<propertyn-Value>?

}]?

)

語法說明:

語法元素 描述
< node-name> 它是我們將要創(chuàng)建的節(jié)點名稱。
< label-name> ?它是一個節(jié)點標簽名稱

< property1-name>...< propertyn-name>

屬性是鍵值對。 定義將分配給創(chuàng)建節(jié)點的屬性的名稱

< property1-value>...< propertyn-value>?

屬性是鍵值對。 定義將分配給創(chuàng)建節(jié)點的屬性的值

舉例:

CREATE?(person:Person {cid:1,name:"小張",age:24,gender:0,character:"A",money:1000});?

MATCH RETURN命令語法?

MATCH?

(?

<node-name>:<label-name>?

)

RETURN?

<node-name>.<property1-name>,?

...?

<node-name>.<propertyn-name>

語法元素 描述

< node-name>?

它是我們將要創(chuàng)建的節(jié)點名稱。

< label-name>?

?它是一個節(jié)點標簽名稱

< property1-name>...< propertyn-name>

屬性是鍵值對。 定義將分配給創(chuàng)建節(jié)點的屬性的名稱

舉例:

MATCH (person:Person) return person?

MATCH (person:Person) return person.name,person.age?

關(guān)系創(chuàng)建

  • 使用現(xiàn)有節(jié)點創(chuàng)建沒有屬性的關(guān)系

MATCH (<node1-name>:<node1-label-name>),(<node2-name>:<node2-label-name>)?

CREATE

(<node1-name>)-[<relationship-name>:<relationship-label-name>]->(<node2-?

name>)?

RETURN?相應(yīng)的內(nèi)容?

語法說明:

S.No.? 語法元素 描述
1 MATCH,CREATE,RETURN? 他們是Neo4J CQL關(guān)鍵字。
2 < noode1-name> ?它用于創(chuàng)建關(guān)系的“From Node”的名稱。
3 < node1-label-name>? 它用于創(chuàng)建關(guān)系的“From Node”的標簽名稱。
4 < node2-name>? 它用于創(chuàng)建關(guān)系的“To Node”的名稱。
5 < node2-label-name>? 它用于創(chuàng)建關(guān)系的“To Node”的標簽名稱。
6 < relationship-name>? 這是一個關(guān)系的名稱。
7 < relationship-label-name> ?它是一個關(guān)系的標簽名稱。

舉例:

創(chuàng)建關(guān)系?

match(person:Person {name:"小張"}) ,(person2:Person {name:"小林"})?create(person)-[r:Couple]->(person2);?

查詢關(guān)系?

match p = (person:Person {name:"小張"})-[r:Couple]->(person2:Person) return p?

match (p1:Person {name:"小張"})-[r:Couple]-(p2:Person) return p1,p2?

match (p1:Person {name:"小張"})-[r:Couple]-(p2:Person) return r

  • 使用現(xiàn)有節(jié)點創(chuàng)建有屬性的關(guān)系

MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)?

CREATE

(<node1-label-name>)-[<relationship-label-name>:<relationship-name>?

{<define-properties-list>}]->(<node2-label-name>)?

RETURN <relationship-label-name>?

其中<define-properties-list>?是分配給新創(chuàng)建關(guān)系的屬性(名稱?-?值對)的列表。?

{?

<property1-name>:<property1-value>,?

<property2-name>:<property2-value>,?

...?

<propertyn-name>:<propertyn-value>?

}

舉例:

match(person:Person {name:"小張"}),(person2:Person {name:"小林"})?

create(person)-[r:Couple{mary_date:"12/12/2014",price:55000}]->(person2)?

return r;?

  • 使用新節(jié)點創(chuàng)建沒有屬性的關(guān)系

CREATE?

(<node1-label-name>:<node1-name>)?

-[<relationship-label-name>:<relationship-name>]->?

(<node1-label-name>:<node1-name>)?

舉例:

create

(person1:Person {cid:4,name:"小王",age:49,gender:1,character:"A",money:5000})?

-[r:Friend]->?

(person2:Person{cid:7,name:"小劉",age:48,gender:0,character:"B",money:100})?

  • 使用新節(jié)點創(chuàng)建有屬性的關(guān)系

CREATE?

(<node1-label-name>:<node1-name>{<define-properties-list>})?

-[<relationship-label-name>:<relationship-name>{<define-properties-list>}]?

->(<node1-label-name>:<node1-name>{<define-properties-list>})?

舉例:

create

(person1:Person {cid:9,name:"王武",age:23,gender:0,character:"A",money:3000})?

<-[r:Friend {date:"11-02-2000"}]->?

(person2:Person {cid:8,name:"趙六",age:24,gender:0,character:"B",money:6000})

關(guān)系和節(jié)點的屬性可以使用的類型

Index CQL數(shù)據(jù)類型 作用
1 boolean? 它用于表示布爾文字:true, false。
2 byte? 它用來表示8位整數(shù)。
3 short? 它用于表示16位整數(shù)。
4 int? 它用于表示32位整數(shù)
5 Long? 它用于表示64位整數(shù)。
6 float? 浮點數(shù)用于表示32位浮點數(shù)。
7 double Double用于表示64位浮點數(shù)。
8 char Char用于表示16位字符。
9 String? 字符串用于表示字符串。

CREATE創(chuàng)建多個標簽

CREATE?(<node-name>:<label-name1>:<label-name2>.....:<label-namen>)?

如:?

CREATE?(person:Person:Beauty:Picture {cid:20,name:"小美女"})?

WHERE?子句

簡單的WHERE子句?

WHERE?<condition>?

復(fù)雜的WHERE子句?

WHERE?<condition> <boolean-operator> <condition>?

where?中的比較運算符 和 之前mysql的相同 如?= != <> > <?等

S.No. ?布爾運算符 描述
1 AND? 與?
2 OR? 或?
3 NOT?

舉例:

MATCH (person:Person)?

WHERE?person.name =?'小張'?OR person.name =?'小王'?

RETURN person

DELETE?子句 和?REMOVE子句

DELETE?子句

  • 刪除節(jié)點。
  • 刪除節(jié)點及相關(guān)節(jié)點和關(guān)系。

match p = (:Person {name:"小王"})-[r:Couple]-(:Person)?delete?r?

REMOVE子句

  • 刪除節(jié)點或關(guān)系的標簽
  • 刪除節(jié)點或關(guān)系的屬性

MATCH (person:Person {name:"小美女"}) ?REMOVE person.cid?

SET子句

  • 向現(xiàn)有節(jié)點或關(guān)系添加新屬性
  • 更新屬性值

MATCH (person:Person {cid:1})?

SET?person.money =?3456,person.age=25?

ORDER BY?子句

“ORDER BY”子句,對MATCH查詢返回的結(jié)果進行排序。

我們可以按升序或降序?qū)π羞M行排序。

默認情況下,它按升序?qū)π羞M行排序。 如果我們要按降序?qū)λ鼈冞M行排序,我們需要使用DESC子句。

MATCH (person:Person)?

RETURN person.name,person.money?

ORDER BY?person.money?DESC?

SKIP?和?LIMIT

Neo4j CQL已提供“SKIP”子句來過濾或限制查詢返回的行數(shù)。 它修整了CQL查詢結(jié)果集頂部的結(jié)果。

Neo4j CQL已提供“LIMIT”子句來過濾或限制查詢返回的行數(shù)。 它修剪CQL查詢結(jié)果集底部的結(jié)果。

MATCH (person:Person)?

RETURN ID(person),person.name,person.money?

ORDER BY person.money DESC skip 4 limit 2

DISTINCT?排重

這個函數(shù)的用法就像SQL中的distinct關(guān)鍵字,返回的是所有不同值。

MATCH (p:Person) RETURN Distinct(p.character)?

Neo4j CQL高級

CQL?函數(shù)

字符串函數(shù)

S.No.? 功能 描述
1 UPPER? 它用于將所有字母更改為大寫字母。
2 LOWER? 它用于將所有字母改為小寫字母。
3 SUBSTRING? 它用于獲取給定String的子字符串。
4 REPLACE? 它用于替換一個字符串的子字符串。

舉例:

MATCH (p:Person)?

RETURN ID(p),LOWER(p.character)?

match(p:Person) return?

p.character,lower(p.character),p.name,substring(p.name,2),replace(p.name,"子","zi")?

聚合函數(shù)

S.No.? 聚集功能 描述
1 COUNT? 它返回由MATCH命令返回的行數(shù)。
2 MAX? 它從MATCH命令返回的一組行返回最大值。
3 MIN? 它返回由MATCH命令返回的一組行的最小值。
4 SUM? 它返回由MATCH命令返回的所有行的求和值。
5 AVG? 它返回由MATCH命令返回的所有行的平均值。

舉例:

MATCH (p:Person)?

RETURN MAX(p.money),SUM(p.money)

關(guān)系函數(shù)

S.No.? 聚集功能 描述
1 STARTNODE? 它用于知道關(guān)系的開始節(jié)點。
2 ENDNODE? 它用于知道關(guān)系的結(jié)束節(jié)點。
3 ID? 它用于知道關(guān)系的ID
4 TYPE? 它用于知道字符串表示中的一個關(guān)系的TYPE。

舉例:

match p = (:Person {name:"小王"})-[r:Couple]-(:Person)?

RETURN STARTNODE(r)?

shortestPath?函數(shù)返回最短的path

MATCH p=shortestPath( (node1)-[*]-(node2) )?

RETURN length(p), nodes(p)?

舉例:

MATCH p=shortestPath((person:Person {name:"小王"})-[*]-(person2:Person?

{name:"王武"}) ) RETURN length(p), nodes(p)

CQL多深度關(guān)系節(jié)點

使用with關(guān)鍵字

查詢?nèi)龑蛹夑P(guān)系節(jié)點如下:with可以將前面查詢結(jié)果作為后面查詢條件

match (na:Person)-[re]->(nb:Person) where na.name="小張" WITH na,re,nb match (nb:Person)-[re2]->(nc:Person) return na,re,nb,re2,nc

match (na:Person)-[re]->(nb:Person) where na.name="小林" WITH na,re,nb match (nb:Person)-[re2]->(nc:Person) return na,re,nb,re2,nc

直接拼接關(guān)系節(jié)點查詢

match (na:Person{name:"小張"})-[re]->(nb:Person)-[re2]->(nc:Person) return na,re,nb,re2,nc

為了方便,可以將查詢結(jié)果賦給變量,然后返回

match data=(na:Person{name:"小張"})-[re]->(nb:Person)-[re2]->(nc:Person) return data

使用深度運算符

當(dāng)實現(xiàn)多深度關(guān)系節(jié)點查詢時,顯然使用以上方式比較繁瑣。

可變數(shù)量的關(guān)系->節(jié)點可以使用-[:TYPE*minHops..maxHops]-。

查詢:

match data=(na:Person{name:"小張"})-[*1..2]-(nb:Person) return data

事務(wù)

為了保持數(shù)據(jù)的完整性和保證良好的事務(wù)行為,Neo4j也支持ACID特性 。

注意:?

(1)所有對Neo4j數(shù)據(jù)庫的數(shù)據(jù)修改操作都必須封裝在事務(wù)里。?

(2)默認的isolation level是READ_COMMITTED。?

(3)死鎖保護已經(jīng)內(nèi)置到核心事務(wù)管理 。?(Neo4j會在死鎖發(fā)生之前檢測死鎖并拋出異常。在異常拋出之前,事務(wù)會被標志為回滾。當(dāng)事務(wù)結(jié)束時,事務(wù)會釋放它所持有的鎖,則該事務(wù)的鎖所引起的死鎖也就是解除,其他事務(wù)就可以繼續(xù)執(zhí)行。當(dāng)用戶需要時,拋出異常的事務(wù)可以嘗試重新執(zhí)行)?

(4)除特別說明,Neo4j的API的操作都是線程安全的,Neo4j數(shù)據(jù)庫的操作也就沒有必要使用外部的同步方法。

索引

簡介

Neo4j CQL支持節(jié)點或關(guān)系屬性上的索引,以提高應(yīng)用程序的性能。

可以為具有相同標簽名稱的屬性上創(chuàng)建索引。

可以在MATCH或WHERE等運算符上使用這些索引列來改進CQL?的執(zhí)行。

創(chuàng)建單一索引

CREATE INDEX ON :Label(property)

例如:

CREATE INDEX ON :Person(name)

創(chuàng)建復(fù)合索引

CREATE INDEX ON :Person(age, gender)

全文模式索引

之前的常規(guī)模式索引只能對字符串進行精確匹配或者前后綴索(startswith,endswith,contains),全文索引將標記化索引字符串值,因此它可以匹配字符串中任何位置的術(shù)語。索引字符串如何被標記化并分解為術(shù)語,取決于配置全文模式索引的分析器。索引是通過屬性來創(chuàng)建,便于快速查找節(jié)點或者關(guān)系。

創(chuàng)建和配置全文模式索引

使用db.index.fulltext.createNodeIndex和db.index.fulltext.createRelationshipIndex創(chuàng)建全文模式索引。在創(chuàng)建索引時,每個索引必須為每個索引指定一個唯一的名稱,用于在查詢或刪除索引時引用相關(guān)的特定索引。然后,全文模式索引分別應(yīng)用于標簽列表或關(guān)系類型列表,分別用于節(jié)點和關(guān)系索引,然后應(yīng)用于屬性名稱列表。

call db.index.fulltext.createNodeIndex("索引名",[Label,Label],[屬性,屬性])?

call db.index.fulltext.createNodeIndex("nameAndDescription",["Person"],["name",?

"description"])

call db.index.fulltext.queryNodes("nameAndDescription", "小張") YIELD node, score?

RETURN node.name, node.description, score

查看和刪除索引

call db.indexes?或者?:schema

DROP INDEX ON :Person(name)

DROP INDEX ON :Person(age, gender)

call db.index.fulltext.drop("nameAndDescription")

約束

唯一性約束

作用

  • 避免重復(fù)記錄。
  • 強制執(zhí)行數(shù)據(jù)完整性規(guī)則

創(chuàng)建唯一性約束

CREATE CONSTRAINT ON (變量:<label_name>) ASSERT?變量.<property_name> IS UNIQUE

具體實例:

CREATE CONSTRAINT ON (person:Person) ASSERT person.name IS UNIQUE

刪除唯一性約束

DROP CONSTRAINT ON (cc:Person) ASSERT cc.name IS UNIQUE

3.5.2?屬性存在約束?(企業(yè)版中可用)?

CREATE CONSTRAINT ON (p:Person) ASSERT exists(p.name)

查看約束

call db.constraints?

:schema

Neo4j之Admin管理員操作

Neo4j -?數(shù)據(jù)庫備份和恢復(fù)

在對Neo4j數(shù)據(jù)進行備份、還原、遷移的操作時,首先要關(guān)閉neo4j

./bin/neo4j stop?

數(shù)據(jù)備份到文件

./bin/neo4j-admin dump --database=graph.db --to=/root/qyn.dump?

還原、遷移之前 ,關(guān)閉neo4j服務(wù)。操作同上

./bin/neo4j-admin load --from=/root/qyn.dump --database=graph.db --force?

重啟服務(wù)

./bin/neo4j start?

注意,運行數(shù)據(jù)備份可能會警告

WARNING: Max 1024 open fifiles allowed, minimum of 40000 recommended. See the Neo4j

manual

1.編輯這個文件

vi /etc/security/limits.conf

在文件最后加入下面這段 修改最大打開文件限制

* soft nofile 65535 
* hard nofile 65535

2.重啟服務(wù)器

再次執(zhí)行上面的步驟 警告就沒有了

調(diào)優(yōu)思路

增加服務(wù)器內(nèi)存 和 調(diào)整neo4j配置文件

# java heap?初始值?

dbms.memory.heap.initial_size=1g?

# java heap?最大值,一般不要超過可用物理內(nèi)存的80%?

dbms.memory.heap.max_size=16g?

# pagecache大小,官方建議設(shè)為:(總內(nèi)存-dbms.memory.heap.max_size)/2,?

dbms.memory.pagecache.size=2g?

neo4j剛啟動數(shù)據(jù)是冷的需要預(yù)熱

MATCH (n)?

OPTIONAL MATCH (n)-[r]->()?

RETURN count(n.name) + count(r);

查看執(zhí)行計劃進行索引優(yōu)化

Cypher查詢計劃程序?qū)⒚總€查詢轉(zhuǎn)換為執(zhí)行計劃。 執(zhí)行計劃告訴Neo4j在執(zhí)行查詢時要執(zhí)行哪些操作。

對執(zhí)行計劃的生成,Neo4j使用的都是基于成本的優(yōu)化器(Cost Based Optimizer,CBO),用于制訂精確的執(zhí)行過程??梢圆捎萌缦聝煞N不同的方式了解其內(nèi)部的工作機制:

EXPLAIN:是解釋機制,加入該關(guān)鍵字的Cypher語句可以預(yù)覽執(zhí)行的過程但并不實際執(zhí)行,所以也不會產(chǎn)生任何結(jié)果。

PROFILE:則是畫像機制,查詢中使用該關(guān)鍵字,不僅能夠看到執(zhí)行計劃的詳細內(nèi)容,也可以看到查詢的執(zhí)行結(jié)果。

關(guān)注指標:?

estimated rows: 需要被掃描行數(shù)的預(yù)估值?

dbhits: 實際運行結(jié)果的命中績效?

兩個值都是越小越好

使用索引和不使用索引對比

profile?MATCH (p { name : '小張' }) RETURN p

在之前加上profile來進行查詢,可以查看查詢計劃

Neo4j 圖形數(shù)據(jù)庫

?Neo4j?程序訪問

SpringBoot?整合Neo4j

1.導(dǎo)入jar包?

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.9</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.zql</groupId>
    <artifactId>spring-boot-neo4j-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot-neo4j-demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-neo4j</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

2.配置文件?application.yml

spring:
  data:
    neo4j:
      username: neo4j
      password: neo4j
      uri: bolt://localhost:7687

3.建立實體類

@Data
@ToString
public class Person {

    @Id
    @GeneratedValue
    private Long id;
    @Property("cid")
    private int pid;
    @Property
    private String name;
    private String character;
    private double money;
    private int gender;
    private int age;
    private String description;
}

4.數(shù)據(jù)持久化類

@Repository
public interface PersonRepository extends Neo4jRepository<Person,Long> {

    @Query("MATCH (p:Person) where p.money > $money return p")
    List<Person> personList(@Param("money")Double money);

    @Query("MATCH p=shortestPath((person:Person {name:{0}})-[*1..4]- (person2:Person {name:{1}}) ) RETURN p")
    List<Person> shortestPath(String startName,String endName);

}

5.編寫服務(wù)類

@Service
public class Neo4jPersonService {

    @Autowired
    private PersonRepository personRepository;

    public List<Person> personList(Double money){
        return personRepository.personList(money);
    }
    public List<Person> personAll(){
        return personRepository.findAll();
    }
    public Person save(Person person){
        return personRepository.save(person);
    }
    public List<Person> shortestPath(String startName, String endName){
        return personRepository.shortestPath(startName,endName);
    }
}

6.編寫測試類文章來源地址http://www.zghlxwxcb.cn/news/detail-495355.html

@SpringBootTest
class SpringBootNeo4jDemoApplicationTests {


    @Autowired
    private Neo4jPersonService neo4jPersonService;

    /**
     * 添加節(jié)點
     */
    @Test
    void save() {
        Person person = new Person();
        person.setAge(22);
        person.setName("小張");
        person.setGender(1);
        person.setMoney(10000);
        person.setGender(1);
        person.setDescription("描述");
        person.setCharacter("哈哈哈");
        person.setPid(2);
        Person person1 = neo4jPersonService.save(person);
        System.out.println(person1);
    }

    /**
     * 查詢所有節(jié)點
     */
    @Test
    void selectAll() {
        List<Person> personList = neo4jPersonService.personAll();
        System.out.println(personList);
    }


    /**
     * 根據(jù)條件查詢節(jié)點
     */
    @Test
    void condition() {
        List<Person> personList = neo4jPersonService.personList(new Double(1000));
        System.out.println(personList);
    }

    /**
     * 最短路徑
     */
    @Test
    void shortestPath() {
        List<Person> personList = neo4jPersonService.shortestPath("小張", "王武");
        System.out.println(personList);
    }
    
}

到了這里,關(guān)于Neo4j 圖形數(shù)據(jù)庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 圖數(shù)據(jù)庫 之 Neo4j - Cypher語法基礎(chǔ)(5)

    節(jié)點(Nodes) Cypher使用()來表示一個節(jié)點。 屬性可以用來存儲信息或者來條件匹配(查找) 創(chuàng)建節(jié)點 創(chuàng)建如下節(jié)點

    2024年02月19日
    瀏覽(22)
  • Neo4j | 保姆級教學(xué)之如何清空neo4j數(shù)據(jù)庫

    要清空neo4j數(shù)據(jù)庫,需要進行以下操作: 停止Neo4j服務(wù)器,關(guān)閉Neo4j的所有連接。 找到 Neo4j 數(shù)據(jù)庫存儲的目錄,通常是 data/databases/ 。 刪除該目錄中的所有文件和子目錄。 請注意,這將不可逆地刪除數(shù)據(jù)庫的所有內(nèi)容,包括節(jié)點、關(guān)系和屬性等數(shù)據(jù)。在執(zhí)行這個操作之前,請

    2024年02月06日
    瀏覽(22)
  • Neo4j數(shù)據(jù)庫刪除數(shù)據(jù)

    我們使用Neo4j圖數(shù)據(jù)庫進行寫入數(shù)據(jù)操作之后,免不了要刪除數(shù)據(jù)的。 但是Neo4j的控制臺沒有提供快捷的刪除按鈕,所以我們還是需要通過命令來操作。 如果數(shù)據(jù)庫中的數(shù)據(jù)量并不大,節(jié)點數(shù)相對較少,我們可以通過命令行直接刪除節(jié)點。 此類操作起到清空數(shù)據(jù)庫的效果,但

    2023年04月09日
    瀏覽(21)
  • neo4j清空數(shù)據(jù)庫

    清空所有Person、 Movie節(jié)點及其所有關(guān)系 查詢?nèi)我鈹?shù)據(jù) ?如果沒有, 就說明已經(jīng)刪除成功了 這段代碼是用Cypher查詢語言編寫的,用于清空所有的Person節(jié)點、Movie節(jié)點以及它們之間的所有關(guān)系。讓我們逐步解釋代碼的每個部分: 這部分代碼使用MATCH語句來查找圖數(shù)據(jù)庫中的所有

    2024年02月14日
    瀏覽(19)
  • 圖數(shù)據(jù)庫_Neo4j的使用場景_以及Windows版Neo4j Community Server安裝_欺詐檢測_推薦_知識圖譜---Neo4j圖數(shù)據(jù)庫工作筆記0003

    圖數(shù)據(jù)庫_Neo4j的使用場景_以及Windows版Neo4j Community Server安裝_欺詐檢測_推薦_知識圖譜---Neo4j圖數(shù)據(jù)庫工作筆記0003

    可以看到使用場景,比如欺詐檢測, 要建立圖譜,才能進行,欺詐人員檢測 ? 可以看到圖譜的各種應(yīng)用場景 然后推薦引擎也需要,可以看到 在金融,旅行,求職招聘,保健,服務(wù),媒體娛樂,都可以進行推薦 ? 然后還有知識圖譜 身份訪問管理,這里,可以進行安全管理,可以挖掘出潛在關(guān)系

    2024年02月12日
    瀏覽(29)
  • Neo4j數(shù)據(jù)庫使用相關(guān)

    Neo4j數(shù)據(jù)庫使用相關(guān)

    做知識圖譜相關(guān)項目,初步使用了neo4j數(shù)據(jù)庫,簡單記錄一下使用過程和踩坑備忘~ 操作系統(tǒng)Win10+Neo4j社區(qū)版(community,版本4.4.30) 目錄 一、安裝 1.1 安裝Java和Neo4j 1.2 環(huán)境變量設(shè)置 二、 Neo4j使用 2.1 安裝服務(wù) 2.2?數(shù)據(jù)庫使用 2.3 數(shù)據(jù)庫備份 ?Java下載鏈接:Java Downloads | Oracle

    2024年04月16日
    瀏覽(26)
  • 圖數(shù)據(jù)庫Neo4j簡介

    圖數(shù)據(jù)庫Neo4j簡介

    隨著社交、電商金融、零售、物聯(lián)網(wǎng)的快速發(fā)展,現(xiàn)實社會支起了一張張龐大二復(fù)雜的關(guān)系網(wǎng),傳統(tǒng)數(shù)據(jù)庫很難處理關(guān)系運算,急需一種支持海量復(fù)雜數(shù)據(jù)關(guān)系運算的數(shù)據(jù)庫,圖數(shù)據(jù)庫應(yīng)運而生。 圖數(shù)據(jù)庫是基于圖論實現(xiàn)的一種Nosql數(shù)據(jù)庫,起數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)查詢方式都是以

    2024年02月22日
    瀏覽(37)
  • 圖數(shù)據(jù)庫Neo4j——SpringBoot使用Neo4j & 簡單增刪改查 & 復(fù)雜查詢初步

    圖數(shù)據(jù)庫Neo4j——SpringBoot使用Neo4j & 簡單增刪改查 & 復(fù)雜查詢初步

    圖形數(shù)據(jù)庫是專門用于存儲圖形數(shù)據(jù)的數(shù)據(jù)庫,它使用圖形模型來存儲數(shù)據(jù),并且支持復(fù)雜的圖形查詢。常見的圖形數(shù)據(jù)庫有Neo4j、OrientDB等。 Neo4j是用Java實現(xiàn)的開源NoSQL圖數(shù)據(jù)庫,本篇博客介紹如何在SpringBoot中使用Neo4j圖數(shù)據(jù)庫,如何進行簡單的增刪改查,以及如何進行復(fù)雜

    2024年02月06日
    瀏覽(34)
  • 圖數(shù)據(jù)庫_Neo4j和SpringBoot整合使用_實戰(zhàn)創(chuàng)建明星關(guān)系圖譜---Neo4j圖數(shù)據(jù)庫工作筆記0010

    2023-09-10 10:37:48 補充 注意:下面是舊版本的語法,如果你發(fā)現(xiàn)@NodeEntity這樣的注解沒有的話可以這樣: 這里就要用@Node 另外如果@StartNode和@EndNode都沒有了,那么說明是用法變了. 關(guān)于最新的用法,在官網(wǎng)有明確的說明和案例,很有用: 下面給出官網(wǎng)的案例:

    2024年02月12日
    瀏覽(23)
  • 圖數(shù)據(jù)庫_Neo4j中文版_Centos7.9安裝Neo4j社區(qū)版3.5.9_基于jdk1.8---Neo4j圖數(shù)據(jù)庫工作筆記0012

    圖數(shù)據(jù)庫_Neo4j中文版_Centos7.9安裝Neo4j社區(qū)版3.5.9_基于jdk1.8---Neo4j圖數(shù)據(jù)庫工作筆記0012

    ? ? 由于我們在國內(nèi)使用啊,具體還是要用中文版滴,找了好久這個neo4j,原來還是有中文版的, 中文版下載地址在這里: 所有版本都在這里了,需要哪個自己去下載就可以了,要注意下載以后,參考: ?在這個位置下載,主要是找到對應(yīng)中文版的安裝包,花了寫時間啊 然后我們看一下安裝

    2024年02月12日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包