能否更新DynamoDB GSI分区键?用户信息变更的GSI处理问询
关于DynamoDB GSI更新的问题解答
首先明确核心规则:主表的主键(PK/SK)确实无法直接更新,但GSI的键(分区键/排序键)如果对应主表的非主键属性,是可以通过更新主表属性来间接修改的。
结合你给出的账户表(主表PK=ID,SK=createdAt;GSI PK=email,SK=createdAt)场景,针对你的问题具体解答如下:
问题1:修改邮箱或用户名是否会在GSI生成新行?
- 若修改的是email(GSI的分区键):DynamoDB会在GSI中针对新的email值生成一条全新的条目,同时标记旧email对应的GSI条目为待删除状态。
- 若修改的是username(未作为GSI的键属性):如果你的GSI投影包含username字段,只会更新GSI对应条目里的username值,不会生成新行;如果GSI没投影这个字段,GSI不会有任何变化。
问题2:是否会产生GSI旧行?DynamoDB会自动清理吗?
- 修改GSI的键属性(比如这里的email)时,旧的GSI条目不会立即被删除,短时间内可能还能查询到,但DynamoDB会通过异步后台进程自动清理这些过期的旧条目,无需手动操作。这个清理过程通常在数分钟到数小时内完成(具体取决于集群负载),最终旧条目会被彻底移除,不会永久留存。
内容的提问来源于stack exchange,提问作者derng
相关产品推荐
相关产品推荐

