更多可以閱讀https://blog.csdn.net/column/details/23835.html
Neo4j
標籤屬性圖模型
• Nodes – 節點。在其他圖模型中稱作“點”、“頂點”、“對象”。
• Relationships – 關係。在其他圖模型中也稱作“邊”、“弧”、“線”。關係擁有類型。
• Properties – 屬性,可以定義在節點和關係上。
• Labels – 標籤,代表節點的類別。
Neo4j與MySQL
這裏有列出了一些與關係型數據庫對應的概念方便理解:
動機
類似與關係型數據庫,創建了多個數據庫
想要像訪問關係型數據庫那樣來可以無縫切換多個數據庫
然而,在neo4j 3.0都暫時沒有辦法做到:每次啓動neo4j,它只能讀取一個數據庫。
比如,現在有兩個數據庫graph.db,graph2.db。假設neo4j默認的數據庫爲graph.db,啓動neo4j,這時候想要訪問graph2.db,必須修改neo4j的配置文件,將數據庫改爲graph2.db,重啓,此時纔可以訪問graph2.db.
那麼,如何可以比較neat地切換數據庫呢?
配置
Linux環境 同 博客:neo4j遠程訪問
方法
方法一:修改配置文件
這是官方文檔方法
大概思路是:
新建一個conf_test文件
修改neo4j.conf:
# The name of the database to mount
dbms.active_database=graph2.db //你的數據庫
將新的neo4j的配置文件的路徑設爲當前session的環境變量。
重啓neo4j
問題 來了,我每次都要先新建一個conf文件夾,修改conf文件,再設置環境變量,據麻煩!!!
方法二:建立graph.db的軟連接【推薦!!!】
(突然走向了大甩賣的風格了 -_-#)
不需要修改配置文件,不需要設置環境變量
首次修改:
// 請將$NEO4j_HOME改爲你的neo4j的安裝路徑
cd $NEO4j_HOME/data/databases/
// 保存原來數據庫
mv graph.db graph1.db
//建立指向新數據庫的軟件接
ln -s graph2.db graph.db
//重啓neo4j
cd $NEO4j_HOME/bin
./neo4j restart
再次修改
倘若我想訪問graph3.db,就很簡單了
//建立指向新數據庫的軟件接
ln -s graph3.db graph.db
//重啓neo4j
cd $NEO4j_HOME/bin
./neo4j restart
CQL基本簡介
Neo4j使用Cypher查詢圖形數據,Cypher是描述性的圖形查詢語言,語法簡單,功能強大,由於Neo4j在圖形數據庫家族中處於絕對領先的地位,擁有衆多的用戶基數,使得Cypher成爲圖形查詢語言的事實上的標準
CQL代表Cypher查詢語言。 像Oracle數據庫具有查詢語言SQL,Neo4j具有CQL作爲查詢語言。
Cypher語言的關鍵字不區分大小寫,但是屬性值,標籤,關係類型和變量是區分大小寫的。
CQL數據類型
S.No. | CQL數據類型 | 用法 |
---|---|---|
1. | boolean | 用於表示布爾文字:true,false。 |
2. | byte | 用於表示8位整數。 |
3. | short | 用於表示16位整數。 |
4. | int | 用於表示32位整數。 |
5. | long | 用於表示64位整數。 |
6. | float | I用於表示32位浮點數。 |
7. | double | 用於表示64位浮點數。 |
8. | char | 用於表示16位字符。 |
9. | String | 用於表示字符串。 |
常用CQL命令與函數
通過常用命令實現圖數據的增刪改查
S.No. | CQL命令/條 | 用法 |
---|---|---|
1。 | CREATE 創建 | 創建節點,關係和屬性 |
2。 | MATCH 匹配 | 檢索有關節點,關係和屬性數據 |
3。 | RETURN 返回 | 返回查詢結果 |
4。 | WHERE 哪裏 | 提供條件過濾檢索數據 |
5。 | DELETE 刪除 | 刪除節點和關係 |
6。 | REMOVE 移除 | 刪除節點和關係的屬性 |
7。 | ORDER BY 以…排序 | 排序檢索數據 |
8。 | SET 組 | 添加或更新標籤 |
常用函數
S.No. | 定製列表功能 | 用法 |
---|---|---|
1。 | String 字符串 | 它們用於使用String字面量。 |
2。 | Aggregation 聚合 | 它們用於對CQL查詢結果執行一些聚合操作。 |
3。 | Relationship 關係 | 他們用於獲取關係的細節,如startnode,endnode等。 |
圖數據的形式
基本語法
節點
節點必須包含在括號 () 內
(n:Label1:Label2)
• 標籤名前必須有冒號
• 節點可以有多個標籤
• 標籤對節點進行分類,似關係數據庫中的表 標籤對節點進行分類,類似關係數據庫中的表
(n)
節點可以沒有或者不指定標籤
(n:Label {prop: 'value'})
節點可以有屬性
關係
關係兩端各有一個短橫線 /減號,用方括包含關係類型 ,關係類型名前面必須有冒號 (:) 。在其中一端用 >或 < 代表關係的方向,也可以沒有方向
- - ,<- -,- ->
-[:DIRECTED]- ->
關係以短劃線\減號和方括號包含
與標籤一樣關係類型前必須要有“:”
- ->或 -[r:TYPE] ->
關係在創建時必須指定方向
關係在查詢時可以不指定方向表示雙向關係
< >指定關係的方 向
關係也可以有屬性
-[:KNOWS {since: 2010}]
模式
模式是由關係連接起來的節點構成的表達式,關係可以是有方向的,也可以沒有方向,雙向的
() -[] -()
() -[] ->()
()< -[] -()
模式的例子
(n:Label {prop:'value'})-[:TYPE]- >(m:Label)
- 最基本的模式:由一類關係連接兩個節點 最基本的模式:
- 由一類關係連接兩個節點
(p1:Person {name:'Alice'}) -[:KNOWS][->(p2:Person {name:'Bob'})
如果存在從Alice到Bob的、類型爲KNOWS的關係,那麼上面模式會將匹配的節點保存在 p1 和p2中。
Cypher查詢的組成部分
eg1.
eg 2.
eg 3.
圖查詢的結果 vs表狀數據結果
eg 4.
命名規範
參考文獻:Neo4j Inc. APAC 2018年 俞方樺
參考文獻:https://www.cnblogs.com/wenruo/p/7850120.html