圖形數據庫(Graph Database)是NoSQL數據庫家族中特殊的存在,用於存儲豐富的關系數據,Neo4j 是目前最流行的圖形數據庫,支持完整的事務,在屬性圖中,圖是由頂點(Vertex),邊(Edge)和屬性(Property)組成的,頂點和邊都可以設置屬性,頂點也稱作節點,邊也稱作關系,每個節點和關系都可以由一個或多個屬性。Neo4j創建的圖是用頂點和邊構建一個有向圖,其查詢語言cypher已經成為事實上的標准。
關系型數據庫只對單個Join操作進行優化查詢,而多重Join操作查詢的性能顯著下降。圖形數據庫適合查詢關系數據,由於圖形遍歷的局部性,不管圖形中由多少節點和關系,根據遍歷規則,Neo4j只訪問與遍歷相關的節點,不受到總數據集大小的影響,從而保持期待的性能;相應地,遍歷的節點越多,遍歷速度越慢,但是變慢是線性的,這使得圖形數據庫不適合做海量數據統計分析。對與存在大量豐富關系的數據,遍歷的性能不受圖形數據量大小的影響,這使得Neo4j成為解決圖形問題的理想數據庫。
我的Neo4j系列的文章收錄在:Neo4j
一,安裝Neo4j
在安裝neo4j之前,需要安裝Java JRE,並配置Java開發環境,然后安裝neo4j服務。
1,安裝Java JRE
Neo4j是基於Java運行環境的圖形數據庫,因此,必須向系統中安裝JAVA SE(Standard Editon)的JRE。從Oracle官方網站下載 Java SE JRE,當前的版本是JRE 8。
JDK和JRE是有區別的,JDK(Java Development Kit)是包括Java運行環境(JRE)和Java開發工具;而JRE(Java Runtime Environment)是運行Java程序時必須安裝的環境。如果只是運行Java程序,那么只需要安裝JRE即可;如果希望開發Java程序,那么必須安裝JDK。
配置Java的環境變量,Windows系統有系統環境變量和用戶環境變量,都配置,配置環境變量分兩步進行:
第一步,新建JAVA_HOME變量,變量值填寫jdk的安裝目錄,默認的安裝目錄是:C:\Program Files\Java\jre1.8.0_211
第二步,編輯Path變量,在Path變量值的最后輸入:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
檢查配置是否成功,運行cmd,輸入java -version,如果顯示java的版本信息,說明Java的安裝和配置成功。
2,下載Neo4j安裝文件
從Neo4j官網下載最新版本Neo4j 3.2 社區(Community)版本 “neo4j-community-3.2.0-windows.zip”,解壓到主目錄,“D:\Program Files\neo4j-community-3.2.”。
Neo4j應用程序有如下主要的目錄結構:
- bin目錄:用於存儲Neo4j的可執行程序;
- conf目錄:用於控制Neo4j啟動的配置文件;
- data目錄:用於存儲核心數據庫文件;
- plugins目錄:用於存儲Neo4j的插件;
3,創建ne04j的環境變量
創建主目錄環境變量NEO4J_HOME,並把主目錄設置為變量值。
二,Neo4j的配置
配置文檔存儲在conf目錄下,Neo4j通過配置文件neo4j.conf控制服務器的工作。默認情況下,不需要進行任何配置,就可以啟動和運行服務器。
1,核心數據文件的位置
例如,核心數據文件存儲的位置,默認是在data/graph.db目錄中,要改變默認的存儲目錄,可以更新配置選項:
# The name of the database to mount #dbms.active_database=graph.db # Paths of directories in the installation. #dbms.directories.data=data
2,安全驗證,默認是啟用的
# Whether requests to Neo4j are authenticated. # To disable authentication, uncomment this line #dbms.security.auth_enabled=false
3,配置JAVA 堆內存的大小
# Java Heap Size: by default the Java heap size is dynamically calculated based on available system resources. # Uncomment these lines to set specific initial and maximum heap size. #dbms.memory.heap.initial_size=512m #dbms.memory.heap.max_size=512m
三,網絡連接配置
neo4j支持三種網絡協議,默認情況下,不需要配置就可以在本地直接運行。
1,Neo4j支持三種網絡協議(Protocol)
Neo4j支持三種網絡協議(Protocol),分別是Bolt,HTTP和HTTPS,默認的連接器配置有三種,為了使用這三個端口,需要在Windows防火牆中創建Inbound Rules,允許通過端口7687,7474和7473訪問本機。
2,連接器的可選屬性
listen_address:設置Neo4j監聽的鏈接,由兩部分組成:IP地址和端口號(Port)組成,格式是:<ip-address>:<port-number>
3,設置默認的監聽地址
設置默認的網絡監聽的IP地址,該默認地址用於設置三個網絡協議(Bolt,HTTP和HTTPs)的監聽地址,即設置網絡協議的屬性:listen_address地址。在默認情況下,Neo4j只允許本地主機(localhost)訪問,要想通過網絡遠程訪問Neo4j數據庫,需要修改監聽地址為 0.0.0.0,這樣設置之后,就能允許遠程主機的訪問。
# With default configuration Neo4j only accepts local connections. # To accept non-local connections, uncomment this line: dbms.connectors.default_listen_address=0.0.0.0
4,分別設置各個網絡協議的監聽地址和端口
HTTP鏈接器默認的端口號是7474,Bolt鏈接器默認的端口號是7687,必須在Windows 防火牆中允許遠程主機訪問這些端口號。
# Bolt connector dbms.connector.bolt.enabled=true #dbms.connector.bolt.tls_level=OPTIONAL #dbms.connector.bolt.listen_address=0.0.0.0:7687 # HTTP Connector. There must be exactly one HTTP connector. dbms.connector.http.enabled=true #dbms.connector.http.listen_address=0.0.0.0:7474 # HTTPS Connector. There can be zero or one HTTPS connectors. #dbms.connector.https.enabled=true #dbms.connector.https.listen_address=0.0.0.0:7473
四,啟動Neo4j程序
點擊組合鍵:Windows+R,輸入cmd,啟動DOS命令行窗口,切換到主目錄,以管理員身份運行命令
1,通過控制台啟動Neo4j程序
以管理員權限啟用DOS命令行窗口,輸入以下命令,通過控制台啟用neo4j程序
neo4j.bat console
如果看到以下消息,說明neo4j已經開始運行:
2,把Neo4j安裝為服務(Windows Services)
安裝和卸載服務:
bin\neo4j install-service
bin\neo4j uninstall-service
啟動服務,停止服務,重啟服務和查詢服務的狀態:
bin\neo4j start
bin\neo4j stop
bin\neo4j restart
bin\neo4j status
五,Neo4j集成的瀏覽器
Neo4j服務器具有一個集成的瀏覽器,在啟動neo4j服務之后,可以使用neo4j集成的瀏覽器管理圖數據庫。
在一個運行neo4j服務器主機上訪問 “http://localhost:7474/”,顯示以下的界面:
默認的host是bolt://localhost:7687,默認的用戶是neo4j,默認的密碼是:neo4j,第一次成功connect到Neo4j服務器之后,需要重置密碼。
訪問Graph Database需要輸入身份驗證,Host是Bolt協議標識的主機。
六,在Neo4j瀏覽器中創建節點和關系
下面我通過一個示例,演示如何通過Cypher命令,創建兩個節點和兩個關系。
CREATE (n:Person { name: 'Andres', title: 'Developer' }) return n; CREATE (n:Person { name: 'Vic', title: 'Developer' }) return n; match(n:Person{name:"Vic"}),(m:Person{name:"Andres"}) create (n)-[r:Friend]->(m) return r; match(n:Person{name:"Vic"}),(m:Person{name:"Andres"}) create (n)<-[r:Friend]-(m) return r;
1,創建第一個節點
在$ 命令行中,編寫Cypher腳本代碼,點擊Play按鈕,在圖數據庫中創建第一個節點:
在節點創建之后,在Graph模式下,能夠看到創建的圖形,繼續執行Cypher腳本,創建其他節點
2,創建節點之間的關系
創建節點之間的邊和創建節點的操作相同,例如,創建Person節點之間(Vic-> Andres之間的Friend關系),由於Friend關系是雙向的,可以繼續創建Andres和Vic之間的Friend關系:
3,查看節點之間的關系
在創建完兩個節點和關系之后,查看數據庫中的圖形:
后續,我會繼續分享我學習Neo4j圖形數據庫、Cypher腳本和相應的驅動程序的筆記,敬請期待。
推薦書籍:《Neo4j實戰》,原著是《Neo4j in Action》
官方手冊:
參考文檔: