DynamoDB中GSI与LSI的排序键值是否支持更新及自增操作?
DynamoDB排序键修改相关问题解答
主表排序键的不可变性
主表的主键(分区键+排序键)一旦写入就完全不可修改,这是DynamoDB的核心规则,无法通过任何更新操作直接改变排序键的值,只能删除原条目后重新插入。
GSI排序键的可更新性
GSI(全局二级索引)的排序键是可以修改的:
- 当你更新主表中作为GSI排序键的属性(比如
counts)时,DynamoDB会自动同步更新GSI中的对应条目——先删除旧的GSI条目,再插入新的条目,这个过程由DynamoDB后台自动完成。 - 对于
counts这类数值型属性,你可以直接使用UpdateItem操作配合ADD动作实现自增更新,比如:
这个操作会同时更新主表的UpdateItem( TableName='your-table', Key={'partitionKey': {'S': 'xxx'}}, UpdateExpression='ADD counts :incr', ExpressionAttributeValues={':incr': {'N': '1'}} )counts值和GSI中对应的排序键值。
LSI排序键的不可变性
LSI(本地二级索引)的排序键和主表排序键一样不可修改:
- LSI是和主表分区键绑定的,其排序键属于主表主键的一部分(主表主键为分区键+LSI排序键),所以一旦写入就无法修改,同样只能删除原条目后重新插入。
内容的提问来源于stack exchange,提问作者niyruu
相关产品推荐
相关产品推荐

