我有一个非常常见的用例,需要同步 2 个 dynamoDB 表。逻辑流程如下。
- 在 Job Table 中创建一个 Job
- 在请求表中创建了多个请求。所有的请求都是从一个 Job 创建的,就像多对一的关系一样。
- 请求由其他一些工作人员处理。
- 每个请求将在请求表中标记为独立完成。
- 当某个作业的所有请求都完成后,在作业表中标记一个作业已完成。
现在,我的想法是在 Requests 表上启用流。当一个请求完成时,它会触发一个 lambda 函数来检查是否所有的请求都完成了。
我已经阅读了很多文件。并发现这种方法的许多局限性:
- 似乎 stream+lambda 将保证每个流分片将至少触发一次 lambda 函数,但不仅仅是一次。因此 lambda 函数必须是幂等的。(让 lambda 函数增加完成请求的数量在这里不起作用)。
所以,我认为每次触发 lambda 函数时我都必须扫描请求表。这种方法会有很多开销吗?
- DynamoDB 流倾向于将每个事件分派到不同的分片中。每个分片被填满时都会触发一个 lambda 函数。我不确定如果一个分片很长一段时间都被填满了一半(表中没有事件)怎么办。它还会以某种方式触发 lambda 函数吗?
我也对所有其他可以解决这个问题的解决方案持开放态度。我不确定我是否遵循这里的最佳实践。