DynamoDb将项目保留特定的时间

时间:2019-05-23 14:33:21

标签: amazon-web-services aws-lambda amazon-dynamodb

我有这个流程,我们必须在某些时间内在DynamoDb中保留一些项。商品过期后,我们必须致电其他服务,以通知他们数据已过期。

我在考虑两种解决方案:

1):将到期检查移至Java逻辑: 批量检索DynamoDb数据,验证Java中的到期项,然后批量删除数据,并通知其他服务。

有一些限制:

BatchGetItem 使您最多可以检索 100个项目。 BatchWriteItem 使您可以删除最多25个项目

2)将到期检查移至数据库逻辑: 查询 DynamoDb,以便检查哪些项目已过期(并删除它们),并将ID返回给客户端,以便我们通知其他服务。

同样,有一些限制:

每个呼叫的查询结果集限制为1 MB

对于这两种解决方案,都会有一个作业,该作业将定期运行,或者我们将使用一些aws lambda,它将定期触发并从我们的应用程序中调用一个端点,该端点将从其中删除该项目并通知其他服务。

我的问题是DynamoDb是否适合我的情况,还是我应该使用一些没有像Mysql这样的限制的关系数据库?你怎么看 ?谢谢!

1 个答案:

答案 0 :(得分:3)

您是否考虑过使用DynamoDB TTL feature?这使您可以在表中创建一个基于时间的列,DynamoDB将使用该列来基于时间值自动删除项目。

这不需要您执行任何操作,也没有轮询,查询或批处理限制。您将需要填充TTL列,但是如果您要滚动自己的到期逻辑,则可能已经存在该信息。

如果在发生TTL事件时需要通知其他服务,则可以创建处理LambdaDynamoDB stream并在TTL delete event发生时采取措施。