AWS DynamoDB索引创建咨询:LSI与GSI选型建议
应该选用LSI还是GSI?
首先明确核心判断逻辑:如果你的主表分区键是OrderId,优先选LSI;如果主表分区键不是OrderId,只能选GSI。
为什么优先选LSI(当主表分区键为OrderId时)
- 匹配业务场景:LSI必须与主表共享分区键(这里即OrderId),你可以把
FromDate和ToDate组合成一个复合排序键(比如拼接成2024-01-01#2024-01-31这类字符串),这样就能通过OrderId + 组合日期键精准定位行数据,完全满足“用前三个字段定位并upsert HistoricalData”的需求。 - 实时性与一致性保障:LSI的读写与主表原子同步,upsert主表数据时,LSI会立即更新,不存在GSI那种异步复制的延迟,确保操作后能立刻读取到最新的HistoricalData;同时LSI支持强一致性读取,对需要精准数据的场景更可靠。
- 性能与成本优势:LSI和主表数据存储在同一分区,查询性能更好,且无需额外异步复制开销,成本比GSI更低。
什么时候需要选GSI
如果你的主表分区键不是OrderId(比如用了其他字段作为分区键),那LSI就无法使用(LSI强制要求与主表分区键一致),这时只能选择GSI:
- 将GSI的分区键设为OrderId,排序键设为
FromDate+ToDate的组合,也能实现基于这三个字段的检索。 - 但要注意:GSI是异步复制数据的,upsert主表后,GSI中的数据可能存在延迟,默认是最终一致性读取,强一致性读取会有额外的性能和成本开销。
内容的提问来源于stack exchange,提问作者Gagan H M
相关产品推荐
相关产品推荐

