如何改变Neo4j图中的所有元素

时间:2015-05-19 15:11:31

标签: transactions neo4j

请查看以下代码,该代码将属性添加到任意大图中的每个节点。迭代器是在事务中创建的。在迭代事务的过程中,它创建完成并创建一个新的(以限制用于正在进行的写入的内存)。从那时起,我们继续从该迭代器中提取节点,但是从不同的事务中提取节点。这个可以吗?这些方法设计为在调用后没有事务的情况下工作吗?

JavaDoc包含一个神秘的警告:请注意在事务内部尽快正确关闭返回的ResourceIterable,以避免可能阻止写入操作。显然{在我们完成迭代之前,{1}}无法关闭,那么这个警告试图传达的是什么?

ResourceIterable

2 个答案:

答案 0 :(得分:1)

警告消息试图说明如果您采取这样的锁定,DB中的其他内容可能无法同时修改数据库。既然你在全球范围内这样做,这对你来说可能会有问题。

幸运的是,看起来你正在尝试做的事情可以更简单地使用单个cypher命令完成,然后使用java和这个方法。查询将是:

 MATCH n SET n.property="update";

您可以consult the docs了解如何从java运行该cypher查询。

另外,我认为一般GlobalGraphOperations可能会被弃用,因此您可能希望检查其他方法来改变整个图形(就像我在这里提供的那样)而不是使用那个java类。

答案 1 :(得分:1)

You shouldn't pull the nodes from the same iterator instance, but you can continue to pull them from a different one, you will see some nodes with updates and some without depending on how far your update has gone through.

Don't use an iterator from another tx somewhere else.