Dynamodb 流,更新最新的流 ARN
Dynamo DB streams, update the latest stream ARN
我的应用程序读取 dynamoDB 流以查找对 table 的更改,我目前正在获取这样的最新流:
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));
我 运行 遇到的问题是 tables LatestStreamArn 不会自行更新并且每 24 小时过期一次,此时我的程序开始工作。我总是只使用 "LATEST" 分片迭代器类型,所以我不想保留所有更改的 24 小时记录,我只想能够使用分片迭代器来检测对 table 的更改高效地显示它们。
如何让我的应用程序自动以最有效的方式根据需要创建一个新的 LatestStreamArn?该代码是用户网络浏览器中的所有客户端,因此我不想打开 UpdateTable API 的权限,据我所知这是更新流的唯一方法。
latestStreamArn 不会在 24 小时后过期。当您通过 CreateTable 或 UpdateTable API 调用启用 DynamoDB Streams 时,会创建一个流。
如果您禁用 DynamoDB 流然后重新启用它,latestStreamArn 将会更改。
使用 ShardIteratorType LATEST 调用 GetShardIterator 可能会导致您丢失数据,因为无法保证最后的 GetRecords 响应包含到那时为止的所有记录。
为了跟踪来自 DynamoDB Streams 的更改,您需要在实践中做一些事情:
启用流 - 您只需在此之后调用一次 DescribeTable 即可获取最新的 StreamArn(您的应用程序可以在启动时调用一次)。
定期调用DescribeStream获取分片列表。使用每个分片中的 parentShardId 指针,您可以构建分片的谱系。如果要按顺序处理更改,则必须在处理分片的任何后代之前完全处理分片。
开始处理分片时调用一次GetShardIterator。如果要处理所有事件,可以使用 TRIM_HORIZON 分片迭代器类型。否则,您可以通过处理最新的分片(沿袭中的最新一代)并从 LATEST 分片迭代器类型开始来初始化您的应用程序。但是,如果您想按顺序处理记录,则您处理的所有未来分片都必须在 TRIM_HORIZON.
处初始化
重复调用 GetRecords 对分片进行分页。每个 GetRecords 结果都包含下一页结果的 nextShardIterator。您无需在任何时候调用 GetShardIterator 来处理特定的分片,只需调用一次即可获得有效的分片迭代器 - 然后您可以继续调用 GetRecords 直到到达分片的末尾(nextShardIterator 为空) .
我的应用程序读取 dynamoDB 流以查找对 table 的更改,我目前正在获取这样的最新流:
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));
我 运行 遇到的问题是 tables LatestStreamArn 不会自行更新并且每 24 小时过期一次,此时我的程序开始工作。我总是只使用 "LATEST" 分片迭代器类型,所以我不想保留所有更改的 24 小时记录,我只想能够使用分片迭代器来检测对 table 的更改高效地显示它们。
如何让我的应用程序自动以最有效的方式根据需要创建一个新的 LatestStreamArn?该代码是用户网络浏览器中的所有客户端,因此我不想打开 UpdateTable API 的权限,据我所知这是更新流的唯一方法。
latestStreamArn 不会在 24 小时后过期。当您通过 CreateTable 或 UpdateTable API 调用启用 DynamoDB Streams 时,会创建一个流。
如果您禁用 DynamoDB 流然后重新启用它,latestStreamArn 将会更改。
使用 ShardIteratorType LATEST 调用 GetShardIterator 可能会导致您丢失数据,因为无法保证最后的 GetRecords 响应包含到那时为止的所有记录。
为了跟踪来自 DynamoDB Streams 的更改,您需要在实践中做一些事情:
启用流 - 您只需在此之后调用一次 DescribeTable 即可获取最新的 StreamArn(您的应用程序可以在启动时调用一次)。
定期调用DescribeStream获取分片列表。使用每个分片中的 parentShardId 指针,您可以构建分片的谱系。如果要按顺序处理更改,则必须在处理分片的任何后代之前完全处理分片。
开始处理分片时调用一次GetShardIterator。如果要处理所有事件,可以使用 TRIM_HORIZON 分片迭代器类型。否则,您可以通过处理最新的分片(沿袭中的最新一代)并从 LATEST 分片迭代器类型开始来初始化您的应用程序。但是,如果您想按顺序处理记录,则您处理的所有未来分片都必须在 TRIM_HORIZON.
处初始化
重复调用 GetRecords 对分片进行分页。每个 GetRecords 结果都包含下一页结果的 nextShardIterator。您无需在任何时候调用 GetShardIterator 来处理特定的分片,只需调用一次即可获得有效的分片迭代器 - 然后您可以继续调用 GetRecords 直到到达分片的末尾(nextShardIterator 为空) .