More Related Content Similar to COSCUP 2016 Workshop : 快快樂樂學Neo4j (20) COSCUP 2016 Workshop : 快快樂樂學Neo4j5. 你也許碰過的SQL
• 關聯聯式資料庫 (Relational Database Management System,
RDBMS)
• 資料儲存以表格的形式儲存,從欄欄位、紀錄、資料表到資料庫
• 以列列為主的概念念,每⼀一列列就是⼀一筆資料
• 使⽤用SQL查詢語⾔言
• 資料庫的規劃要遵守ER-Model的規範
• MySQL, MS-SQL, Oracle, IBM DB2, SAP Sybase
6. NoSQL = Not Only SQL
• 資料⽤用表格以外的形式儲存
• 不同的查詢語⾔言
• 主流的NoSQL系統:
• ⽂文件儲存:Accumulo, HBase
• 鍵值儲存:Cassandra, Couchbase, MongoDB
• 以⾏行行為主:Dynamo, Redis
• 圖資料庫:Neo4j, Allegro, Titan (DSE-Graph)
11. 授權 $ € £ ¥ ?
• 提供企業版與社群版
• 強烈建議直接使⽤用企業版
• 新創公司授權⽅方案
• 員⼯工少於20⼈人,免費
• 年年度獲利利少於300萬美⾦金金,⼀一樣免費
22. 前置作業
• 安裝Oracle JDK 8 (OpenJDK可能有未知的問題)
• 下載Neo4j企業版 (社群版也可以)
• 解壓縮下載回來來的檔案
• 在Neo4j的根⽬目錄資料夾中,執⾏行行以下指令:
./bin/neo4j start
31. Cypher
• 基本查詢: MATCH, CREATE, WHERE, RETURN
• 以“ASCII Art”概念念設計的查詢語⾔言
MATCH (user)-[:BIRTH_PLACE]->(country)
RETURN user, country;
countryuser
BIRTH PLACE
(user)-[:BIRTH_PLACE]->(country)
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欄欄位的值
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;
查詢欄欄位符合特定字串串的節點
查詢節點,配合正規表達式搜尋欄欄位內容
查詢節點,使⽤用資料庫引擎內建的查詢模組
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);
建立節點間的⼀一對⼀一單向關係
建立三個節點,其中⼀一個節點向外指向另外兩兩個節點
搜尋現有符合條件的節點,將他們建立關係
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. 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();
})
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檔案內容
記得路路徑的設定