當前位置:網站首頁>還有和Redis一樣好用的NoSQL

還有和Redis一樣好用的NoSQL

2022-01-28 02:27:46 程序員萬京遊

實際上為了更好的描述實體之間的關系,我們要是再繼續使用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://cht.chowdera.com/2022/01/202201280227455985.html

隨機推薦