Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
快快樂樂學Neo4j
Eric Lee 李鎮宇
eric@eric.lv
@開源⼈人年年會 2016.Aug.20
關於我
Eric Lee
NoSQL
PLUNIFY
:喜歡
:就職於
新加坡
:位於
Neo4j
Cassandra
:屬於
:屬於
Python Perl JavaScript
:寫程式 :寫程式 :寫程式
⼯工作坊內容
• NoSQL簡介
• 圖資料庫與Neo4j
• 資料庫規劃與應⽤用
• Neo4j伺服器安裝設定
• Cypher查詢語⾔言介紹
• 實⽤用語法分享
• API介紹與使⽤用
• ⽤用CSV做資料匯入
• 認證專家考試
先來來聊聊NoSQL
你也許碰過的SQL
• 關聯聯式資料庫 (Relational Database Management System,
RDBMS)
• 資料儲存以表格的形式儲存,從欄欄位、紀錄、資料表到資料庫
• 以列列為主的概念念,每⼀一列列就是⼀一筆資料...
NoSQL = Not Only SQL
• 資料⽤用表格以外的形式儲存
• 不同的查詢語⾔言
• 主流的NoSQL系統:
• ⽂文件儲存:Accumulo, HBase
• 鍵值儲存:Cassandra, Couchbase, MongoDB...
為什什麼要⽤用NoSQL?
• 資料架構(Data Model)的調整彈性
• ⾼高度擴展性(Scalability)
• 適合巨量量資料應⽤用
• 適合⾼高可⽤用度(Availability)的運轉環境
關於圖資料庫與Neo4j
圖資料庫
• 沒有Schema的問題,根據「圖學」的架構設計
(Graph Theory)
• 只有兩兩種資料型態:節點(node)跟關係(relationship)
• 特別的查詢語⾔言,依據產品⽽而有異異
• 被使⽤用在社群網路路服務或⼤大...
Neo4j
• 根基於Java架構的資料庫系統
• 資料類型:Node, Label, Property, Relationship
• 使⽤用Cypher query language (CQL)
• 已有商業與科學應⽤用的實際使⽤用案例例
授權 $ € £ ¥ ?
• 提供企業版與社群版
• 強烈建議直接使⽤用企業版
• 新創公司授權⽅方案
• 員⼯工少於20⼈人,免費
• 年年度獲利利少於300萬美⾦金金,⼀一樣免費
直接⽤用企業版就對了了
• 打造High Availability的商⽤用運轉環境
• 即時在線備份
• 針對⾼高容量量記憶體環境,⽀支援⾼高效能的快取模式
• 查詢語法追蹤與除錯
• 進階版的系統狀狀態監控
規劃你的資料庫
畫圖就完成的架構規劃
• 沒有嚴謹的Schema觀念念
• 不⽤用當下做長遠的規劃,圖是可以擴充的
• 世界的萬物本來來就具備「關係」構成圖
• 根據資料庫的主題,依次想好節點、標籤還有關係
簡單範例例:員⼯工資料庫
部⾨門
員⼯工
技能
屬於
擁有
名稱*
業務內容
成立年年
編制⼈人數
名稱*
類別
編號*
姓名
性別
⽣生⽇日
地址
電話
*表⽰示不可重複
應⽤用情境:網路路路路徑
圖片來來源:http://winlinuxnet.blogspot.sg/2011/11/configure-network-with-ospf-multiple.html
應⽤用情境:基因反應路路徑
圖片來來源: https://www.spandidos-publications.com/or/31/2/745
應⽤用情境:⽣生產流程
圖片來來源:http://www.spentamultimedia.com/projects/est/production-flow.html
應⽤用情境:社交網路路
圖片來來源:https://neo4j.com/blog/social-networks-in-the-database-using-a-graph-database/
應⽤用情境:詐欺偵測
圖片來來源:http://neo4j.com/graphgist/9d627127-003b-411a-b3ce-f8d3970c2afa
啟動你的Neo4j伺服器
前置作業
• 安裝Oracle JDK 8 (OpenJDK可能有未知的問題)
• 下載Neo4j企業版 (社群版也可以)
• 解壓縮下載回來來的檔案
• 在Neo4j的根⽬目錄資料夾中,執⾏行行以下指令:

