【问题标题】:Dynamo DB streams, update the latest stream ARNDynamodb 流,更新最新的流 ARN
【发布时间】:2016-05-10 22:34:05
【问题描述】:

我的应用程序读取 dynamoDB 流以查找对表的更改,我目前正在获取最新的流,如下所示:

this.awsDB.describeTable({TableName: 'MatchDraft'}, function(err, data){
  if(err){
    console.log(err);
  } else {
    this.streamArn = data.Table.LatestStreamArn;
    console.log(data, this.streamArn);
    _readStream.apply(this);
  }
}.bind(this));

我遇到的问题是LatestStreamArn 表不会自行更新并且每24 小时过期一次,此时我的程序开始工作。我总是只使用“最新”的分片迭代器类型,所以我不想保留所有更改的 24 小时记录,我只想能够使用分片迭代器来有效地检测表的更改并将它们显示为它们发生。

如何让我的应用程序自动根据需要以最有效的方式创建一个新的 LatestStreamArn?该代码是用户网络浏览器中的所有客户端,因此我不想打开 UpdateTable API 的权限,据我所知这是更新流的唯一方法。

【问题讨论】:

  • 你为什么不使用 AWS Lambda?
  • @EyalCh 我猜是因为除了这个似乎应该是微不足道的问题之外,我不需要它。 lambda 具体会有多大帮助?看起来事情现在的样子我只需要一个每 24 小时调用一次更新表的 chron 作业,并且没有其他解决方案。 lambda 会有更简洁的方法来解决这个问题吗?你会用它具体做什么?
  • @Eyal Ch 如果 lambda 有帮助,我肯定很想知道如何。即使允许 UpdateTable 调用,我的流似乎只是在一定时间后不再处于活动状态。我可以让我的应用程序恢复工作的唯一方法是通过 updateTable 禁用流并重新启用它:/

标签: amazon-dynamodb amazon-kinesis


【解决方案1】:

latestStreamArn 不会在 24 小时后过期。当您通过 CreateTable 或 UpdateTable API 调用启用 DynamoDB Streams 时,将创建一个流。

如果您禁用 DynamoDB 流然后重新启用它,latestStreamArn 将发生变化。

使用 ShardIteratorType LATEST 调用 GetShardIterator 可能会导致您丢失数据,因为无法保证最后的 GetRecords 响应包括直到该点的所有记录。

为了跟踪来自 DynamoDB Streams 的更改,您需要在实践中做一些事情:

  1. 启用流 - 在此之后您只需调用 DescribeTable 一次即可获取最新的StreamArn(您的应用程序可以在启动时调用一次)。

  2. 定期调用 DescribeStream 获取分片列表。使用每个分片中的 parentShardId 指针,您可以构建一个分片谱系。如果要按顺序处理更改,则必须先完全处理分片,然后再处理其任何后代。

  3. 在开始处理分片时调用一次 GetShardIterator。如果要处理所有事件,可以使用 TRIM_HORIZON 分片迭代器类型。否则,您可以通过处理最新的分片(谱系中的最新一代)并从 LATEST 分片迭代器类型开始来初始化您的应用程序。但是,如果您想按顺序处理记录,则您处理的所有未来分片都必须在 TRIM_HORIZON 初始化。

  4. 重复调用 GetRecords 以通过分片进行分页。每个 GetRecords 结果都包含一个用于下一页结果的 nextShardIterator。无需在您想要处理特定分片时调用 GetShardIterator,您只需调用一次即可获得有效的分片迭代器 - 然后您可以继续调用 GetRecords 直到到达分片的末尾(nextShardIterator 为空) .

【讨论】:

  • 我没有找到实时处理的方法。除非分片关闭,否则nextShardIterator 将始终返回一个无null 值,这使得您很难判断何时完成读取所有项目(记录数组可以开始为空,然后在几次调用后再次返回一些记录)。
猜你喜欢
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 2022-08-11
  • 2021-12-28
  • 1970-01-01
  • 2018-09-15
  • 2014-05-31
  • 1970-01-01
相关资源
最近更新 更多