2013-03-12 28 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

相关问题