日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

NOSQL图形数据库 - Neo4j

發布時間:2023/11/28 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NOSQL图形数据库 - Neo4j 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Neo4j入門指南


    • 1、簡介
    • 2、特點
    • 3、安裝
    • 4、基礎操作
    • 5、Java集成
      • 5.1 內嵌數據庫集成方式
      • 5.2 服務器集成方式
      • 5.3 Spring集成方式
    • 參考文檔


1、簡介

Neo4j是一個高性能的,NOSQL圖形數據庫,它將結構化數據存儲在網絡上而不是表中。它是一個嵌入式的、基于磁盤的、具備完全的事務特性的Java持久化引擎,但是它將結構化數據存儲在網絡(從數學角度叫做圖)上而不是表中。Neo4j也可以被看作是一個高性能的圖引擎,該引擎具有成熟數據庫的所有特性。程序員工作在一個面向對象的、靈活的網絡結構下而不是嚴格、靜態的表中——但是他們可以享受到具備完全的事務特性、企業級的數據庫的所有好處。

2、特點

  1. 對象關系的不匹配使得把面向對象的“圓的對象”擠到面向關系的“方的表”中是那么的困難和費勁,而這一切是可以避免的。
  2. 關系模型靜態、剛性、不靈活的本質使得改變schemas以滿足不斷變化的業務需求是非常困難的。由于同樣的原因,當開發小組想應用敏捷軟件開發時,數據庫經常拖后腿。
  3. 關系模型很不適合表達半結構化的數據——而業界的分析家和研究者都認為半結構化數據是信息管理中的下一個重頭戲。
  4. 網絡是一種非常高效的數據存儲結構。人腦是一個巨大的網絡,萬維網也同樣構造成網狀,這些都不是巧合。關系模型可以表達面向網絡的數據,但是在遍歷網絡并抽取信息的能力上關系模型是非常弱的。

3、安裝

從Docker Hub上pull一個Neo4j的鏡像

docker pull neo4j

啟動一個Neo4j的容器, 在Home目錄下建立一個/neo4j/data文件夾用于存放數據

docker run -d --name neo4j 
    --publish=7474:7474 
    --publish=7687:7687 
    --volume=$HOME/neo4j/data:/data 
    neo4j

在瀏覽器中訪問 http://ipaddress:7474 可以看到如下的UI界面,輸入默認用戶名和密碼neo4j即可連接到neo4j數據庫。

4、基礎操作

Neo4j使用Cypher語法操作數據庫,CRUD示例

創建節點

CREATE (e:Country{name:"中國"})
CREATE (e1:Country{name:"美國"})
CREATE (c:Company{name:"騰訊",createtime:"2000-12-20"})
CREATE (c1:Company{name:"蘋果",createtime:"2002-07-08"})
CREATE (c2:Company{name:"阿里",createtime:"2004-12-20"})
CREATE (c3:Company{name:"美團",createtime:"2010-12-20"})
CREATE (c4:Company{name:"亞馬遜",createtime:"2007-07-08"})

創建關系

MATCH (e:Country) WHERE e.name="中國" MATCH (c:Company) WHERE c.name="騰訊" CREATE (c)-[r:BELONG_TO]->(e) RETURN e,c,r
MATCH (e:Country) WHERE e.name="中國" MATCH (c:Company) WHERE c.name="美團" CREATE (c)-[r:BELONG_TO]->(e) RETURN e,c,r
MATCH (e:Country) WHERE e.name="中國" MATCH (c:Company) WHERE c.name="阿里" CREATE (c)-[r:BELONG_TO]->(e) RETURN e,c,r
MATCH (e:Country) WHERE e.name="美國" MATCH (c:Company) WHERE c.name="亞馬遜" CREATE (c)-[r:BELONG_TO]->(e) RETURN e,c,r
MATCH (e:Country) WHERE e.name="美國" MATCH (c:Company) WHERE c.name="蘋果" CREATE (c)-[r:BELONG_TO]->(e) RETURN e,c,r
MATCH (e:Country{name:"中國"}) MATCH (e1:Country{name:"美國"}) CREATE (e)-[r:PARTNER{desc:"成為合作伙伴",time:"2000-02-08"}]->(e1) RETURN e,e1,r
MATCH (e:Country{name:"中國"}) MATCH (e1:Country{name:"美國"}) CREATE (e1)-[r:PARTNER{desc:"成為合作伙伴",time:"2000-02-08"}]->(e) RETURN e,e1,r

查詢節點、關系

# 查詢 Company 類型的節點
MATCH (e:Company) RETURN e
MATCH (e:Company) RETURN e.name,e.createtime LIMIT 25
# 查詢所有的節點
MATCH (n) RETURN n LIMIT 25# 查詢 BELONG_TO 類型的關系
MATCH p=()-[r:BELONG_TO]->() RETURN p LIMIT 25
MATCH (e:Company{name:"美團"})-[r]-(e1:Country{name:"中國"}) RETURN e,r,e1
# 查詢所有的關系
MATCH p=()-->() RETURN p LIMIT 25

刪除節點、關系

