首页 > 解决方案 > 我在我的 dynamodb 流中没有看到任何记录

问题描述

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

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

大多数情况下,在迭代我从 Aws::DynamoDBStreams::DynamoDBStreamsClient 和 Aws::DynamoDBStreams::Model::DescribeStreamRequest 检索的分片时,我看不到任何记录。为了测试,我通过 aws 控制台更改了 dynamodb 表中的条目。但有时(我不知道为什么)有记录,它按预期工作。

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

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

我感谢您的所有想法,并对我的第一篇 stackoverflow 帖子发生了什么感到好奇。

最好的大卫

标签: amazon-web-servicesamazon-dynamodbamazon-dynamodb-streams

解决方案


如何在我的信息流中找到最新的数据?

您如何定义最新数据?最后 10 个条目?最后进入?还是尚未在分片中的数据?这个问题可能听起来很傻,但答案会有所不同。

您正在使用的选项 - LATEST- 将在最后一个条目之后设置迭代器的头部,这意味着除非在创建迭代器之后有新数据到达,否则将没有任何内容可读取。

如果最近的数据是指一些已经在分片中的记录,那么你不能使用LATEST. 简单的选择是使用TRIM_HORIZON.

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


推荐阅读