1

我有一个可以从许多不同的并发请求写入的文档。文档的同一部分没有更改,但它可以看到并发写入(来自 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 函数是在写什么..

4

1 回答 1

1

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

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

假设 parent 包含主要结果的参考。然后$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")})
)
于 2020-06-15T17:19:58.477 回答