我们有两种文档类型,它们位于同一个集合中(差异分区): - 客户 - 交易
一个客户可以拥有多个交易,一个交易只能与一个客户关联。有时我们需要将交易从一个客户转移到另一个客户。
我们有许多异步线程正在运行,如果多个线程想要在同一个客户文档上运行,我们需要通过让它"尝试"来处理乐观并发。它会写,并处理失败。
考虑这个简单的例子:
{
"id" : "CustomerA",
"customerName" : "Jeff",
"transactions" : ["Tran1", "Tran2"]
},
{
"id" : "CustomerB",
"customerName" : "Geoff",
"transactions" : ["Tran3"]
}
变为
{
"id" : "CustomerA",
"customerName" : "Jeff",
"transactions" : ["Tran1", "Tran2", "Tran3"]
},
{
"id" : "CustomerB",
"customerName" : "Geoff",
"transactions" : []
}
两个文档都已更改,如果我们首先将这些文件保存为CustomerB(捐赠者)(可能会成功进行乐观并发检查),然后再将CustomerA(收件人)保存为第二个...然后失败。 " Tran3"交易将不再有一个家庭...实际上是无关的,孤儿。
是否存在可能有助于解决此挑战的模式或代码示例?这感觉就像必须已经在其他地方解决了一样的问题?