Neo4j 是目前應用非常廣泛的一款高性能的 NoSQL 圖數據庫,其設計和實現專門用于存儲、查詢和遍歷由節點(實體)、關系(邊)以及屬性(鍵值對)構成的圖形數據模型。它的核心優勢在于能夠以一種自然且高效的方式表示和處理極其復雜的關系網絡,從而克服傳統關系型數據庫(RDBMS)在多表 JOIN 查詢中性能急劇下降的問題。
下載地址:
Neo4j Deployment Center - Graph Database & Analytics
也可以通過docker進行部署
docker pull neo4j:latest
使用 docker run 命令啟動一個 Neo4j 容器,映射常用端口(7474 用于瀏覽器訪問、7687 用于 Bolt 協議):
docker run -d \--name neo4j \-p 7474:7474 -p 7687:7687 \-v /your/local/data:/data \-v /your/local/logs:/logs \-v /your/local/conf:/var/lib/neo4j/conf \-v /your/local/import:/var/lib/neo4j/import \--env NEO4J_AUTH=neo4j/your_password \neo4j:latest
1 專為圖數據設計
Neo4j 基于屬性圖模型,將數據存儲為節點、關系和屬性,這種模型與現實世界中實體及其相互聯系的本質非常貼近。對于那些本質就是網狀、連接密集的數據(如社交網絡、推薦系統中的用戶關系),它能提供直觀的數據表達和操作方式。
2 高性能圖遍歷
Neo4j 的核心優勢之一是“免索引鄰接”。每個節點直接存儲了指向其相鄰節點的指針,使得遍歷節點間的關系不依賴全局索引,能夠在常數時間內快速定位和訪問相鄰節點。對于涉及深度遍歷、路徑查詢和復雜關系分析的場景,這種設計大大減少了查詢開銷。
3 簡潔直觀的查詢語言
Neo4j 提供的 Cypher 查詢語言語法清晰、易學且表達力強。使用類似 ASCII 藝術的語法,如“(a)-[:FRIENDS_WITH]->(b)”來表示關系,不僅使查詢更自然,也簡化了開發者表達復雜圖查詢需求的過程。
4 靈活的模式和擴展性
Neo4j 的數據模型本身無固定的 schema 或只有很少的約束,這使得數據模式可以隨著應用需求的變化而輕松擴展和調整。開發者無需對數據庫表結構進行頻繁改動,這對于動態變化或者數據結構多變的業務場景非常有優勢。
5 ACID 事務支持和企業級特性
Neo4j 完全支持 ACID 事務,不論是讀取還是寫入操作,都能保證數據的一致性和可靠性。同時,企業版提供高可用集群、在線備份、監控和安全管理等多項高級特性,適合要求嚴格的生產環境。
6 Neo4j的優勢
-
高效遍歷: 免索引鄰接使得圖遍歷(例如查找“朋友的朋友”)的時間復雜度非常低,這對于大規模和復雜關系的數據查詢極其重要。
-
快速定位: 采用固定大小記錄存儲,每個節點或關系的物理位置可以通過簡單計算得到,進一步提升了讀寫速度。
-
直觀表達: 使用 Cypher 查詢語言,開發者可以快速編寫和調試查詢語句,便于快速搭建原型。
-
靈活模式: 無需提前設計復雜的表結構,能夠根據業務需求不斷演進數據模型,降低維護成本。
-
圖數據可視化: Neo4j Browser 和 Neo4j Bloom 等工具讓數據結果的圖形展示變得直觀生動,輔助決策分析。
-
多語言支持: 提供 Java、Python、JavaScript 等多種驅動和 API,使得開發者可以根據自己的技術棧靈活使用。
7 應用場景
-
社交推薦: 根據好友關系、互動歷史計算用戶影響力、發現潛在朋友。
-
網絡結構分析: 分析社交網絡中的傳播路徑和影響范圍,有效支持營銷策略和輿情監控。
-
個性化推薦: 分析用戶行為及其相互關系,從用戶的興趣、瀏覽、購買記錄中提取特征,提供精準商品或內容推薦。
-
協同過濾: 基于用戶之間的相似性推導新推薦項,無需傳統的多表關聯操作。
-
企業知識管理: 將企業內部各類數據以實體和關系的形式組織,為企業決策提供直觀數據支持。
-
智能問答和搜索: 構建基于語義的知識圖譜,助力自然語言查詢和推理過程,提高搜索引擎準確性。
-
異常模式識別: 在金融交易、信用卡使用等場景中,通過圖遍歷迅速檢測復雜交易路徑中隱藏的異常或可疑模式。
-
實時監控: 利用圖算法(如最短路徑、社區檢測等)判斷網絡中異常節點和異常交易行為,提前預警風險。
-
網絡拓撲管理: 對復雜網絡結構進行建模、監控和故障排查,幫助優化網絡配置。
-
供應鏈追蹤: 分析供應鏈各節點之間的關聯,提高物流和庫存管理效率,降低運營風險。
案例使用,通過python來實現一個簡易的neo4j的包:
使用 pip 安裝 neo4j:
pip install neo4j
from neo4j import GraphDatabase# 配置 Neo4j 的連接信息
URI = "bolt://localhost:7687"
USERNAME = "neo4j"
PASSWORD = "your_password" # 替換為你的密碼# 創建一個會話
driver = GraphDatabase.driver(URI, auth=(USERNAME, PASSWORD))def create_person(tx, name, age):"""創建一個 Person 節點"""tx.run("CREATE (p:Person {name: $name, age: $age})", name=name, age=age)def create_friendship(tx, name1, name2):"""創建兩個 Person 節點之間的關系"""tx.run("MATCH (a:Person {name: $name1}), (b:Person {name: $name2})""CREATE (a)-[:FRIEND]->(b)",name1=name1, name2=name2)def get_persons(tx):"""查詢所有 Person 節點"""result = tx.run("MATCH (p:Person) RETURN p.name AS name, p.age AS age")return [record for record in result]# 啟動 Neo4j 并寫入數據
try:with driver.session() as session:# 清空數據庫(可選)session.run("MATCH (n) DETACH DELETE n")# 創建節點session.write_transaction(create_person, "Alice", 30)session.write_transaction(create_person, "Bob", 25)session.write_transaction(create_person, "Charlie", 35)# 創建關系session.write_transaction(create_friendship, "Alice", "Bob")session.write_transaction(create_friendship, "Bob", "Charlie")# 查詢數據persons = session.read_transaction(get_persons)print("Persons in the database:")for person in persons:print(f"Name: {person['name']}, Age: {person['age']}")finally:driver.close()
運行結果
Persons in the database:
Name: Alice, Age: 30
Name: Bob, Age: 25
Name: Charlie, Age: 35
你可以通過 Neo4j Browser(http://localhost:7474
)登錄并運行以下查詢來驗證數據:
MATCH (p:Person) RETURN p
或者查看關系:
MATCH (a:Person)-[r:FRIEND]->(b:Person) RETURN a, r, b
以下舉個例子,以java1.8為例,安裝 Neo4j 3.5.6 版本的詳細步驟:
1. 安裝 Java JDK
Neo4j 是用 Java 語言開發的,因此需要安裝 Java JDK。以下是安裝 JDK 的步驟:
-
從 Oracle 官網下載 JDK 安裝包。
-
運行安裝包,雙擊下載的
.exe
文件開始安裝。 -
在安裝過程中,選擇合適的 JDK 安裝路徑,并勾選“添加到系統環境變量”選項。
-
安裝完成后,打開命令提示符,輸入
java -version
檢查 JDK 是否安裝成功。
2. 下載 Neo4j 安裝包
Neo4j 版本 | JDK 版本 |
---|---|
Neo4j 3.5.x | JDK 8 |
Neo4j 4.0.x | JDK 11 |
Neo4j 4.1.x | JDK 11 |
Neo4j 4.2.x | JDK 11 |
Neo4j 4.3.x | JDK 11 |
Neo4j 4.4.x | JDK 11 |
Neo4j 5.x | JDK 11 或 JDK 17 |
從 Neo4j 官網下載 Neo4j 社區版安裝包。由于官網下載速度較慢,也可以選擇從其他渠道下載。
https://download.csdn.net/download/yyfloveqcw/90629997
3. 解壓安裝包
將下載的 Neo4j 安裝包解壓到自定義目錄。
4. 配置 Neo4j
-
打開
neo4j-community-3.5.6/conf/neo4j.conf
文件。 -
根據需要修改配置文件中的參數,例如數據目錄、日志目錄等。
-
保存并關閉配置文件。
5. 設置環境變量
-
打開“設置” -> “系統” -> “高級系統設置” -> “環境變量”。
-
在系統變量中,新建一個名為
NEO4J_HOME
的變量,值為 Neo4j 安裝目錄。 -
在系統變量中,修改
Path
變量,添加%NEO4J_HOME%\bin
。
6. 啟動 Neo4j
-
打開命令提示符,切換到 Neo4j 安裝目錄。
-
輸入
neo4j.bat console
命令啟動 Neo4j。
7. 訪問 Neo4j
在瀏覽器中輸入 http://localhost:7474
,使用默認用戶名 neo4j
和密碼 neo4j
登錄。
8. 常見問題解答
-
為什么啟動 Neo4j 時出現錯誤?
-
可能原因包括:Java JDK 沒有正確安裝;環境變量設置錯誤;Neo4j 配置文件錯誤。
-
解決方法:檢查 Java JDK 是否安裝正確;確保環境變量設置正確;檢查 Neo4j 配置文件是否正確。
-
-
如何修改 Neo4j 的默認端口?
-
在
neo4j-community-3.5.6/conf/neo4j.conf
文件中,找到dbms.default.host
參數,將其值修改為你想要的端口。
-
-
如何將 Neo4j 安裝為服務?
-
打開命令提示符,切換到 Neo4j 安裝目錄。
-
輸入
neo4j.bat service install
命令安裝 Neo4j 服務。 -
使用
net start neo4j
命令啟動 Neo4j 服務。
-