"Transaction was aborted due to detection of concurrent modification" 在 FaunaDB 中
"Transaction was aborted due to detection of concurrent modification" in FaunaDB
我有一个可以从许多不同的并发请求写入的文档。文档的同一部分没有改变,但它可以看到并发写入(来自 nodejs 应用程序)。
示例:
{
name: "testing",
results: {
a: { ... },
b: { ... },
}
我可以用 "c" 等更新文档
如果我不异步等待事务(例如在测试中),我将得到部分写入和错误 "transaction was aborted due to detection of concurrent modification" .. 解决此问题的最佳方法是什么?我觉得 Fauna 的主要卖点是处理这样的问题,但我没有足够的知识来理解我的解决方法。
有人排队strategies/ideas/suggestions吗?
索引:
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")})
)
我有一个可以从许多不同的并发请求写入的文档。文档的同一部分没有改变,但它可以看到并发写入(来自 nodejs 应用程序)。
示例:
{
name: "testing",
results: {
a: { ... },
b: { ... },
}
我可以用 "c" 等更新文档
如果我不异步等待事务(例如在测试中),我将得到部分写入和错误 "transaction was aborted due to detection of concurrent modification" .. 解决此问题的最佳方法是什么?我觉得 Fauna 的主要卖点是处理这样的问题,但我没有足够的知识来理解我的解决方法。
有人排队strategies/ideas/suggestions吗?
索引:
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")})
)