为何可单独设置DynamoDB全局二级索引(GSI)的写入容量?
虽然主表的每一次写入都会同步触发关联GSI的写入,但两者的写入容量配置之所以要分开,核心原因在于主表和GSI的写入消耗、使用场景完全独立,具体可以从这几个角度理解:
写入消耗的计算逻辑不同:主表的写入容量单位(WCU)是按主表单条数据的大小来计算的,而GSI的WCU是按GSI自身存储的项目大小算的。比如主表一条数据1KB,消耗1个WCU,但如果GSI只包含主键和一个小属性(比如200字节),那这次GSI写入只消耗0.25个WCU。分开设置的话,你可以根据GSI的实际数据体积精准配置容量,避免按主表标准过度配置造成浪费。
读写热度的差异:主表可能是高频写入的业务核心表,但关联的GSI可能只是用于低频查询的辅助索引,甚至只是做数据备份用。这种情况下,给GSI设置较低的写入容量就足够,不用被迫和主表保持一致的高配置;反过来,如果某个GSI被频繁用于实时查询,你可以单独调高它的读容量,写入容量仍按需设置,灵活性更高。
资源隔离与成本控制:分开配置可以实现主表和GSI的资源隔离。比如主表突发流量需要临时扩容WCU,GSI不需要跟着同步扩容——因为GSI的写入是由主表触发的,只要主表能处理写入,GSI按自身配置的容量就能应对,不会因为主表的峰值流量导致不必要的成本增加。
多GSI的差异化需求:一个主表可以关联多个GSI,每个GSI的用途、数据结构都可能不同。比如一个GSI用于报表统计,数据量大但写入频率低;另一个GSI用于实时检索,写入频率高但数据量小。独立配置写入容量,能让每个GSI都匹配最适合的资源配置,不用统一按主表的标准来。
内容的提问来源于stack exchange,提问作者Julien BERNARD

