AWS DynamoDB触发调用速度和同步

时间:2017-03-25 23:31:57

标签: amazon-web-services lambda amazon-dynamodb aws-lambda

DynamoDB表上的触发器是否具有某种内部同步,以使所有内容保持按预期的顺序排列? 示例:我的触发器批量大小为1,并且它被配置为始终从最新条目开始读取。两个条目以相隔一毫秒(或同时)对DB进行。我不知道触发器和lambda函数所需的时间,但是为了论证,它比DB条目之间的时间长(> 1ms) )。我可以确定两个lambda调用都不会从第二个DB条目接收数据吗?

1 个答案:

答案 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