我有这个流程,我们必须在某些时间内在DynamoDb中保留一些项。商品过期后,我们必须致电其他服务,以通知他们数据已过期。
我在考虑两种解决方案:
1):将到期检查移至Java逻辑: 批量检索DynamoDb数据,验证Java中的到期项,然后批量删除数据,并通知其他服务。
有一些限制:
BatchGetItem 使您最多可以检索 100个项目。 BatchWriteItem 使您可以删除最多25个项目
2)将到期检查移至数据库逻辑: 查询 DynamoDb,以便检查哪些项目已过期(并删除它们),并将ID返回给客户端,以便我们通知其他服务。
同样,有一些限制:
每个呼叫的查询结果集限制为1 MB 。
对于这两种解决方案,都会有一个作业,该作业将定期运行,或者我们将使用一些aws lambda,它将定期触发并从我们的应用程序中调用一个端点,该端点将从其中删除该项目并通知其他服务。
我的问题是DynamoDb是否适合我的情况,还是我应该使用一些没有像Mysql这样的限制的关系数据库?你怎么看 ?谢谢!
答案 0 :(得分:3)
您是否考虑过使用DynamoDB TTL feature?这使您可以在表中创建一个基于时间的列,DynamoDB将使用该列来基于时间值自动删除项目。
这不需要您执行任何操作,也没有轮询,查询或批处理限制。您将需要填充TTL列,但是如果您要滚动自己的到期逻辑,则可能已经存在该信息。
如果在发生TTL事件时需要通知其他服务,则可以创建处理Lambda的DynamoDB stream并在TTL delete event发生时采取措施。