./bin/neo4j start
第⼀一次登入,帳號密碼都是 “neo4j”
Neo4j已經啟動 http://localhost:7474
設定新密碼
開啟HTTP遠端連線
• 編輯設定檔 (/neo4j-root/conf/neo4j.conf)
• 取消這⼀一⾏行行的註解 #dbms.connector.http.address=0.0.0.0:7474
• API遠端存取,取消註解 #d...
網⾴頁操作介⾯面
結果顯⽰示區
查詢輸入區
捷徑
查詢伺服器狀狀態
:play sysinfo
如果你懶懶得裝Neo4j,
⼜又想有參參與感
使⽤用Neo4j Console
http://console.neo4j.org
註冊使⽤用Neo4j沙盒
https://neo4j.com/sandbox/
只有七天
Cypher Query Language入⾨門
Cypher
• 基本查詢: MATCH, CREATE, WHERE, RETURN
• 以“ASCII Art”概念念設計的查詢語⾔言



MATCH (user)-[:BIRTH_PLACE]->(country) 

RETURN u...
CREATE 建立新的節點
CREATE (n:Employee {Name:”Eric”,
Surname:“Lee”, Gender:”M”});
標籤(Label) 項⽬目(Properties)變數
建立⼀一個標籤名稱是Employee...
MATCH 與 RETURN
MATCH (n:Employee) RETURN n;
MATCH (n:Employee) RETURN n LIMIT 100;
查詢所有標籤名稱是Employee的節點並回傳
查詢所有標籤名稱是“Emplo...
⽤用RETURN格式化查詢結果
• 排序 加上ORDER BY
• 預設是升冪排列列,可⽤用DESC降冪排列列
• 列列出不重複的結果 加上DISTINCT
• 計算數⽬目 COUNT( )
WHERE 附加條件
MATCH (n:Employee)WHERE n.Name=“Eric”
RETURN n;
MATCH (n:Employee)WHERE n.Name=~“E.*”
RETURN n;
MATCH (n:Employ...
更更多WHERE語法
• 運算⼦子 n.Age >= 25
• 範圍 n.Age > 25 AND n.Age < 40
• 篩選NULL的項⽬目 IS NULL
• 否定 NOT
• 或 OR
⽤用CREATE建立關係
CREATE (e:Employee {Name:”Eric”})-[:WORK_IN]->
(c:Company {Name:”Silicon Cloud International”});
CREATE (s:Sk...
加入關係的查詢
MATCH (e:Employee)-[:KNOWS]->(s:Skill) RETURN
e.Name, s.Name;
MATCH (e:Employee)-[:KNOWS]->(s:Skill) WHERE
s.Name=...
過去活動被問過的問題
• 那個Audrey Tang是你們台灣⼈人嗎?
• 可以有多個標籤(Label)嗎?
• 關係可以定義標籤,可寫入屬性欄欄位(Property)嗎?
• 能否在節點中包含節點?
• 兩兩個節點之間可存在雙向關係?
• 跨...
實⽤用查詢語法分享
建立索引
CREATE INDEX ON :Employee(name) ;
針對特定標籤的特定屬性建立索引
避免重複的節點
CREATE CONSTRAINT ON (s:Skill)
ASSERT s.Name IS UNIQUE;
預先設定條件限制,規定特定欄欄位屬性不得重複
要查詢所有定義的限制,語法為:schema
加入限制條件之後,會⾃自動...
刪除所有資料
MATCH (n)-[r]-(q) DELETE n,r,q;
刪除節點還有節點之間的關係
刪除所有關係
MATCH (n)-[r]-() DELETE r;
* 想要刪除節點,必須先刪除該節點已經存在的關係
查詢所有使⽤用的標籤
MATCH (n) RETURN DISTINCT labels(n);
查詢所有的標籤,然後去重複後顯⽰示
API介紹與使⽤用⽅方式
Python
pip install neo4j-driver
from neo4j.v1 import GraphDatabase, basic_auth
driver = GraphDatabase.driver("bolt://local...
JavaScript
npm install neo4j-driver@1.0.2
var neo4j = require('neo4j-driver').v1;
var driver = neo4j.driver("bolt://localh...
其他
• 官⽅方負責維護的驅動程式
• 除了了Python跟JavaScript之外,還有.Net與Java版
• 其他開發者製作的Neo4j API
• Perl有”REST::Neo4p”可以⽤用,請⽤用CPAN安裝
• Python有Py...
利利⽤用現有表格匯入資料
• 以CSV格式為主
• 原始檔從Neo4j伺服器端執⾏行行匯入,速度較快
• 請先驗證CSV檔案內的資料品質
• 適合從其他資料庫進⾏行行資料移轉時使⽤用
CSV匯入範例例: 檔案路路徑
• CSV檔案要放在neo4j根⽬目錄的import資料夾內
• 若若要使⽤用任何路路徑需修改conf/neo4j.conf
註解掉這⼀一⾏行行或者直接刪除
CSV匯入範例例: CQL語法
USING PERIODIC COMMIT 1
LOAD CSV FROM 'file:///Names.csv' AS line
CREATE (n:Employee {FName:line[0],
LName...
CSV匯入範例例: 執⾏行行匯入
• 透過Web Console匯入
• 使⽤用neo4j-shell匯入
CSV匯入範例例: 遠端檔案
從file改成http或https
認證專家考試
考試規則
• 60分鐘80題,選擇題包含單、複選
• 及格標準:得到超過80%的分數
• 不及格可以重考
• ⽬目前仍免收費
出題範圍
• 圖資料庫的意涵、Neo4j基礎
• Cypher查詢語⾔言,著重於資料寫入與查詢
• 資料建構
• 開發流程
• 商業運轉應⽤用與⾼高可⽤用性模式
考過之後
沒什什麼質感的證書⼀一張

可嵌入LinkedIn
認證T-Shirt⼀一件 貼紙⼀一張
結語
• Graph Database的學習⾨門檻相對其他NoSQL低
• Neo4j具有很⼤大的擴充彈性,適合商業運轉。有完整
的商業公司提供技術⽀支援與改版
• 可以預期未來來主流語⾔言的Neo4j API官⽅方會⾃自⼰己做
• 已經有Ne...
Upcoming SlideShare
Loading in …5
×

COSCUP 2016 Workshop : 快快樂樂學Neo4j

2,727 views

Published on

My workshop at COSCUP2016. About graph database, you can learn how to modeling your data and start a Neo4j server.

Published in: Data & Analytics
  • Be the first to comment

COSCUP 2016 Workshop : 快快樂樂學Neo4j

  1. 1. 快快樂樂學Neo4j Eric Lee 李鎮宇 eric@eric.lv @開源⼈人年年會 2016.Aug.20
  2. 2. 關於我 Eric Lee NoSQL PLUNIFY :喜歡 :就職於 新加坡 :位於 Neo4j Cassandra :屬於 :屬於 Python Perl JavaScript :寫程式 :寫程式 :寫程式
  3. 3. ⼯工作坊內容 • NoSQL簡介 • 圖資料庫與Neo4j • 資料庫規劃與應⽤用 • Neo4j伺服器安裝設定 • Cypher查詢語⾔言介紹 • 實⽤用語法分享 • API介紹與使⽤用 • ⽤用CSV做資料匯入 • 認證專家考試
  4. 4. 先來來聊聊NoSQL
  5. 5. 你也許碰過的SQL • 關聯聯式資料庫 (Relational Database Management System, RDBMS) • 資料儲存以表格的形式儲存,從欄欄位、紀錄、資料表到資料庫 • 以列列為主的概念念,每⼀一列列就是⼀一筆資料 • 使⽤用SQL查詢語⾔言 • 資料庫的規劃要遵守ER-Model的規範 • MySQL, MS-SQL, Oracle, IBM DB2, SAP Sybase
  6. 6. NoSQL = Not Only SQL • 資料⽤用表格以外的形式儲存 • 不同的查詢語⾔言 • 主流的NoSQL系統: • ⽂文件儲存:Accumulo, HBase • 鍵值儲存:Cassandra, Couchbase, MongoDB • 以⾏行行為主:Dynamo, Redis • 圖資料庫:Neo4j, Allegro, Titan (DSE-Graph)
  7. 7. 為什什麼要⽤用NoSQL? • 資料架構(Data Model)的調整彈性 • ⾼高度擴展性(Scalability) • 適合巨量量資料應⽤用 • 適合⾼高可⽤用度(Availability)的運轉環境
  8. 8. 關於圖資料庫與Neo4j
  9. 9. 圖資料庫 • 沒有Schema的問題,根據「圖學」的架構設計 (Graph Theory) • 只有兩兩種資料型態:節點(node)跟關係(relationship) • 特別的查詢語⾔言,依據產品⽽而有異異 • 被使⽤用在社群網路路服務或⼤大型網站架構 Figure Credit: Wikipedia
  10. 10. Neo4j • 根基於Java架構的資料庫系統 • 資料類型:Node, Label, Property, Relationship • 使⽤用Cypher query language (CQL) • 已有商業與科學應⽤用的實際使⽤用案例例
  11. 11. 授權 $ € £ ¥ ? • 提供企業版與社群版 • 強烈建議直接使⽤用企業版 • 新創公司授權⽅方案 • 員⼯工少於20⼈人,免費 • 年年度獲利利少於300萬美⾦金金,⼀一樣免費
  12. 12. 直接⽤用企業版就對了了 • 打造High Availability的商⽤用運轉環境 • 即時在線備份 • 針對⾼高容量量記憶體環境,⽀支援⾼高效能的快取模式 • 查詢語法追蹤與除錯 • 進階版的系統狀狀態監控
  13. 13. 規劃你的資料庫
  14. 14. 畫圖就完成的架構規劃 • 沒有嚴謹的Schema觀念念 • 不⽤用當下做長遠的規劃,圖是可以擴充的 • 世界的萬物本來來就具備「關係」構成圖 • 根據資料庫的主題,依次想好節點、標籤還有關係
  15. 15. 簡單範例例:員⼯工資料庫 部⾨門 員⼯工 技能 屬於 擁有 名稱* 業務內容 成立年年 編制⼈人數 名稱* 類別 編號* 姓名 性別 ⽣生⽇日 地址 電話 *表⽰示不可重複
  16. 16. 應⽤用情境:網路路路路徑 圖片來來源:http://winlinuxnet.blogspot.sg/2011/11/configure-network-with-ospf-multiple.html
  17. 17. 應⽤用情境:基因反應路路徑 圖片來來源: https://www.spandidos-publications.com/or/31/2/745
  18. 18. 應⽤用情境:⽣生產流程 圖片來來源:http://www.spentamultimedia.com/projects/est/production-flow.html
  19. 19. 應⽤用情境:社交網路路 圖片來來源:https://neo4j.com/blog/social-networks-in-the-database-using-a-graph-database/
  20. 20. 應⽤用情境:詐欺偵測 圖片來來源:http://neo4j.com/graphgist/9d627127-003b-411a-b3ce-f8d3970c2afa
  21. 21. 啟動你的Neo4j伺服器
  22. 22. 前置作業 • 安裝Oracle JDK 8 (OpenJDK可能有未知的問題) • 下載Neo4j企業版 (社群版也可以) • 解壓縮下載回來來的檔案 • 在Neo4j的根⽬目錄資料夾中,執⾏行行以下指令:
 ./bin/neo4j start
  23. 23. 第⼀一次登入,帳號密碼都是 “neo4j” Neo4j已經啟動 http://localhost:7474 設定新密碼
  24. 24. 開啟HTTP遠端連線 • 編輯設定檔 (/neo4j-root/conf/neo4j.conf) • 取消這⼀一⾏行行的註解 #dbms.connector.http.address=0.0.0.0:7474 • API遠端存取,取消註解 #dbms.connector.bolt.address=0.0.0.0:7687 API HTTP
  25. 25. 網⾴頁操作介⾯面 結果顯⽰示區 查詢輸入區 捷徑
  26. 26. 查詢伺服器狀狀態 :play sysinfo
  27. 27. 如果你懶懶得裝Neo4j, ⼜又想有參參與感
  28. 28. 使⽤用Neo4j Console http://console.neo4j.org
  29. 29. 註冊使⽤用Neo4j沙盒 https://neo4j.com/sandbox/ 只有七天
  30. 30. Cypher Query Language入⾨門
  31. 31. Cypher • 基本查詢: MATCH, CREATE, WHERE, RETURN • 以“ASCII Art”概念念設計的查詢語⾔言
 
 MATCH (user)-[:BIRTH_PLACE]->(country) 
 RETURN user, country; countryuser BIRTH PLACE (user)-[:BIRTH_PLACE]->(country)
  32. 32. CREATE 建立新的節點 CREATE (n:Employee {Name:”Eric”, Surname:“Lee”, Gender:”M”}); 標籤(Label) 項⽬目(Properties)變數 建立⼀一個標籤名稱是Employee的節點,並寫入幾個欄欄位項⽬目
  33. 33. MATCH 與 RETURN MATCH (n:Employee) RETURN n; MATCH (n:Employee) RETURN n LIMIT 100; 查詢所有標籤名稱是Employee的節點並回傳 查詢所有標籤名稱是“Employee”的節點,但是只列列出其中100個 MATCH (n:Employee) RETURN n.Gender; 查詢所有標籤是Employee的節點,列列出該節點Gender欄欄位的值
  34. 34. ⽤用RETURN格式化查詢結果 • 排序 加上ORDER BY • 預設是升冪排列列,可⽤用DESC降冪排列列 • 列列出不重複的結果 加上DISTINCT • 計算數⽬目 COUNT( )
  35. 35. WHERE 附加條件 MATCH (n:Employee)WHERE n.Name=“Eric” RETURN n; MATCH (n:Employee)WHERE n.Name=~“E.*” RETURN n; MATCH (n:Employee)WHERE n.Name STARTS WITH “Er” RETURN n; 查詢欄欄位符合特定字串串的節點 查詢節點,配合正規表達式搜尋欄欄位內容 查詢節點,使⽤用資料庫引擎內建的查詢模組
  36. 36. 更更多WHERE語法 • 運算⼦子 n.Age >= 25 • 範圍 n.Age > 25 AND n.Age < 40 • 篩選NULL的項⽬目 IS NULL • 否定 NOT • 或 OR
  37. 37. ⽤用CREATE建立關係 CREATE (e:Employee {Name:”Eric”})-[:WORK_IN]-> (c:Company {Name:”Silicon Cloud International”}); CREATE (s:Skill {Name:”Neo4j”})<-[:KNOWNS]-(e:Employee {Name:”Eric”})-[:WORK_IN]-> (c:Company {Name:”Silicon Cloud International”}); MATCH (e:Employee {Name:”Eric”}), (s:Skill) WHERE s.Name=“Neo4j” CREATE UNIQUE (e)-[:KNOWS]->(s); 建立節點間的⼀一對⼀一單向關係 建立三個節點,其中⼀一個節點向外指向另外兩兩個節點 搜尋現有符合條件的節點,將他們建立關係
  38. 38. 加入關係的查詢 MATCH (e:Employee)-[:KNOWS]->(s:Skill) RETURN e.Name, s.Name; MATCH (e:Employee)-[:KNOWS]->(s:Skill) WHERE s.Name=“Neo4j” RETURN e.Name; MATCH (e:Employee)-[r]->(s:Skill) RETURN r; 查詢符合此⼀一關係的兩兩個節點,僅顯⽰示兩兩個節點的Name欄欄位 查詢符合關係的兩兩節點,其中Skill標籤的節點有條件,顯⽰示 Employee節點的Name欄欄位 查詢兩兩個節點之前存在哪⼀一種關係
  39. 39. 過去活動被問過的問題 • 那個Audrey Tang是你們台灣⼈人嗎? • 可以有多個標籤(Label)嗎? • 關係可以定義標籤,可寫入屬性欄欄位(Property)嗎? • 能否在節點中包含節點? • 兩兩個節點之間可存在雙向關係? • 跨平台查詢的可能?
  40. 40. 實⽤用查詢語法分享
  41. 41. 建立索引 CREATE INDEX ON :Employee(name) ; 針對特定標籤的特定屬性建立索引
  42. 42. 避免重複的節點 CREATE CONSTRAINT ON (s:Skill) ASSERT s.Name IS UNIQUE; 預先設定條件限制,規定特定欄欄位屬性不得重複 要查詢所有定義的限制,語法為:schema 加入限制條件之後,會⾃自動建立相關索引
  43. 43. 刪除所有資料 MATCH (n)-[r]-(q) DELETE n,r,q; 刪除節點還有節點之間的關係
  44. 44. 刪除所有關係 MATCH (n)-[r]-() DELETE r; * 想要刪除節點,必須先刪除該節點已經存在的關係
  45. 45. 查詢所有使⽤用的標籤 MATCH (n) RETURN DISTINCT labels(n); 查詢所有的標籤,然後去重複後顯⽰示
  46. 46. API介紹與使⽤用⽅方式
  47. 47. Python pip install neo4j-driver from neo4j.v1 import GraphDatabase, basic_auth driver = GraphDatabase.driver("bolt://localhost", auth=basic_auth("neo4j", "neo4j")) session = driver.session() session.run("CREATE (a:Person {name:'Arthur', title:'King'})") result = session.run("MATCH (a:Person) WHERE a.name = 'Arthur' RETURN a.name AS name, a.title AS title") for record in result: print("%s %s" % (record["title"], record["name"])) session.close()
  48. 48. JavaScript npm install neo4j-driver@1.0.2 var neo4j = require('neo4j-driver').v1; var driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "neo4j")); var session = driver.session(); session .run( "CREATE (a:Person {name:'Arthur', title:'King'})" ) .then( function() { return session.run( "MATCH (a:Person) WHERE a.name = 'Arthur' RETURN a.name AS name, a.title AS title" ) }) .then( function( result ) { console.log( result.records[0].get("title") + " " + result.records[0].get("name") ); session.close(); driver.close(); })
  49. 49. 其他 • 官⽅方負責維護的驅動程式 • 除了了Python跟JavaScript之外,還有.Net與Java版 • 其他開發者製作的Neo4j API • Perl有”REST::Neo4p”可以⽤用,請⽤用CPAN安裝 • Python有Py2neo pip install py2neo • Ruby可以⽤用neography, neo4j-core或neo4j.rb • PHP:composer require graphaware/neo4j-php-client:^4.0 • R⽤用CRAN裝:install.packages(“RNeo4j”)
  50. 50. 利利⽤用現有表格匯入資料 • 以CSV格式為主 • 原始檔從Neo4j伺服器端執⾏行行匯入,速度較快 • 請先驗證CSV檔案內的資料品質 • 適合從其他資料庫進⾏行行資料移轉時使⽤用
  51. 51. CSV匯入範例例: 檔案路路徑 • CSV檔案要放在neo4j根⽬目錄的import資料夾內 • 若若要使⽤用任何路路徑需修改conf/neo4j.conf 註解掉這⼀一⾏行行或者直接刪除
  52. 52. CSV匯入範例例: CQL語法 USING PERIODIC COMMIT 1 LOAD CSV FROM 'file:///Names.csv' AS line CREATE (n:Employee {FName:line[0], LName:line[1],Title:line[2]}); CSV檔案內容 記得路路徑的設定
  53. 53. CSV匯入範例例: 執⾏行行匯入 • 透過Web Console匯入 • 使⽤用neo4j-shell匯入
  54. 54. CSV匯入範例例: 遠端檔案 從file改成http或https
  55. 55. 認證專家考試
  56. 56. 考試規則 • 60分鐘80題,選擇題包含單、複選 • 及格標準:得到超過80%的分數 • 不及格可以重考 • ⽬目前仍免收費
  57. 57. 出題範圍 • 圖資料庫的意涵、Neo4j基礎 • Cypher查詢語⾔言,著重於資料寫入與查詢 • 資料建構 • 開發流程 • 商業運轉應⽤用與⾼高可⽤用性模式
  58. 58. 考過之後 沒什什麼質感的證書⼀一張
 可嵌入LinkedIn 認證T-Shirt⼀一件 貼紙⼀一張
  59. 59. 結語 • Graph Database的學習⾨門檻相對其他NoSQL低 • Neo4j具有很⼤大的擴充彈性,適合商業運轉。有完整 的商業公司提供技術⽀支援與改版 • 可以預期未來來主流語⾔言的Neo4j API官⽅方會⾃自⼰己做 • 已經有Neo4j的⽣生態系,提供資料視覺化之類的⼯工具

×