如何在DAO层中的DynamoDB中应用过滤器?

时间:2016-04-19 17:25:48

标签: amazon-web-services amazon-dynamodb

我使用此方法从dynamodb获取数据。但我如何应用过滤器或(Where子句通过名称和地址获取数据)

公共类CustomerDAO扩展AbstractDAO实现DynamodbDAO {

@Override
public Class<Customer> getClazz() {
    return Customer.class;
}
public List<Customer> getByUserId(String userId) {

        return getDynamoDB().scan(
                getClazz(),
                new DynamoDBScanExpression().withFilterExpression(
                        "USER_ID = :userId")
                        .addExpressionAttributeValuesEntry(":userId",
                                new AttributeValue().withS(userId)));
    }
}
}

1 个答案:

答案 0 :(得分:0)

您需要在扫描中应用FilterExpression。使用此表达式,您可以将过滤逻辑应用于每个项目的任何属性,进一步描述here。这个过滤由DynamoDB在服务器端应用,因此只有匹配的结果将返回给您,但您仍然“支付”读取数据所需的读取IO。

在相关问题上,通常应避免扫描DynamoDB表。它需要读取表中的每个项目,除非您的表非常小,否则会产生大量的读取IO,并且需要很长时间才能返回。您应该尝试使用哈希或范围键来完成查询,该键允许您直接获取所需的数据。如果这不适用于表的主哈希/范围键,您应该考虑创建全局二级索引以允许您直接访问所需的数据。