DynamoDB触发器(Streams + Lambda):TRIM_HORIZON的详细信息是什么?

5
我想处理DynamoDB表中的最近更新,并将它们保存在另一个表中。假设我从不规则放置在Table1中的IoT设备获取更新,我需要使用最后N个更新来计算Table2中与原始更新同步的同一设备的更新(类似于滑动窗口)。
对于我的需求,DynamoDB Triggers(Streams + Lambda)似乎非常适合,但是我没有找到TRIM_HORIZON的清晰定义。在某些文档中,我理解它是Table1中最旧的数据(可能变得很大),但在其他文档中,它似乎是24小时。或者也许是流中最老的?
那么有人知道TRIM_HORIZON的真相吗?是否可以配置它?
我看到的另一种选择是不使用TRIM_HORIZON,而是使用LATEST并在Table1上执行查询。但这有点打败了流的目的。
1个回答

10
以下是与 DynamoDB 文档(12)相关的重要方面:
- 所有 DynamoDB Streams 中的数据都有 24 小时的生命周期。您可以检索和分析任何给定表格在过去 24 小时内的活动。 - TRIM_HORIZON - 从最后一个未修剪的流记录开始阅读,即该分片中最旧的记录。在 DynamoDB Streams 中,数据保留时间限制为 24 小时。超过此限制的流记录会被删除(修剪)。 - 因此,如果您有一个持续处理流更新的 Lambda,请选择使用 LATEST
另外,由于您“需要使用最近的N个更新来计算Table2中的更新”,因此您将不得不为每个更新查询Table1,以便您可以将当前更新与该设备的先前更新“合并”。 我认为您也无法使用TRIM_HORIZON来避免这种情况。

@FrançoisLegras,是否可以将DynamoDB流保留时间从24小时增加到48小时? - Nidhin David
@NidhinDavid,我不这么认为。 - François Legras
如果您想增加数据保留时间,我认为您可以使用Lambda从DDB流复制数据并将其放入KinesisData Streams中,因为它可以扩展保留时间长达7天(https://aws.amazon.com/kinesis/data-streams/pricing/)。 - dashuser
如果您使用最新版本,则最终数据顺序可能不正确。最新更改将首先被写入,而最旧的更改将最后被写入。因此,如果您尝试保持两个表同步,则会得到过时的数据。请使用“TRIM_HORIZON”来保留排序。 - DollarAkshay
@DollarAkshay 一旦我们完全复制了数据,如果我们只需要CDC更改,则LATEST应该足够好。如果任何数据已经是完整转储的一部分,TRIM_HORIZON是否会覆盖它? - cad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接