2013-03-12 93 views
3

我有一個要求,能夠頻繁地插入批次的節點。它可能是全新的插入或更新現有節點(和關係)。編寫一個自定義的Neo4j記錄插入器

在使用Neo4j中的BatchInsert工具之後,我發現了一個限制,即當我的下一批節點到達時,我不能將它們更新到圖中(或將它們添加到圖中)。相反,我將不得不加載從前一次加載的所有其他內容。

我深入研究了neo4j-kernel代碼庫,看看我是否可以實現自定義導入器,這將允許我在新數據到達時導入和更新。 BatchInserterImpl似乎是正在發生的邏輯肉創建節點,createRelationships等的類。正如所料,我看到,nodestore(NeoStore對象)在構造函數中新建。

我該如何解決這個問題?是否有插入數據的其他實現在哪裏進行更新,以便我不必重新導入已添加到圖形數據庫的所有內容?如果不是,你有什麼建議擴展現有的代碼來幫助我的用例?

我還需要添加索引和支持事務(至少在基本級別)。

+0

需要導入多少數據?爲什麼不把它插入交易? – 2013-03-13 12:52:17

+0

我將導入大量數據(〜百萬),並計劃編寫一個與Neo4j DB交談的自定義庫文件庫。理想情況下,我想使用一個插件來幫助我進行初始批量導入,並在以後對節點和關係進行實時更新。 – 2013-03-19 17:09:40

回答

1

感覺你應該使用EmbeddedGraphDatabase。 BatchInserter主要用於初始大規模插入。一旦完成,您應該切換到支持併發讀取/寫入和事務的EmbeddedGraphDatabase,而不是。

+0

是否有示例顯示如何使用EmbeddedGraphDatabase更新節點?另外,我總是需要使用BatchInserter進行第一遍,然後切換到EmbeddedGraphDatabase。爲什麼不使用EmbeddedGraphDatabase進行初始批量導入?它有什麼限制嗎?謝謝! – 2013-03-19 17:07:29

+0

此外,假設我使用EmbeddedGraphDatabase,如下所示: GraphDatabaseService graphDb = new EmbeddedGraphDatabase(「var/graphDb」); 我可以看到GraphDatabaseService接口具有createNode(),但是如何更新現有節點或關係? 我沒有看到任何更新方法。 – 2013-03-19 17:14:58