如何查询DynamoDB并返回第一个匹配结果,而不是查询整个集合?

时间:2020-03-14 22:05:54

标签: java amazon-dynamodb dynamodb-queries

我们有一些旧代码正在查询DynamoDB以查找匹配记录的列表。

下面的示例代码:

    final DynamoDBQueryExpression<MyObject> queryExp = new DynamoDBQueryExpression<MyObject>()
            .withHashKeyValues(myObject)
            .withIndexName(indexName)
            .withScanIndexForward(false)
            .withConsistentRead(true)
            .withLimit(rowsPerPage);
    final PaginatedQueryList<MyObject> ruleInstanceList = dynamoDBMapper.query(MyObject.class, queryExp);

这是一个缓慢的操作,因为此查询将返回匹配的MyObject列表,并且我注意到我们使用的所有方法是检查此列表是否为空。

所以我想做的就是简单地查询以找到第一个元素,甚至是不同类型的查询以简单地确保计数大于0,我需要验证的是记录是否存在,以便我可以减少延迟。

我的问题是,如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

getLimit()的文档指出:

请注意,在调用DynamoDBMapper.query时,如果需要检索DynamoDB的多个请求以检索整个结果集。设置此项将限制每个请求检索的项目数,而不是将检索的结果总数。使用DynamoDBMapper.queryPage从DynamoDB检索项目的单个页面。

要限制结果数量,可以使用queryPage()而不是query()。并将withLimit(1)应用于您的查询表达式。