基礎知識
NoSQL (Neo4j) 比MySQL查詢速度快很多,這與圖結(jié)構有關,MySQL的查詢時間隨數(shù)據(jù)庫大?。ú樵兩疃龋┲笖?shù)增長,而Neo4j使用遍歷API的查詢時間是線性增長。
SQL是關系型技術使用的一種語言,全稱是Structured Query Language,是“結(jié)構化查詢語言”。
實際上NoSQL數(shù)據(jù)庫應該屬于非關系數(shù)據(jù)庫,其中包含圖形數(shù)據(jù)庫,Neo4j就是一種通用圖形數(shù)據(jù)庫。
NoSQL的分類
- 主鍵值存儲:處理大量并發(fā)訪問數(shù)據(jù),比如緩存。存在哈希表中使用put-get(write-read)操作
- 緩存,快速讀取訪問簡單域,大規(guī)模并發(fā)系統(tǒng)
- Redis, Memcached, Tokyo Cabinet
- 列族存儲:分布式主鍵值,大數(shù)據(jù)時保持高性能和高可用性
- 大規(guī)模寫入,并發(fā)數(shù)據(jù)訪問(讀寫)
- Google BigTable, Cassandra,Apache HBase
- 面向文檔的數(shù)據(jù)庫:簡單文件,無架構,可以添加自包含文件和關聯(lián)關系。類似以文件作為鍵值。
- 當域模型是自然文件,自然文件數(shù)據(jù)結(jié)構簡化開發(fā),高可擴展系統(tǒng)
- MongoDB, CouchDB
- 圖形數(shù)據(jù)庫:數(shù)據(jù)以非自然方式存儲,圖形遍歷查詢效率性能好
- 互聯(lián)數(shù)據(jù),節(jié)點關系表示的域,社交網(wǎng)絡,推薦引擎,訪問控制列表
- Neo4j, AllegroGraph, OrientDB
Neo4j理解
與ACID兼容,為原子性A,一致性C,隔離性I,持久性D。是一個事務數(shù)據(jù)庫
Neo4j版本
目前已更新到版本5,可以分多種版本
-
Neo4j Server
- Neo4j Enterprise 企業(yè)版,比社區(qū)版多一部分功能,支持數(shù)據(jù)庫集群,對超大規(guī)模數(shù)據(jù)存儲的支持,對更多CPU內(nèi)核查詢執(zhí)行優(yōu)化,在線備份等DBA功能,其他組件比如Bloom
- Neo4j Community 社區(qū)版,完全開源的Java軟件項目,GPL v3開源協(xié)議
- Neo4j Desktop 桌面端,包含試用的企業(yè)版,有應用管理器,圖形化界面
- Neo4j Driver
- Neo4j Integration & Connectors
使用方式
-
Cypher圖數(shù)據(jù)庫查詢語言
Cypher可以在Neo4j Browser1 或者通過瀏覽器中執(zhí)行,也可以在cypher-shell2中、通過命令行執(zhí)行,或者作為過程參數(shù)在Neo4j應用客戶端執(zhí)行。 -
Neo4j應用客戶端Desktop
客戶端應用可以以類似JDBC3或ODBC4的方式從遠程訪問數(shù)據(jù)庫、提交Cypher查詢,并接收返回結(jié)果。Neo4j官方提供的客戶端驅(qū)動支持以下5種語言:Java, JavaScript, Net, Python, Go
語言的驅(qū)動可以從這里訪問:neo4j官方
Neo4j的社區(qū)用戶還開發(fā)了其他語言驅(qū)動,包括C/C++、R等;以及應用開發(fā)框架來簡化實現(xiàn)、封裝操作,最常用的當屬SDN(數(shù)據(jù)集成)5(官方,教程)、以及OGM(對象封裝)6。 -
Neo4j服務器端擴展
Neo4j是純Java應用,支持在服務器端部署的JAR包來擴展數(shù)據(jù)庫功能。JAR包中的過程和函數(shù)可以在Cypher語句中調(diào)用。最有名的服務器端擴展有:APOC,ALGO(最短路徑搜索,中心性,社區(qū)檢測,相似度,鏈接預測功能)。服務器端擴展可以使用Neo4j核心數(shù)據(jù)庫提供的遍歷框架(Traversal Framework) ,以及核心API(Core API)來實現(xiàn)需要的功能。
桌面端下載安裝
官網(wǎng)前往官網(wǎng)下載并安裝
企業(yè)版本收費,桌面版本與社區(qū)版本均免費,區(qū)別在于桌面端有可視化客戶端,社區(qū)版本運行都是在命令行。
剩下就是填表下載,軟件免費,驗證郵箱注冊即可??梢赃x擇安裝位置和數(shù)據(jù)存儲位置,由于一般數(shù)據(jù)庫較大,數(shù)據(jù)存儲位置盡量留較多的存儲空間,不建議放C盤。
桌面端基本使用
第一次打開軟件速度較慢
提示更新時暫時沒有更新,選了later
桌面端菜單欄包括:項目,數(shù)據(jù)庫和圖軟件。
項目欄一個項目可以調(diào)用多個數(shù)據(jù)庫,可以是本地數(shù)據(jù)庫,也可以是遠程數(shù)據(jù)庫。新建本地數(shù)據(jù)庫時可以改變Neo4j的版本,如果存在未使用過的版本,新建后會自動下載。
數(shù)據(jù)庫欄鏈接的數(shù)據(jù)庫會在按照版本排列,數(shù)據(jù)庫有紅色stop,黃色Starting和綠色Active三種狀態(tài)
圖軟件當數(shù)據(jù)庫運行時,可以在圖軟件中使用Neo4j Browser工具進行手動輸入數(shù)據(jù)?;蛘咧苯觨pen里面選擇打開方式為Neo4j Browser。
Neo4j Browser
Database information里面包括節(jié)點,關系,屬性值,數(shù)據(jù)庫連接信息和數(shù)據(jù)庫信息介紹。通過選中可以在右邊打開新窗口進行可視化。
右上為命令行,可以使用cypher語言來新建節(jié)點和關系。
create (Variable:Label{Key1:Value1,......)})return Variable
create(n:大學{name:“武漢大學”}),(:大學{name:“北京理工大學”})
create (n:Stock{name:'安琪酵母',code:'600298',launchDate:date("2000-08-18")})return n
create(n:Stock{name:'招商銀行',code:'600036',launchDate:date("2002-04-09")}),(:Stock{name:'中科創(chuàng)達',code:'300496',launchDate:date("2015-12-10")}),(:Stock{name:'華工科技',code:'000988',launchDate:date("2000-06-08")}),(:Stock{name:'國信證券',code:'002736',launchDate:date("2014-12-29")})
MATCH(p1:`大學`),(p2:`院系`)Create(p1)-[r:院系]->(p2)
//點擊運行
刪除節(jié)點
//根據(jù)id刪除節(jié)點
MATCH (r)
WHERE id(r) = 6
DELETE r
查詢節(jié)點
MATCH(a:Stock)WHERE a.name = '安琪酵母' RETURN a
隱藏節(jié)點,顯示屬性(關系)
查詢某個標簽的所有節(jié)點
MATCH(a:Stock) RETURN a
查詢節(jié)點間關系
MATCH(:Stock{name:'安琪酵母'})-[r]->(:Province{name:'湖北'}) RETURN type(r)
獲取該節(jié)點的所有關系類型
MATCH(:Stock{name:'安琪酵母'})-[r]->() RETURN type(r)
刪除節(jié)點(先刪除關系后才可以刪除節(jié)點)
MATCH(a:Stock)WHERE a.name='中科創(chuàng)達' DELETE a
刪除某標簽所有節(jié)點或所有節(jié)點
MATCH(n:Stock)
DELETE n
//
MATCH(n)
DELETE n
刪除節(jié)點間關系,該節(jié)點所有的關系,標簽的所有關系,刪除所有
MATCH(:Stock{name:'安琪酵母'})-[r]->(:Province{name:'湖北'})DELETE r
\\
MATCH(:Stock{name:'安琪酵母'})-[r]->()DELETE r
\\
MATCH(:Stock)-[r]->()DELETE r
\\
MATCH(n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
更新
- 增加節(jié)點屬性
MATCH(a:Stock)WHERE a.name='安琪酵母'SET a.abbreviation='AQJM'RETURN a
- 刪除節(jié)點屬性
MATCH(a:Stock)WHERE a.name='安琪酵母'REMOVE a.abbreviation
導入CSV文件(如果包含中文需要使用UTF-8編碼),刪除所有
LOAD CSV WITH HEADERS FROM 'file:///exchange.csv'AS line CREATE(:Exchange{name:line.name,chinesename:line.chinesename,id:line.id})
\\
LOAD CSV WITH HEADERS FROM 'file:///Stocks-exchange.csv'AS line MATCH(from:Stock{cocode:line.stock_code}),(to:Exchange{id:line.exchange_id})MERGE (from)-[r:交易所]->(to)
社區(qū)版下載與安裝
網(wǎng)絡配置
Neo4j支持三種網(wǎng)絡協(xié)議(Protocol),分別是Bolt,HTTP和HTTPS,默認的連接器配置有三種,為了使用這三個端口,需要在Windows防火墻中創(chuàng)建Inbound Rules,允許通過端口7687,7474和7473訪問本機。
計算機防火墻中,tcp連接有三次握手,請求連接,同意連接,建立連接。入站規(guī)則inbound和出站規(guī)則outbound針對請求連接、同意連接的網(wǎng)絡包。
比如:A入站允許B,出站禁止B,那么A可以訪問B而B不能訪問A;A入站禁止B,出站允許B,那么A不能訪問B而B可以訪問A。
安全域與工作模式
安全域為UNtrust不信任區(qū),DMZ隔離區(qū),Trust信任區(qū),Local本地,Management管理。依次安全性增加,安全優(yōu)先級分別為5,50,85,100,100。
報文從低級別的安全區(qū)域向高級別的安全區(qū)域流動時為入方向(Inbound),報文從由高級別的安全區(qū)域向低級別的安全區(qū)域流動時為出方向(Outbound)。
交換模式(兩層模式)
路由模式(三層模式)
混合模式
配置各個網(wǎng)絡協(xié)議的監(jiān)聽地址和接口。
報錯警告
- 報錯1:無法啟動
考慮是因為桌面端和社區(qū)版沖突,端口占用,打不開7474端口。
停止數(shù)據(jù)庫,關閉桌面端軟件,重新啟動community,成功。 - 報錯2:無法打開browser
使用ip地址無法進入http://localhost:7474/,顯示localhost拒絕連接。打開windows功能如下。
沒有解決。
另一方法為進入community安裝路徑/conf/neo4j.conf,打開后在該位置取消注釋,不同版本的代碼不同。同時要保證地址為0.0.0.0,才可以被遠程主機訪問。
因為設置默認的網(wǎng)絡監(jiān)聽的IP地址,該默認地址用于設置三個網(wǎng)絡協(xié)議(Bolt,HTTP和HTTPs)的監(jiān)聽地址,即設置網(wǎng)絡協(xié)議的屬性:listen_address地址。在默認情況下,Neo4j只允許本地主機(localhost)訪問,要想通過網(wǎng)絡遠程訪問Neo4j數(shù)據(jù)庫,需要修改監(jiān)聽地址為 0.0.0.0,這樣設置之后,就能允許遠程主機的訪問。
問題解決。
- 報錯3:無法安裝服務
Unmatched argument at index 0: 'install-service'
Did you mean: neo4j windows-service install or neo4j windows-service uninstall or neo4j windows-service?
解決方法在bin目錄下運行 :
neo4j.bat windows-service install
提示安裝成功后可以運行
社區(qū)版基本使用
數(shù)據(jù)庫管理
neo4j start
neo4j stop
用戶管理
使用bin文件夾下面的cypher-shell實現(xiàn)命令行啟動
//添加用戶
CALL dbms.security.createUser(username,password,requirePasswordChange)
數(shù)據(jù)庫備份與恢復
//離線備份,停止neo4j數(shù)據(jù)之后
neo4j-admin dump --database=<database> --to=<destination-path>
//離線恢復
neo4j-admin load --from=<archive-path> --database=<database> --froce
使用過程中的報錯與警告
This query builds a cartesian product between disconnected patterns.
If a part of a query contains multiple disconnected patterns,
this will build a cartesian product between all those parts.
This may produce a large amount of data and slow down query processing.
While occasionally intended, it may often be possible to reformulate the
query that avoids the use of this cross product, perhaps by adding a
relationship between the different parts or by using OPTIONAL MATCH
(identifier is: (q))
如果您MATCH兩個不同的標簽,而它們之間沒有任何關系,那么您將收到此警告。原因是因為如果你這樣做:
MATCH (a:Foo), (b:Bar)
Neo4j 的工作就是找到這兩個節(jié)點的所有可能的組合。因此,對于 a 的第一個匹配,它將為 b 的每個匹配返回一行,對于 a 的第二個匹配,它將再次返回 a b 的每個匹配行,依此類推。因此,您將在結(jié)果中得到 (Foo 節(jié)點數(shù)) x (Bar 節(jié)點數(shù)) 總行數(shù)。隨著數(shù)據(jù)庫的增長,這對性能來說確實很糟糕。
使用Python調(diào)用
urllib & urllib2 & urllib3
urllib3官方文檔
urllib3其他參考文檔
對比urllib和urllib3
對比urllib和urllib2
-
Neo4j數(shù)據(jù)庫面向開發(fā)人員的工具,允許開發(fā)人員執(zhí)行查詢語句并可視化結(jié)果 ??
-
cypher shell 是neo4j出的一個終端,可以直接運行cypher命令,也可以執(zhí)行cypher腳本,還可以通過其他終端以運行cypher-shell命令的方式,運行cypher命令 ??
-
Java DataBase Connectivity,即Java數(shù)據(jù)庫連接API。簡而言之,就是通過Java語言來操作數(shù)據(jù)庫。 ??
-
ODBC是開放式數(shù)據(jù)庫連接。ODBC也是一個API,充當客戶端應用程序和服務器端數(shù)據(jù)庫之間的接口 ??
-
Spring Data Neo4j ??文章來源:http://www.zghlxwxcb.cn/news/detail-767463.html
-
OGM 類似于 ORM,意為 Object Graph Mapping,這樣可以實現(xiàn)一個對象和 Node 的關聯(lián) ??文章來源地址http://www.zghlxwxcb.cn/news/detail-767463.html
到了這里,關于Neo4j 學習筆記1的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!