事务写入操作的 DynamoDB 流排序

Ordering of DynamoDB stream for transaction write operation

我有一个 DynamoDB 事务,它使用 transactWrite 在单个 DynamoDB table 中随时附加 > 1 条记录。例如,在单个事务中,我可以附加 A、B 和 C 记录。请注意,在我的例子中,操作总是仅追加(仅插入)。

然后将记录传递到 DynamoDB 流和 lambda 进行处理。但是,有时,lambda 会乱序接收事件。我理解这种行为,因为从 DynamoDB 的角度来看,所有 3 个事件都是在相同的时间戳中写入的。所以,没有订购。但是如果这些事件是同一批次的一部分,我总是可以在处理之前在 lambda 中对它们重新排序。

然而,这就是问题所在。尽管这些记录是在单个事务中写入的,但它们并不总是一起出现在 lambda 的同一批次中。有时,我收到 C 作为唯一事件,然后 A、B 稍后分批到达。我认为这种行为在某种程度上是合理的。有没有办法保证我能一次性收到一笔交易中写入的所有记录。

您的项目可以在单个事务中写入,但每个项目可以在单独的 stream shard 中。流有分片,因此每个项目都有可能同时到达,但流中的每个项目都落在不同的流分片上。排序是按时间和项目,而不是整体键空间和时间:“对于在 DynamoDB table 中修改的每个项目,流记录的显示顺序与项目的实际修改顺序相同。”可以确保对每个项目进行有序更新,但是如果您需要在键空间中的所有更新之间保持一致性,那么这需要在 reader 端进行设计。

综上所述,我想知道是否有机会在基础上将这三项非规范化为一项 table 并完全跳过使用 TransactWriteItem。