我们正在尝试无限的可扩展性,并使用无服务器架构来加快我们的流程,并在lambda之上使用AWS sqs
我们的数据是一连串的突变,这些突变基于id相互叠加。
id productId eventDate eventValue balance
1 1 2018-09-01 100 100
2 1 2018-09-01 100 200
如您所见,它从上一行中获取余额并在其中添加事件值并获得新余额非常容易,每个新值都来自sqs,这会触发一个lambda,然后我们的流程计算出值并将其添加到事件表。问题是,当有多条消息插入其中时,会产生多个lambda,它们都在寻找上一行,而我们最终得到的是最后存储的记录,最终像
id productId eventDate eventValue balance
1 1 2018-09-01 100 100
2 1 2018-09-01 100 200
3 1 2018-09-01 100 300
4 1 2018-09-01 100 300
5 1 2018-09-01 100 300
问题是他们都认为他们以前的行余额是200,所以他们在其中添加了事件值,计算就出错了。
我们可以捆绑输入并一个接一个地执行操作,但这将完全破坏扩展的目的,并且从长远来看,使用大输入将使速度变慢。乐观锁定似乎也没有帮助我们,因为它是基于先前条目的新条目。
任何帮助将不胜感激
答案 0 :(得分:1)
您的表似乎只是追加的,并且您计算余额的方式是错误的,因为您可能同时插入多个记录并使用相同的数据。
您可以通过运行以下更新查询将余额存储在另一个表中进行更新:
UPDATE table SET balance = balance + ? WHERE product_id = ?