gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:44:42 25 4
gpt4 key购买 nike

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

JavaDoc 包含一个神秘的警告:请注意返回的 ResourceIterable 已正确关闭,并尽快在您的事务中关闭,以避免潜在的写操作阻塞。显然 ResourceIterable 在我们完成迭代之前不能关闭,那么这个警告试图传达什么?

Transaction tx = database.beginTx();
try {ResourceIterable<Node> nodes = GlobalGraphOperations.at(database).getAllNodesWithLabel(label);
long i = 0L;
for (Node node : nodes) {
node.setProperty("property", "update");
i++;
if (i % commitInterval == 0) {
tx.success();
tx.close();
tx = database.beginTx();
}
}
tx.success();
}
finally {
tx.close();
}

最佳答案

警告信息是想说,如果你这样拿锁,数据库中的其他东西可能无法同时修改数据库。由于您是在全局范围内执行此操作,因此这对您来说可能会有问题。

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

 MATCH n SET n.property="update";

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

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

关于transactions - 如何改变 Neo4j 图中的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30329508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com