gpt4 book ai didi

amazon-dynamodb - DynamoDB Streams with Lambda,如何按顺序(按逻辑组)处理记录?

转载 作者:行者123 更新时间:2023-12-04 06:56:16 33 4
gpt4 key购买 nike

我想使用 DynamoDB Streams + AWS Lambda 来处理聊天消息。关于同一 session 的消息 user_idX:user_idY (一个房间)必须按顺序处理。全局排序并不重要。

假设我以正确的顺序(room:msg1、room:msg2 等)馈送 DynamoDB,如何保证 Stream 将按顺序馈送 AWS Lambda,并保证跨单个流处理相关消息(room)的顺序?

例如,考虑到我有 2 个分片,如何确保逻辑组进入同一个分片?

我必须做到这一点:

Shard 1: 12:12:msg3 12:12:msg2 12:12:msg1 ==> consumer
Shard 2: 13:24:msg2 51:91:msg3 13:24:msg1 51:92:msg2 51:92:msg1 ==> consumer

而不是这个(消息遵循我在数据库中保存的顺序,但它们被放置在不同的碎片中,因此错误地并行处理同一房间的不同序列):
Shard 1: 13:24:msg2 51:92:msg2 12:12:msg2 51:92:msg2 12:12:msg1 ==> consumer
Shard 2: 51:91:msg3 12:12:msg3 13:24:msg1 51:92:msg1 ==> consumer

本官方 post提到了这一点,但我无法在文档中的任何地方找到如何实现它:

The relative ordering of a sequence of changes made to a single primary key will be preserved within a shard. Further, a given key will be present in at most one of a set of sibling shards that are active at a given point in time. As a result, your code can simply process the stream records within a shard in order to accurately track changes to an item.



问题

1) 如何在 DynamoDB Streams 中设置分区键?

2)如何创建保证分区键一致传递的Stream分片?

3)这真的可能吗?由于官方文章提到:一个给定的键最多将出现在一组在给定时间点处于事件状态的同级分片中的一个,因此似乎 msg1 可能转到分片 1,然后 msg2 转到分片 2,因为我的上面的例子?

编辑:this问题,我发现了这个:

The amount of shards that your stream has, is based on the amount of partitions the table has. So if you have a DDB table with 4 partitions, then your stream will have 4 shards. Each shard corresponds to a specific partition, so given that all items with the same partition key should be present in the same partition, it also means that those items will be present in the same shard.



这是否意味着我可以自动实现我所需要的? “具有相同分区的所有项目将出现在同一个分片中”。 Lambda 是否尊重这一点?

编辑 2:来自 FAQ :

The ordering of records across different shards is not guaranteed, and processing of each shard happens in parallel.



我不关心全局排序,只是按照示例进行逻辑排序。尽管如此,仍不清楚分片是否与 FAQ 中的这个答案合乎逻辑地分组。

最佳答案

对同一 key 更新的按顺序处理将自动进行。如 this presentation 中所述,每个事件分片运行一个 Lambda 函数。因为特定分区/排序键的所有更新都出现在一个分片沿袭中,所以它们是按顺序处理的。

关于amazon-dynamodb - DynamoDB Streams with Lambda,如何按顺序(按逻辑组)处理记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41527444/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com