【问题标题】:What does "every mutating transaction must be performed in a transaction" mean with respect to databases?对于数据库而言,“每个变异事务都必须在事务中执行”是什么意思?
【发布时间】:2012-06-18 18:29:01
【问题描述】:

在阅读Neo4j手册时发现了这个,具体是here,我找到了一句话:

“所有变异事务都必须在一个事务中执行。”

显然,变异事务不仅仅是后一种类型的事务。有人可以帮助澄清这些事物与数据库之间的关系吗?

【问题讨论】:

    标签: database transactions neo4j


    【解决方案1】:

    应该说所有的变异操作都应该在一个事务中执行。变异操作是诸如创建或更新节点/关系,或将内容添加到索引之类的东西。

    如果您直接使用 Java API(即不是 REST API),那么您必须将每个创建或更新方法包装在一个事务中。

    这是一个创建和索引节点的示例,包装在事务中:

    https://github.com/espeed/bulbs/blob/master/bulbs/neo4jserver/gremlin.groovy#L11

    请注意,上面的代码是 Neo4j Java API,但它正在 Groovy 脚本中使用。

    您可以通过 Neo4j Server Gremlin-Groovy 插件执行 Groovy 脚本。这意味着您可以通过 REST 访问整个 Neo4j Java API。

    【讨论】:

      【解决方案2】:

      我认为这是一个小错字,最好作为该部分的标题阅读:

      在事务中封装变异操作

      这里的操作是指对模型进行修改的任何访问(例如,在链接的示例中添加新节点或关系)。为了保持数据库的一致性,您将这些修改操作包装在一个事务中,以便全部成功或不成功,避免使数据库处于不一致状态

      【讨论】:

        【解决方案3】:

        感谢您提出,更新了措辞,请参阅https://github.com/neo4j/community/commit/ba94448d495e6d9fec8877bd32bd5edf0936b621

        这样更好吗?

        【讨论】:

          猜你喜欢
          • 2013-08-31
          • 1970-01-01
          • 2013-04-29
          • 2011-01-10
          • 2016-12-22
          • 2010-11-01
          • 2020-09-27
          • 2011-08-09
          • 2016-12-22
          相关资源
          最近更新 更多