"Transaction was aborted due to detection of concurrent modification"在动物群中



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

目前,Fauna的交易单位是文档。因此,在这种情况下,我建议如下:

CreateCollection({name: "result"})
CreateCollection({name: "sub-result"})
CreateIndex({
name: "result-agg",
source: Collection("sub-result"),
terms: [{"field": ["data", "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")})
)

最新更新