向DynamoDB插入同主键过期TTL记录的影响及报错疑问
关于DynamoDB主键覆盖与TTL过期记录的问题解答
不会触发报错
DynamoDB的PutItem操作不会因为目标主键的旧记录TTL过期但未被删除而报错。只要主键匹配,PutItem会直接覆盖现有记录——不管这条旧记录处于什么状态,哪怕已经被标记为TTL待删除。关于Stream事件的说明
直接用PutItem覆盖旧记录时,DynamoDB Streams只会生成MODIFY类型的事件,而不是你期望的删除(REMOVE)事件。因为这种操作本质是更新,而非先删除旧记录再插入新记录。实现你需求的方案
如果想要旧记录被立即删除且触发REMOVE事件,需要拆分两步操作:- 先执行
DeleteItem操作删除主键为389的旧记录,此时Streams会立即生成REMOVE事件,旧记录被同步删除。 - 再执行
PutItem插入更新了TTL的新记录,Streams会生成INSERT事件。
- 先执行
TTL后台删除的补充
TTL过期的记录是DynamoDB后台异步删除的,这个过程不会影响你的写入操作,但它触发的REMOVE事件时间不可控,无法保证立即生成。
内容的提问来源于stack exchange,提问作者Banarasi Vaibhav
相关产品推荐
相关产品推荐

