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



我们有一些旧代码正在对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,我所需要验证的就是记录是否存在,这样我就可以减少延迟。

我的问题是,我该如何做到这一点?

getLimit((的文档指示:

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

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

最新更新