DynamoDB表上的触发器是否具有某种内部同步,以使所有内容保持按预期的顺序排列? 示例:我的触发器批量大小为1,并且它被配置为始终从最新条目开始读取。两个条目以相隔一毫秒(或同时)对DB进行。我不知道触发器和lambda函数所需的时间,但是为了论证,它比DB条目之间的时间长(> 1ms) )。我可以确定两个lambda调用都不会从第二个DB条目接收数据吗?
答案 0 :(得分:3)
DynamoDB Streams不会发送重复项。
不,DynamoDB Streams的设计是为了让您的每次更新都发生 table将在流中完全表示一次。
DynamoDB Streams保证以下内容:
每个流记录在流中只出现一次。对于每个项目 在DynamoDB表中修改,流记录显示在 与对项目的实际修改相同的顺序。
DynamoDB Streams提供对表中数据进行的项目级更改的按时间排序。
由于更新1和2之间的毫秒差异很小,Lambda应该按时间顺序获得两个流(即更新1然后更新2)。
处理Lamdba的Streams记录: -
发送到您的AWS的Amazon Kinesis和DynamoDB Streams记录 Lambda函数是严格序列化的,每个分片。这意味着如果 你把两个记录放在同一个碎片中,Lambda保证你的 将使用第一个记录成功调用Lambda函数 在使用第二条记录调用它之前。如果调用一个 记录超时,受限制或遇到任何其他错误,Lambda 将重试,直到成功(或记录达到24小时 到期之前)转到下一条记录。订购 不保证跨越不同分片的记录和处理 每个分片并行发生。
基于流的事件来源 -
如果您创建一个处理事件的Lambda函数 基于流的服务(Amazon Kinesis Streams或DynamoDB流), 每个流的分片数是并发的单位。如果你的 流有100个活动分片,将有100个Lambda函数 同时运行。然后,每个Lambda函数处理a上的事件 碎片按它们到达的顺序。
简答: -
Stream确保没有重复项。所以没有办法2 Lambda调用接收相同的数据
注意流记录的处理,即第二次更新是否为 在第一次更新处理依赖于分片后开始处理 每个流(并发单位)
由于分片具有谱系(父级和子级),因此应用程序必须始终在处理子分片之前处理父级分片。这将确保流记录也以正确的顺序处理。如果您想保留正确的处理顺序,请使用 DynamoDB Streams Kinesis Adapter 。