本文實例講述了Python使用py2neo操作圖數據庫neo4j的方法。分享給大家供大家參考,具體如下:
圖:數據結構中的圖由節點和其之間的邊組成。節點表示一個實體,邊表示實體之間的聯系。
圖數據庫:以圖的結構存儲管理數據的數據庫。其中一些數據庫將原生的圖結構經過優化后直接存儲,即原生圖存儲。還有一些圖數據庫將圖數據序列化后保存到關系型或其他數據庫中。
之所以使用圖數據庫存儲數據是因為它在處理實體之間存在復雜關系的數據具有很大的優勢。使用傳統的關系型數據庫在處理數據之間的關系時其實很不方便。例如查詢選修一個課程的同學時需要join兩個表,查詢選修某個課程的同學還選修什么課程,這就需要兩次join操作,當涉及到十分復雜的關系以及龐大的數據量時,關系型數據庫效率十分低下。而通過圖存儲,可以通過節點之間的邊十分便捷地查詢到結果。
圖模型:
節點(Node)是主要的數據元素,表示一個實體。
屬性(Properties)用于描述實體的特征,以鍵值對的方式表示,其中鍵是字符串,可以對屬性創建索引和約束。
關系(Relationships)表示實體之間的聯系,關系具有方向,實體之間可以有多個關系,關系也可以具有屬性
標簽(Label)用于將實體分類,一個實體可以具有多個標簽,對標簽進行索引可以加速查找
Neo4j是目前最流行的圖數據庫,它采用原生圖存儲,在windows中下載安裝訪問如下地址https://neo4j.com/download/community-edition/。在Linux下通過如下命令下載解壓
curl -O http://dist.neo4j.org/neo4j-community-3.4.5-unix.tar.gztar -axvf neo4j-community-3.4.5-unix.tar.gz
修改配置文件conf/neo4j.conf
# 修改第22行load csv時l路徑,在前面加個#,可從任意路徑讀取文件#dbms.directories.import=import# 修改35行和36行,設置JVM初始堆內存和JVM最大堆內存# 生產環境給的JVM最大堆內存越大越好,但是要小于機器的物理內存dbms.memory.heap.initial_size=5gdbms.memory.heap.max_size=10g# 修改46行,可以認為這個是緩存,如果機器配置高,這個越大越好dbms.memory.pagecache.size=10g# 修改54行,去掉改行的#,可以遠程通過ip訪問neo4j數據庫dbms.connectors.default_listen_address=0.0.0.0# 默認 bolt端口是7687,http端口是7474,https關口是7473,不修改下面3項也可以# 修改71行,去掉#,設置http端口為7687,端口可以自定義,只要不和其他端口沖突就行#dbms.connector.bolt.listen_address=:7687# 修改75行,去掉#,設置http端口為7474,端口可以自定義,只要不和其他端口沖突就行dbms.connector.http.listen_address=:7474# 修改79行,去掉#,設置http端口為7473,端口可以自定義,只要不和其他端口沖突就行dbms.connector.https.listen_address=:7473# 去掉#,允許從遠程url來load csvdbms.security.allow_csv_import_from_file_urls=true# 修改250行,去掉#,設置neo4j-shell端口,端口可以自定義,只要不和其他端口沖突就行dbms.shell.port=1337# 修改254行,設置neo4j可讀可寫dbms.read_only=false
在bin目錄下執行 ./neo4j start,啟動服務,在瀏覽器http://服務器ip地址:7474/browser/可以看到neo4j的可視化界面
py2neo是一個社區第三方庫,通過它可以更為便捷地使用python來操作neo4j
安裝py2neo:pip install py2neo
,我安裝的版本是4.3.0
創建節點和它們之間的關系,注意在使用下面的py2neo相關類之前首先需要import導入:
新聞熱點
疑難解答