實際上為了更好的描述實體之間的關系,我們要是再繼續使用Redis的話,是不是感覺實體之間的關系不夠那么的明顯,雖然也是屬于NoSQL的一種,但是相對來說,Redis,表現實體之間的關系就沒有那么清晰了,為了更好的描述實體之間的關系,就會使用圖形數據庫來進行了,那么今天阿粉介紹的,就是一個圖形化的數據可,Neo4J。
什么是Neo4J
Neo4j是一個世界領先的開源的基于圖的數據庫。它是使用Java語言完全開發的。那么什么是圖數據庫呢?圖數據庫是以圖結構的形式存儲數據的數據庫。它以節點,關系和屬性的形式存儲應用程序的數據。正如RDBMS以表的“行,列”的形式存儲數據,GDBMS以圖的形式存儲數據。
RDBMS與圖數據庫的區別
1.Tables 表Graphs 圖表
2.Rows 行Nodes 節點
3.Columns and Data 列和數據 Properties and its values屬性及其值
4.Constraints 約束Relationships 關系
5.Joins 加入Traversal 遍歷
說完了圖形數據庫,我們就來看看這個 Neo4J 數據庫吧
Neo4J 數據庫的安裝
neo4j是用Java語言編寫的圖形數據庫,運行時需要啟動JVM進程,因此,需安裝JAVA SE的JDK。關于 Java 怎么安裝,我就不用再多廢話了吧,到時候別忘了檢測一下 Java 的版本就好了,java -version
接下來我們就是要進行一個安裝了,我們先去官網,下載社區版,企業版要收費的,注意哈。
官網地址
下載完成,直接開始安裝,傻瓜式操作即可。
Neo4j應用程序有如下主要的目錄結構:
- bin目錄:用于存儲Neo4j的可執行程序
- conf目錄:用于控制Neo4j啟動的配置文件
- data目錄:用于存儲核心數據庫文件
- plugins目錄:用于存儲Neo4j的插件
注意,如果你使用的是Zip的壓縮包來進行的使用的話,那么你就需要注意一些地方,比如你如果是用 Zip 的包解壓之后,并且想要通過 bat 的命令啟動,直接在目錄下進行 cmd ,然后 neo4j.bat ,這時候可能會出現一個問題,就是版本可能會出現問題,你如果下載使用的是最新版的 Neo4J ,那么就可能會讓你使用 JDK 11 ,而阿粉就是踩過了這個大坑之后,才發現,bat 閃退的原因。
- 警告: ERROR! Neo4j cannot be started using java version 1.8.0_181
- 警告: * Please use Oracle(R) Java(TM) 11, OpenJDK(TM) 11 to run Neo4j Server.
- * Please see https://neo4j.com/docs/ for Neo4j installation instructions.
- Invoke-Neo4j : This instance of Java is not supported
- 所在位置 E:\softFile\neo4j-community-4.4.2\bin\neo4j.ps1:21 字符: 7
- + Exit (Invoke-Neo4j -Verbose:$Arguments.Verbose -CommandArgs $Argument ...
- + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
- + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Invoke-Neo4j
這樣就是說明我們的 JDk 的版本對應的和 Neo4J 需要的 JDK 是不匹配的,我們就需要換一下我們的 JDK 了。把他換成 JDK 11 就好了,再次啟動。
- neo4j.bat console
- E:\softFile\neo4j-community-4.4.2\bin>neo4j.bat console
- Directories in use:
- home: E:\softFile\neo4j-community-4.4.2
- config: E:\softFile\neo4j-community-4.4.2\conf
- logs: E:\softFile\neo4j-community-4.4.2\logs
- plugins: E:\softFile\neo4j-community-4.4.2\plugins
- import: E:\softFile\neo4j-community-4.4.2\import
- data: E:\softFile\neo4j-community-4.4.2\data
- certificates: E:\softFile\neo4j-community-4.4.2\certificates
- licenses: E:\softFile\neo4j-community-4.4.2\licenses
- run: E:\softFile\neo4j-community-4.4.2\run
- Starting Neo4j.
- 2021-12-19 12:37:08.121+0000 INFO Starting...
- 2021-12-19 12:37:09.665+0000 INFO This instance is ServerId{25e1fcb1} (25e1fcb1-702c-4b58-bcdc-3564df95b2a1)
- 2021-12-19 12:37:11.957+0000 INFO ======== Neo4j 4.4.2 ========
- 2021-12-19 12:37:14.556+0000 INFO Initializing system graph model for component 'security-users' with version -1 and status UNINITIALIZED
- 2021-12-19 12:37:14.567+0000 INFO Setting up initial user from defaults: neo4j
- 2021-12-19 12:37:14.568+0000 INFO Creating new user 'neo4j' (passwordChangeRequired=true, suspended=false)
- 2021-12-19 12:37:14.589+0000 INFO Setting version for 'security-users' to 3
- 2021-12-19 12:37:14.594+0000 INFO After initialization of system graph model component 'security-users' have version 3 and status CURRENT
- 2021-12-19 12:37:14.601+0000 INFO Performing postInitialization step for component 'security-users' with version 3 and status CURRENT
- 2021-12-19 12:37:15.979+0000 INFO Bolt enabled on 127.0.0.1:7687.
- 2021-12-19 12:37:17.200+0000 INFO Remote interface available at http://localhost:7474/
- 2021-12-19 12:37:17.206+0000 INFO id: 1ED17593750B5E6E3046A68E5254B92B64EE0B6CECA021D540D1B93BDFE67164
- 2021-12-19 12:37:17.206+0000 INFO name: system
- 2021-12-19 12:37:17.207+0000 INFO creationDate: 2021-12-19T12:37:12.956Z
- 2021-12-19 12:37:17.207+0000 INFO Started.
這時候,我們就直接訪問 localhost:7474 的端口,直接就能看到如下的畫面, 1.jpg
剛進入的時候可能需要大家輸入帳號密碼,默認的帳號密碼就是,neo4j 修改成你想要的就行了。
這樣登錄進去我們就能開始正式學習 Neo4J 的所有內容了。
Neo4J 的語法教學
Neo4j - CQL語法
- 它是Neo4j圖形數據庫的查詢語言。
- 它是一種聲明性模式匹配語言
- 它遵循SQL語法。
- 它的語法是非常簡單且人性化、可讀的格式。
我們在講語法之前首先我們先得看看 Neo4J 的構建模塊,不然之后的查詢都是無意義的。
Neo4j圖數據庫主要有以下構建塊 -
- 節點
- 屬性
- 關系
- 標簽
- 數據瀏覽器
節點是圖表的基本單位。它包含具有鍵值對的屬性,如下所示
屬性是用于描述圖節點和關系的鍵值對
關系是圖形數據庫的另一個主要構建塊。它連接兩個節點,如下所示。
Label將一個公共名稱與一組節點或關系相關聯。節點或關系可以包含一個或多個標簽。我們可以為現有節點或關系創建新標簽。我們可以從現有節點或關系中刪除現有標簽。
Neo4j數據瀏覽器 一旦我們安裝Neo4j,我們可以訪問Neo4j數據瀏覽器使用以下URL
http:// localhost:7474 / browser /
CQL 語法
CREATE 語法
- CREATE (<node-name>:<label-name>)
它是我們要創建的節點名稱。
它是一個節點標簽名稱
我們可以創建一個節點,然后給他安排上一個標簽
- CREATE (emp:Employee)
當我們看到
- Added 1 label, created 1 node, completed after 74 ms.
這就創建成功了,
那么怎么查看呢?
MATCH語法
- MATCH (<node-name>:<label-name>) return xxx
是這個樣子的
- MATCH (emp:Employee) return emp
- ╒═════╕
- │"emp"│
- ╞═════╡
- │{} │
- └─────┘
但是看到里面竟然沒有東西,就相當于是一個空的對象,那是不是就應該給里面放入屬性的操作呢?沒錯,肯定有
CREATE (emp:Employee{ id : 1001 ,name :"lucy", age : 10})
Added 1 label, created 1 node, set 3 properties, completed after 163 ms. 創建成功。
我們再次查看就能看到
- ╒══════════════════════════════════╕
- │"emp" │
- ╞══════════════════════════════════╡
- │{} │
- ├──────────────────────────────────┤
- │{"name":"lucy","id":1001,"age":10}│
- └──────────────────────────────────┘
如果我們想只要其中的一些對象的屬性,而不是全部屬性,那應該怎么操作呢?
RETURN語法
RETURN 可以返回的是一個對象,也可以是對象中的屬性,比如:
- MATCH (emp:Employee) return emp.name
結果就是下面這個樣子的,大家看一下,是不是感覺還是挺好用的。
- ╒══════════╕
- │"emp.name"│
- ╞══════════╡
- │"Lokesh" │
- ├──────────┤
- │"jack" │
- ├──────────┤
- │"luxun" │
- ├──────────┤
- │"lucy" │
- └──────────┘
** WHERE語法**
- WHERE <condition>
為什么在前面的位置阿粉說,CQL 是和 SQL 類型的,這完全是因為很多東西和 SQL 是類似的。
- MATCH (emp:Employee) where emp.name = 'jack' return emp
結果如下:
- ╒════════════════════════════════════════════════╕
- │"emp" │
- ╞════════════════════════════════════════════════╡
- │{"name":"jack","id":125,"deptno":10,"sal":35800}│
- └────────────────────────────────────────────────┘
相同的還有
布爾運算符 | 描述 |
---|---|
AND | 和 |
OR | 或者 |
NOT | 非 |
XOR | 異或 |
比較運算符 | 描述 |
---|---|
= | “等于”運算符 |
<> | “不等于”運算符 |
< | “小于”運算符 |
> | “大于”運算符 |
<= | “小于或等于”運算符。 |
>= | “大于或等于”運算符。 |
DELETE語法
刪除語法必然是有的,因為有創建,肯定有刪除。
- DELETE <node-name-list>
但是這個命令也不是單獨使用的哈,
- MATCH (e: Employee) DELETE e
直接刪除成功。
基礎的東西講完了,阿粉就得說說這個比較重要的內容了,關系,
Neo4j 的關系
我們之前創建節點的時候,那叫一個簡單舒適加愉快,但是創建關系就比較復雜了,因為需要考慮如何匹配到有關系的兩個節點,以及關系本身的屬性如何設置。這里我們就簡單學一下如何建立節點之間的關系。
由于Neo4j CQL語法是以人類可讀的格式。Neo4j CQL也使用類似的箭頭標記來創建兩個節點之間的關系。
每個關系(→)包含兩個節點
在Neo4j中,兩個節點之間的關系是有方向性的。它們是單向或雙向的。
如果我們嘗試創建一個沒有任何方向的關系,那么就會報錯。
關系創建語法
- CREATE (<node1-details>)-[<relationship-details>]->(<node2-details>)
我們這里直接使用創建新的節點來創建關系。
- CREATE (book:Book)-[contains:CONTAINS]->(bookStore:BOOKSTORE)
提示創建成功
- Added 2 labels, created 2 nodes, created 1 relationship, completed after 199 ms.
這里關系名稱是“CONTAINS”
關系標簽是“contains”。
- MATCH (book:Book)-[contains:CONTAINS]->(bookStore:BOOKSTORE) return contains
這么看是看不出有啥關系的,但是,我們可以從另外的一個位置
這樣看下來,這個 Neo4J 簡單操作是不是就學會了,阿粉接下來的文章中講怎么使用 Java 來操作 Neo4J 數據庫。歡迎大家來觀看。
原文鏈接:https://mp.weixin.qq.com/s/VX3ERRZykfHg1GbIwqYEOg