Amazon web services 我在dynamodb流中没有看到任何记录

Amazon web services 我在dynamodb流中没有看到任何记录,amazon-web-services,amazon-dynamodb,amazon-dynamodb-streams,Amazon Web Services,Amazon Dynamodb,Amazon Dynamodb Streams,我在实现dynamodb流时遇到问题。我们希望在dynamodb表更改时获得更改记录 我们使用了java示例并将其转换为C++项目。我们使用的是ShardIteratorType.LATEST)而不是ShardIteratorType.TRIM\u HORIZON。此外,我目前正在测试一个现有的表,不知道需要多少记录 大多数时候,当迭代从Aws::DynamoDBStreams::DynamoDBStreamsClient和Aws::DynamoDBStreams::Model::Describ

我在实现dynamodb流时遇到问题。我们希望在dynamodb表更改时获得更改记录

我们使用了java示例并将其转换为C++项目。我们使用的是

ShardIteratorType.LATEST)
而不是
ShardIteratorType.TRIM\u HORIZON
。此外,我目前正在测试一个现有的表,不知道需要多少记录

大多数时候,当迭代从Aws::DynamoDBStreams::DynamoDBStreamsClient和Aws::DynamoDBStreams::Model::DescribeStreamRequest检索的碎片时,我看不到任何记录。对于测试,我通过aws控制台更改dynamodb表中的条目。但有时(我也不知道为什么)会有记录,而且效果也和预期的一样

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

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

我很欣赏你的想法,也很好奇我的第一篇文章会发生什么

最好的 大卫

如何在流中找到最新的数据

您如何定义最新的数据?最后10条?最后一项?或者还没有在碎片中的数据?这个问题听起来可能很傻,但答案会有所不同

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

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


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

谢谢@Matus,这澄清了一些问题!然后,最新数据定义尚不在碎片中的数据。我现在按序列号对碎片进行排序。使用LATEST我只迭代最后一个(最近的?)碎片。现在,每当我更改表中的前两项时,都会得到记录。更改第三个/最后一个条目、创建新条目或删除条目不会写入任何记录。streams StreamViewType设置为新建和旧图像。它们是否可能写入另一个碎片?而且:我们每桌要用一个lambda,对吗?再次感谢!David这是一种奇怪的行为,但它可能和碎片的分布性质有关。我确实相信碎片是跨多个服务器在内部复制的,迭代器可能只轮询其中的一个子集(我知道,当使用带有短轮询的SQS队列时,您的HTTP请求将只轮询服务器的一个子集,这可能导致一个空列表,而队列中实际上有条目)。我不知道shard迭代器是否是这种情况。另外,docs for shard iterator
中有这一行,请注意,可能需要多次调用才能访问包含流记录的shard部分。我不知道他们的确切意思,但这可能有关联。再次注意,当您不关心获取最新记录时,迭代器主要用于批处理。是否可以将记录发送到其他碎片?嗯,他们可以,但不是父母。以前的碎片是关闭的,并且是只读的,但是DynamoDB服务可能会根据使用情况生成新的碎片。您不需要每个表使用一个lambda函数,但是您需要每个表使用一个触发器,该触发器可以是同一lambda函数的多个实例,假设您可以使用相同的代码处理来自多个表的流。如果可以,您可以自由地重用相同的功能。最后一件事,如果我只关心最新的条目,我肯定会使用lambda函数。另外,您可以设置触发器来观察流是否按预期工作。每个事件都应该自动触发lambda,而不必担心上面提到的事情。再次感谢@Matus!希望我的最后一个问题是:我是否必须使用另一个服务(如kinesis流)在我的桌面应用程序中使用lambda函数来触发代码?dynamodb将触发一个lambda,该lambda将写入一个流——有没有更直接的方法?