我有一个场景,其中有一个带有触发器(流)的AWS DynamoDB表到AWS Lambda函数。我可以确保AWS DynamoDB触发器不是由AWS Lambda函数并行处理的吗?
我想用DynamoDB作为事件存储和使用lambda函数保持投影/聚合视图/读取视图中的数据的。
我需要确保的是,当我保存DynamoDB的CreateEntity
事件,然后当我保存UpdateEntity
也许就在这以后,lambda函数将处理UpdateEntity
事件之前的CreateEntity
事件。
我的理解是,触发器与λ的平行度依赖于DynamoDB流由碎片的数量。因此,如果Lambda函数使用的DynamoDB Stream具有2个分片,并且一个事件在Shard1上发生,而另一个事件在Shard2上发生,则可以由两个Lambda函数实例并行处理它们。
所以如果CreateEntity
事件是Shard1和UpdateEntity
是Shard2那么如果Shard1或出于某种原因,lambda函数实例慢则UpdateEntity
事件Shard2可能首先被处理。这意味着它不能被添加到投影中,因为没有首先创建实体。
是我的理解是否正确?
有没有一种方法,以确保事件仅由氧功能的一个实例进行处理,这样我可以保证消息的处理的顺序?
或者我必须使用比LAMBDA别的东西吗?例如DynamoDB流与Kinesis一起使用我自己的应用程序,我可以确保只有一个应用程序实例正在运行,并确保按此方式排序。
99%?所以我可能会失去100个事件中的1个,因为订单可能会被切换?在这样的系统中,这并不完全是我所追求的。我想建立事件的预测。它可能最终是一致的,但它必须是正确的。 在我的情况下将如何确保?基于密钥,我无法找到关于如何选择碎片的任何内容。 – doorstuck
没有。我是99%的场景。正如我写的唯一的情况是你在1%是当你有少量的独特的实体,其中许多人,所以你的实体将被分割超过1共享。如果你的情况如此,你做错了什么 –
要添加到这个讨论中,或许有助于澄清,dynamodb流是基于分区进行分片的,所以对同一分区中项目的所有操作都将在同一个分片中。 –