我遇到过这样的情况:8-10 个 lambda 不断在同一个 DynamoDB 表和同一条记录中读写。在这种情况下如何避免竞争状况?
操作规模以百万计,lambda 很有可能会尝试更新同一行。
这完全取决于您想要防止的情况,“竞争条件”意味着许多不同的事情。
单个项目的放置/更新/删除是原子的并且强序列化,这意味着项目的最终状态将是所有更新都成功,并且每个后续更新都会看到之前成功的操作的更新。
保护并发系统免遭数据损坏的一种方法是通过版本号和条件检查的方式使用乐观锁定。虽然该文档定义了如何在 Java 中完成此操作,但您可以轻松地将更新和条件包含在任何 SDK 语言中。
DynamoDB 事务是防止多个资源更新同一项目的另一种方法,因为它在执行过程中锁定该项目,不允许其他线程更新同一项目。