天天看點

Neo4j圖資料庫01. 圖資料庫

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