01. 圖資料庫
圖資料庫是專門存儲和檢索大量資訊網絡的存儲引擎。它可以有效地将資料存儲為節點和關系,并允許高性能檢索和查詢這些結構。屬性可以添加到節點和關系。節點可以用零個或多個标簽标注,關系總是定向和命名。
1. Neo4j
Neo4j是一個開源的NOSQL圖形資料庫。它将資料轉換成化為節點、關系和屬性。使用圖查詢語言Cypher,支援叢集,支援ACID事務,并發控制、事務恢複、高可用性。
介紹(第一章):
https://neo4j.com/docs/developer-manual/3.2/introduction/
基礎入門:https://neo4j.com/developer/java/
Java開發手冊:http://neo4j.com/docs/java-reference/current/
Java API: https://neo4j.com/docs/java-reference/current/javadocs/
2. 圖查詢語言Cypher
1. 查詢語言文檔(第三章)
https://neo4j.com/docs/developer-manual/3.2/cypher/clauses/
2. 建立節點
CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})
CREATE (Carrie:Person {name:'Carrie-Anne Moss', born:1967})
前面的Keanu實際沒有作用,
3. 建立聯系
CREATE
(Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix),
(Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix)
:['Neo']指的是關系上的屬性。
4. 删除
删除所有節點和關系 :
MATCH (n) DETACH DELETE n
删除CLASS标簽所有節點和關系:
MATCH (n:CLASS) DETACH DELETE n
MATCH (n:CLASS) where n.title='A Few Good Men' DETACH DELETE n
5. match(查找)
1. 傳回資料庫中所有類型的節點
MATCH (n) RETURN n
傳回獨立節點:
MATCH (tom {name: "Tom Hanks"}) RETURN tom
MATCH (people:Person) RETURN people.name LIMIT 10
2. 标簽類型的所有節點
MATCH (movie:Movie) RETURN movie.title
3. 不帶聯系指向的match
MATCH (director { name: 'Nora Ephron' })--(movie)
RETURN movie.title
傳回所有'Nora Ephron'導演的電影。符号‘--’指的是不考慮聯系的類型和方向。
4. 帶聯系指向的match
MATCH (:Person { name: 'Nora Ephron' })-->(movie)
RETURN movie.title
這個隻知道有聯系,但是不清楚聯系的類型。
5. 帶聯系指向和類型的match
MATCH (wallstreet:Movie { title: 'The Matrix Reloaded' })<-[:ACTED_IN]-(actor)
RETURN actor.name
傳回所有acted in 'The Matrix Reloaded'演員。
帶了聯系指向和類型。
MATCH (director:Person)-[:DIRECTED]->(movie)
WHERE director.name = "Vincent Ward"
RETURN movie.title
箭頭的指向實際上就是關系的指向。
等價于:
MATCH (movie)<-[:DIRECTED]-(director)
WHERE director.name = "Vincent Ward"
RETURN movie.title
6. 多類型比對
MATCH (movie { title: 'The Matrix Reloaded' })<-[:ACTED_IN|:DIRECTED]-(person)
RETURN person.name
傳回和'The Matrix Reloaded'是演員或者導演關系的人
7. 查詢這個節點類和其相關調用
MATCH (c:CLASS{ name: 'PreFetchServiceImpl' })--(class)RETURN c,class
3. Java API
1. 建立節點
CREATE (n:CLASS {id : {id}, name: {name}, type: {type}, appCode : {appCode}, pack : {pack}, urls : {urls}})
2. 建立聯系
MATCH (a:CLASS),(b:CLASS) WHERE a.id = {aId} AND b.id = {bId} CREATE (a)-[r:IMPLEMENT]->(b)
a指向b,聯系的名稱是“IMPLEMENT”
Demo:
Driver driver = GraphDatabase.driver("bolt://127.0.0.1:7687", AuthTokens.basic("neo4j", "1234"));
Session session = driver.session();
session.run("CREATE (a:Person {name: {name}, title: {title}})",
parameters("name", "Arthur", "title", "King"));
StatementResult result = session.run("MATCH (a:Person) WHERE a.name = {name} " +
"RETURN a.name AS name, a.title AS title",
parameters("name", "Arthur"));
while (result.hasNext()) {
Record record = result.next();
System.out.println(record.get("title").asString() + " " + record.get("name").asString());
}
session.close();
driver.close();
轉載于:https://www.cnblogs.com/wangrd/p/7284054.html