You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

能否借助Global Secondary Index(GSI)对DynamoDB表执行Get/Put/Delete操作?

关于DynamoDB GSI能否执行Get/Put/Delete操作的说明

好问题!这是很多刚接触DynamoDB索引的开发者都会疑惑的点,我直接给你明确答案:Global Secondary Indexes(GSI)只能用于QueryScan操作,你没办法直接通过GSI对原表的数据项执行GetItemPutItemDeleteItem

背后的原因其实很容易理解:

GSI本质上是DynamoDB自动维护的「索引副本」——它的数据完全依赖原表的操作同步更新。当你对原表执行Put/Delete/Get时,DynamoDB会自动帮你同步更新所有关联的GSI条目,但反过来,你不能直接操作GSI来修改原表的数据,也没法用GSI的键来定位原表数据做Get操作。

具体操作权限拆解:

  • GetItem:必须使用原表的主键(分区键+可选排序键)来定位数据,GSI的键不支持作为Get操作的查询条件
  • PutItem/DeleteItem:只能针对原表执行,DynamoDB会自动处理GSI的同步更新,不需要你手动操作索引
  • Query/Scan:这是唯一能直接对GSI执行的操作,你可以基于GSI的键条件筛选数据,返回的是原表中的完整数据项(也可以通过Projection配置只返回指定属性)

举个实际场景例子:假设你有一个电商订单表,原表主键是order_id,同时建了一个GSI用customer_id作为分区键。你可以通过Query传入customer_id查到该用户的所有订单,但不能用GetItem传入customer_id来获取某个订单,也不能直接修改GSI里的customer_id条目来更改原表的订单归属。

内容的提问来源于stack exchange,提问作者Homer

火山引擎 最新活动