ArangoDB 在事务中使用图形模块
ArangoDB Use Graph Module within Transactions
我正在使用 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 创建 server-side 交易之外别无他法。您的第二个代码示例目前是正确且唯一的方法。
但是在 ArangoDB 的下一个主要版本 (3.x) 中会有 client-side 个事务。那么您应该能够像在您的第一个代码示例中那样工作。
我正在使用 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 创建 server-side 交易之外别无他法。您的第二个代码示例目前是正确且唯一的方法。
但是在 ArangoDB 的下一个主要版本 (3.x) 中会有 client-side 个事务。那么您应该能够像在您的第一个代码示例中那样工作。