# 刪除節點(刪除節點前,需保證該節點不存在關系)
MATCH (e:Company) WHERE e.name="美團" DELETE e
# 僅僅刪除`美團``中國`之間的關系
MATCH (e:Company{name:"美團"})-[r]-(e1:Country{name:"中國"}) DELETE r
# 刪除`美團``中國`節點以及他們之間的關系
MATCH (e:Company{name:"美團"})-[r]-(e1:Country{name:"中國"}) DELETE e,r,e1
# 刪除關系為BELONG_TO的節點以及他們的關系
MATCH p=()-[r:BELONG_TO]->() DELETE p
# 刪除所有存在關系的節點以及他們之間的關系
MATCH p=()-->() DELETE p

修改節點、關系屬性

MATCH (e:Company) WHERE e.name="美團" SET e.name="美團點評" RETURN e
MATCH (e:Company{name:"美團點評"})-[r]->(c:Country) SET r.name="屬于"  RETURN e,r,c

5、Java集成

5.1 內嵌數據庫集成方式

所需依賴

compile('org.neo4j:neo4j:3.4.3')

示例代碼

public static void main(String[] args) throws Exception {GraphDatabaseFactory dbFactory = new GraphDatabaseFactory();GraphDatabaseService db = dbFactory.newEmbeddedDatabase(new File("E:/TPNeo4jDB"));try (Transaction tx = db.beginTx()) {Node javaNode = db.createNode(Tutorials.JAVA);javaNode.setProperty("TutorialID", "JAVA001");javaNode.setProperty("Title", "Learn Java");javaNode.setProperty("NoOfChapters", "25");javaNode.setProperty("Status", "Completed");Node scalaNode = db.createNode(Tutorials.SCALA);scalaNode.setProperty("TutorialID", "SCALA001");scalaNode.setProperty("Title", "Learn Scala");scalaNode.setProperty("NoOfChapters", "20");scalaNode.setProperty("Status", "Completed");Relationship relationship = javaNode.createRelationshipTo(scalaNode, TutorialRelationships.JVM_LANGIAGES);relationship.setProperty("Id", "1234");relationship.setProperty("OOPS", "YES");relationship.setProperty("FP", "YES");tx.success();}System.out.println("Done successfully");}public enum Tutorials implements Label {JAVA, SCALA, SQL, NEO4J,;
}public enum TutorialRelationships implements RelationshipType {JVM_LANGIAGES, NON_JVM_LANGIAGES;
}

5.2 服務器集成方式

所需依賴

compile('org.neo4j.driver:neo4j-java-driver:1.6.1')

示例代碼

 public static void main(String[] args) throws Exception {Driver driver = GraphDatabase.driver("bolt://192.168.15.145:7687", AuthTokens.basic("neo4j", "123456"));Session session = driver.session();Map<String, Object> saveMap = new HashMap<>(2);saveMap.put("name", "Arthur001");saveMap.put("title", "King001");session.run("CREATE (a:Person {name: {name}, title: {title}})", saveMap);Map<String, Object> queryMap = new HashMap<>(1);queryMap.put("name", "Arthur001");StatementResult result = session.run("MATCH (a:Person) WHERE a.name = {name} " +"RETURN a.name AS name, a.title AS title", queryMap);while (result.hasNext()) {Record record = result.next();System.out.println(record.get("title").asString() + " " + record.get("name").asString());}session.close();driver.close();}

5.3 Spring集成方式

所需依賴

 compile ('org.springframework.data:spring-data-neo4j:5.0.8.RELEASE')

示例代碼

Domain Entities

@NodeEntity
public class Movie {@Id @GeneratedValue Long id;String title;Person director;@Relationship(type="ACTS_IN", direction = Relationship.INCOMING)Set<Person> actors;@Relationship(type = "RATED")List<Rating> ratings;
}

Repositories

interface MovieRepository extends Neo4jRepository<Movie, Long> {// derived finderMovie findByTitle(String title);@Query("MATCH (m:Movie)<-[rating:RATED]-(user) WHERE id(movie)={movie} return rating")List<Rating> getRatings(@Param("movie") Movie movie);// Co-ActorsSet<Person> findByActorsMoviesActorName(String name);@Query("MATCH (movie:Movie)-[:HAS_GENRE]->(genre)<-[:HAS_GENRE]-(similar)WHERE id(movie) = {0} RETURN similar")List<Movie> findSimilarMovies(Movie movie);
}

Configuration

@Configuration
@EnableTransactionManagement
@ComponentScan("org.neo4j.cineasts")
@EnableNeo4jRepositories("org.neo4j.cineasts.repository")
public class PersistenceContext {@Beanpublic SessionFactory getSessionFactory() {return new SessionFactory(configuration(), "org.neo4j.cineasts.domain");}@Beanpublic Neo4jTransactionManager transactionManager() throws Exception {return new Neo4jTransactionManager(getSessionFactory());}@Beanpublic org.neo4j.ogm.config.Configuration configuration() {return new org.neo4j.ogm.config.Configuration.Builder().uri("bolt://localhost").build();}
}

Example

@Autowired MovieRepository repo;Iterable<Movie> movies = repo.findAll();
Movie movie = repo.findByTitle("The Matrix");
repo.save(movie);List<Rating> ratings = repo.getRatings(movie);

參考文檔

  • Neo4j官方連接:https://neo4j.com/
  • w3c教程:https://www.w3cschool.cn/neo4j/
  • Spring-Data-Neo4j: https://projects.spring.io/spring-data-neo4j/

總結

以上是生活随笔為你收集整理的NOSQL图形数据库 - Neo4j的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。