項目的創建及配置 因為Neo4j依賴的jar包比較多,所以推薦使用Maven來管理。 首先創建一個Maven Project,添加依賴: 使用的是3.2.6版本,對應版本的Neo4j安裝地址摸我。 使用嵌入式資料庫 配置好之後,就可以開始了,第一步是學習開啟和關閉資料庫。 無論是創建一個新的資料庫, ...
項目的創建及配置
因為Neo4j依賴的jar包比較多,所以推薦使用Maven來管理。
首先創建一個Maven Project,添加依賴:
<dependency> <groupId>org.neo4j</groupId> <artifactId>neo4j</artifactId> <version>3.2.6</version> </dependency>
使用的是3.2.6版本,對應版本的Neo4j安裝地址摸我。
使用嵌入式資料庫
配置好之後,就可以開始了,第一步是學習開啟和關閉資料庫。
無論是創建一個新的資料庫,還是打開一個已有的資料庫,首先都需要創建一個GraphDatabaseService
實例。
graphDb = new GraphDatabaseFactory().newEmbeddedDatabase( DB_PATH );
GraphDatabaseService
實例可以被多個線程共用,但是一個資料庫只允許有一個Service實例。
關閉資料庫可以調用shutdown()
方法。
為了確保資料庫正確地關閉,可以添加一個ShutdownHook來實現關閉資料庫的動作。
private static void registerShutdownHook(final GraphDatabaseService graphDb) { Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { graphDb.shutdown(); } }); }
還可以通過API對資料庫的一些配置進行設置。
一種方法是載入.conf
配置文件。
GraphDatabaseService graphDb = new GraphDatabaseFactory() .newEmbeddedDatabaseBuilder( testDirectory.graphDbDir() ) .loadPropertiesFromFile( pathToConfig + "neo4j.conf" ) .newGraphDatabase();
另一種方法就是通過方法來添加。
GraphDatabaseService graphDb = new GraphDatabaseFactory() .newEmbeddedDatabaseBuilder( testDirectory.graphDbDir() ) .setConfig( GraphDatabaseSettings.pagecache_memory, "512M" ) .setConfig( GraphDatabaseSettings.string_block_size, "60" ) .setConfig( GraphDatabaseSettings.array_block_size, "300" ) .newGraphDatabase();
創建一個只讀的資料庫,資料庫必須已經存在。
graphDb = new GraphDatabaseFactory().newEmbeddedDatabaseBuilder( dir ) .setConfig( GraphDatabaseSettings.read_only, "true" ) .newGraphDatabase();
更多配置信息可以看GraphDatabaseSettings類的文檔。
創建節點和關係
圖資料庫是一個有向圖,由通過關係Relationships
連接的節點Nodes
構成,節點和關係可以有自己的屬性Properties
。
關係的類型可以通過枚舉enum創建(Label也可以):
private static enum RelTypes implements RelationshipType { RELEASED; }
在Neo4j中,對於資料庫的操作需要在一個事務transaction
中執行。
try ( Transaction tx = graphDb.beginTx() ) { // 資料庫操作寫在事務提交之前 tx.success(); }
下麵是一個簡單的實例,實現了節點和關係的創建。
try (Transaction tx = graphDb.beginTx()) { // 創建標簽 label1 = Label.label("Musician"); label2 = Label.label("Album"); // 創建節點 node1 = graphDb.createNode(label1); node1.setProperty("name", "Jay Chou"); node2 = graphDb.createNode(label2); node2.setProperty("name", "Fantasy"); // 創建關係及屬性 relationship = node1.createRelationshipTo(node2, RelTypes.RELEASED); relationship.setProperty("date", "2001-09-14"); // 結果輸出 System.out.println("created node name is" + node1.getProperty("name")); System.out.println(relationship.getProperty("date")); System.out.println("created node name is" + node2.getProperty("name")); // 提交事務 tx.success(); }
對於節點,除了設置屬性,還可以添加標簽Labels。添加標簽之後就相當於對節點進行了分組,使節點的查詢和管理更加清晰和方便,並且提高了查詢的性能。標簽是一個可選項,沒有標簽也是可以的。
與關係資料庫相比,標簽相當於表名。一個節點相當於表中的一行數據,節點的屬性就是欄位。區別是,一個節點可以有多個標簽。
可以看到我們創建了兩個節點,名字是“周傑倫”和“《範特西》”,對應的標簽分別是音樂家和專輯。
他們之間通過“發行”這個關係連接,其中發行的屬性為發行日期。
打開Neo4j資料庫,輸入查詢語句match (n) return n
,可以看到數據被寫入了進來。