3

dynamodb文档说有分片,需要先迭代它们,然后对于每个分片,需要获取记录数。

该文件还说:

(如果您使用 DynamoDB Streams Kinesis Adapter,这将为您处理:您的应用程序将以正确的顺序处理分片和流记录,并自动处理新的或过期的分片,以及在应用程序运行时拆分的分片。有关更多信息,请参阅使用 DynamoDB Streams Kinesis Adapter 处理流记录。)

好的,但是我使用 lambda 而不是 kinesis(它们彼此相关吗?),如果 lambda 函数附加到 dynamodb 流,我应该关心碎片吗?或者我应该只编写 labda 代码并期望 aws 环境只将一些记录传递给那个 lambda?

4

2 回答 2

2

当使用 Lambda 使用 DynamoDB Stream 时,轮询 API 和跟踪分片的工作都会自动为您处理。如果您的表有多个分片,那么将调用多个 Lambda 函数。从您作为开发人员的角度来看,您只需为您的 Lambda 函数编写代码,其余的由您负责。

DynamoDB 流仍然保证按顺序处理,因此对于单个分片,一次只会调用您的 Lambda 函数的一个实例。但是,对于多个分片,您可能会看到 Lambda 函数的多个实例同时运行。这种扇出是透明的,如果您在编写 Lambda 函数时没有意识到这一点,可能会导致问题或导致令人惊讶的行为。

要更深入地了解其工作原理,我建议您观看 YouTube 视频AWS re:Invent 2016:Real-time Data Processing Using AWS Lambda (SVR301)。虽然重点主要放在 Kinesis Streams 上,但使用 DynamoDB Streams 的相同概念也适用,因为技术几乎相同。

于 2017-10-01T16:11:24.397 回答
1

我们每天使用 DynamoDB 处理近十亿条记录,并自动使这些记录过期并发送到流中。

一切都由 AWS 负责,我们不需要做任何事情,除了配置流(您想要什么类型的图像)和添加触发器。

我们所做的唯一微调是,

当您获得更多数据时,我们只是增加了批处理大小以加快处理速度并减少对 Lambda 的调用次数的开销。

如果您使用任何外部进程来迭代流,您可能需要执行相同的操作。

参考:

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html

希望能帮助到你。

于 2017-10-01T16:37:18.047 回答