java - ArangoDB 在事务中使用图形模块

标签 java graph transactions arangodb

我正在使用 Java 驱动程序 (4.1),并且需要命名图形操作的保证,但我需要在事务中执行其中几个更高级别的操作。

例如,我想一次性将多个顶点添加到集合中,并且我想在发生任何失败时回滚所有操作。如果我使用 Java 驱动程序,我想要做这样的事情:

db.beginTransaction() ; // this method doesn't exist
db.graph("myGraph").vertexCollection(vertexCollectionName1).insertVertex(a);
db.graph("myGraph").vertexCollection(vertexCollectionName1).insertVertex(b);
db.graph("myGraph").vertexCollection(vertexCollectionName2).insertVertex(c);
// ...so on...
db.executeTransaction(); // rollback all on failure, this method doesn't exist

我不太热衷于在 JavaScript 中完成这项工作,但如果我理解正确的话,我想要的类似可能看起来像这样,作为在事务内运行的 JS 函数(使用 Java 驱动程序,但指定JS 函数——硬编码,无参数):

String action = "function (params) { "
        + "var graph_module = require('@arangodb/general-graph');"
        + "var graph = graph_module._graph('myGraph');"
        + "graph.collection1.save({name: 'a'});"
        + "graph.collection1.save({name: 'b'});"
        + "graph.collection2.save({name: 'c'});"
        // ...so on...  
        + "}";

db.transaction(action, String.class, options); // request through Java driver

我可能想在单个事务中混合一些其他边缘更新、删除——所有这些都通过图形模块在高层完成。我的问题是,我能得到我想要的吗?这是正确的方法吗?

我还没有尝试过上面的 JS 事务,但我正在寻找指导,然后再陷入死胡同。

最佳答案

不幸的是,目前除了使用 JavaScript 创建服务器端事务之外没有其他方法。您的第二个代码示例是目前正确且唯一的方法。

但是 ArangoDB 的下一个主要版本 (3.x) 中将会有客户端事务。然后您应该能够像第一个代码示例一样工作。

关于java - ArangoDB 在事务中使用图形模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42170076/

相关文章:

algorithm - 在具有成本限制和最大奖励的完整图中找到路径

algorithm - 如何将一个连通的带权图划分为N个半等分子图

python - matplotlib 怪异,它没有绘制我的图表

Azure 无法将事务编码到弹性事务的传播 token 中(适用于 MSDTC)

java - 全局事务可以/是​​否跨越多个线程?

php - NOW() for DATETIME InnoDB Transaction guaranteed?

java - 有没有直接的方法将一个 s3 目录复制到 java 或 scala 中的另一个目录?

Java MySQL 连接NumberFormat 异常?

java - xfire客户端代理线程安全吗?

java正则表达式不工作