【问题标题】:"Transaction was aborted due to detection of concurrent modification" in FaunaDBFaunaDB 中的“由于检测到并发修改而中止事务”
【发布时间】:2020-10-05 03:31:38
【问题描述】:

我有一个可以从许多不同的并发请求写入的文档。文档的同一部分没有改变,但它可以看到并发写入(来自 nodejs 应用程序)。
示例:

{
name: "testing",
 results: {
   a: { ... },
   b: { ... },
}

我可以用“c”等来更新文档。

如果我不异步等待事务(例如,在测试中),我将收到部分写入和错误“事务因检测到并发修改而中止”.. 解决此问题的最佳方法是什么?我觉得 Fauna 的主要卖点是处理此类问题,但我没有足够的知识来理解我的解决方法。

谁有任何排队策略/想法/建议?

索引:

CreateIndex({
  "name": "byName",
  "unique": true,
  "source": Collection("Testing"),
  "serialized": true,
  "terms": 
    [
      { "field": [ "data", "name" ] }
    ]
})

JS AWS Lambda 函数是在写什么..

【问题讨论】:

    标签: node.js aws-lambda faunadb


    【解决方案1】:

    目前,Fauna 中的交易单位是文件。所以在这种情况下,我会推荐如下内容:

    CreateCollection({name: "result"})
    CreateCollection({name: "sub-result"})
    CreateIndex({
      name: "result-agg",
      source: Collection("sub-result"),
      terms: [{"field": ["data", "parent"]}]
    })
    

    假设 parent 包含主要结果的 ref。然后给出$ref 作为结果参考

    Let({
      subs: Select("data", Map(Paginate(Match(Index("result-agg"), $ref)), Lambda("x", Get(Var("x")))))
      main: Select("data", Get($ref))},
      Merge(Var("main"), {results: Var("subs")})
    )
    

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-17
      • 2021-04-03
      相关资源
      最近更新 更多