【问题标题】:ArangoDB Use Graph Module within TransactionsArangoDB 在事务中使用图形模块
【发布时间】:2017-02-10 23:02:22
【问题描述】:

我正在使用 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 交易,但我正在寻找指导,然后再冲进死胡同。

【问题讨论】:

    标签: java graph transactions arangodb


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      相关资源
      最近更新 更多