You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Dynamodb enhanced client实现LocalSecondaryIndex操作

DynamoDB Enhanced Client没有为本地二级索引(Local Secondary Index, LSI)提供专属注解,是因为LSI的配置和查询逻辑可以直接复用现有二级索引相关能力,最佳实现方式如下:

1 实体类注解配置

LSI的核心特性是和主表共享分区键,仅自定义排序键,因此不需要额外声明分区键注解,仅需要给LSI对应的排序键字段添加@DynamoDbSecondarySortKey注解,指定对应的LSI索引名即可,示例代码如下:

@DynamoDbBean
public class Order {
    private String userId;
    private String orderId;
    private Instant createTime;
    private Long amount;

    // 主表分区键
    @DynamoDbPartitionKey
    public String getUserId() { return userId; }
    public void setUserId(String userId) { this.userId = userId; }

    // 主表排序键
    @DynamoDbSortKey
    public String getOrderId() { return orderId; }
    public void setOrderId(String orderId) { this.orderId = orderId; }

    // LSI的排序键,对应索引名idx_userid_createtime
    @DynamoDbSecondarySortKey(indexNames = "idx_userid_createtime")
    public Instant getCreateTime() { return createTime; }
    public void setCreateTime(Instant createTime) { this.createTime = createTime; }

    // 其他字段getter/setter省略
}
2 LSI查询实现

查询时和查询全局二级索引(GSI)的逻辑基本一致,仅需要在构建查询请求时指定对应的LSI索引名,并且必须传入主表的分区键值作为查询条件,示例代码如下:

// 构建表操作对象
DynamoDbTable<Order> orderTable = enhancedClient.table("Order", TableSchema.fromBean(Order.class));

// 查询指定用户近7天的所有订单(使用LSI idx_userid_createtime)
Instant sevenDaysAgo = Instant.now().minus(Duration.ofDays(7));
QueryConditional queryConditional = QueryConditional.sortGreaterThan(
    Key.builder()
        .partitionValue("user_123") // 必须指定主表分区键值
        .sortValue(sevenDaysAgo)
        .build()
);

PageIterable<Order> results = orderTable.query(r -> r
    .indexName("idx_userid_createtime") // 指定LSI索引名
    .queryConditional(queryConditional)
);

// 遍历查询结果
for (Page<Order> page : results) {
    page.items().forEach(order -> System.out.println(order.getOrderId()));
}
3 注意事项
  • LSI仅支持在创建表的时候定义,无法在表创建后新增、修改或删除,因此实体类的索引配置必须和建表时的参数完全匹配
  • DynamoDB对LSI有容量限制:同一个分区键下所有LSI对应的条目总大小不能超过10GB,数据量较大的场景建议优先使用GSI
  • 查询LSI时必须指定主表分区键的等值条件,不支持跨分区查询LSI

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:48:03