我在我的 dynamodb 流中没有看到任何记录

I do not see any records in my dynamodb stream

我在实施 dynamodbstreams 时遇到问题。我们希望在 dynamodb table 更改时立即获取更改记录。

我们使用了 https://docs.aws.amazon.com/en_en/amazondynamodb/latest/developerguide/Streams.LowLevel.Walkthrough.html 中的 java 示例并将其翻译用于我们的 c++ 项目。我们使用 ShardIteratorType.LATEST) 而不是 ShardIteratorType.TRIM_HORIZON。此外,我目前正在使用现有的 table 进行测试,但不知道需要多少条记录。

大多数时候,当我遍历从 Aws::DynamoDBStreams::DynamoDBStreamsClient 和 Aws::DynamoDBStreams::Model::DescribeStreamRequest 检索的碎片时,我看不到任何记录。为了进行测试,我通过 aws 控制台更改了 dynamodb table 中的条目。但有时(我不知道为什么)有记录并且按预期工作。

我确定我误解了流的概念,尤其是分片和记录。我的想法是,我需要找到一种方法来找到最近的分片,并在该分片中找到最新的数据。

这不就是ShardIteratorType.LATEST会做的吗?如何在我的流中找到最新数据?

感谢您的所有想法,并且很好奇我的第一个 Whosebug post 发生了什么。

最佳 大卫

How can I find the most recent data in my stream?

您如何定义最近的数据?最后 10 个条目?最后一个条目?或者还没有在分片中的数据?这个问题可能听起来很愚蠢,但答案却很重要。

您正在使用的选项 - LATEST - 将在最后一个条目之后立即设置迭代器的头部,这意味着除非在创建迭代器之后有新数据到达,否则什么都不会阅读。

如果您所说的最新数据是指分片中已有的一些记录,那么您不能使用 LATEST。简单的选择是使用 TRIM_HORIZON.

或者更简单的方法是将 lambda 函数订阅到该流,只要将新记录放入该流(将记录作为有效负载传递给该 lambda 函数),该流就会自动调用该函数,如果您需要近乎实时地处理事件。