Как запросить DynamoDB и вернуть первый совпадающий результат вместо запроса всей коллекции? - PullRequest
1 голос
/ 15 марта 2020

У нас есть старый код, который выполняет запрос к 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 голосов
/ 16 марта 2020

Документация для getLimit () указывает:

Обратите внимание, что при вызове DynamoDBMapper.query для DynamoDB делается несколько запросов, если необходимо получить весь набор результатов. Установка этого параметра ограничит количество элементов, извлекаемых каждым запросом, а НЕ общее количество результатов, которые будут получены. Используйте DynamoDBMapper.queryPage для извлечения одной страницы элементов из DynamoDB.

Чтобы ограничить количество результатов, вы можете использовать queryPage () вместо query (). И примените withLimit(1) к вашему выражению запроса.

...