DynamoDB - сканировать по одному (как курсор JDBC) - PullRequest
0 голосов
/ 25 июня 2018

Я хотел бы получить ЛЮБУЮ строку в моей таблице DynamoDB, но таблица может быть очень большой.Я не хочу, чтобы сервер БД возвращал мне все строки, а затем я просто получаю первый элемент в наборе.

С JDBC я бы использовал курсор, который является просто «указателем» на строкув базе данных.В DynamoDB я смотрел на операцию scan() (https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Scan.html), но есть очень много похожих методов, и они различаются в зависимости от версии и параметров, которые не выполняют то, что я ожидал, что я действительноЯ действительно не хочу отправлять JSON-запросы, если для этого есть простое программное выражение.

Какой метод мне нужно искать, чтобы просто получать элементы один за другим от клиента к серверу,вместо того, чтобы сервер собирал их и возвращал несколько?

Моя попытка:

new DynamoDB( AmazonDynamoDBClientBuilder.standard() .withRegion(Regions.US_EAST_1.name()) .build()) .getTable("my_large_table") // MaxResultSize just blindly returns rows, not matching rows. Since we have no filter criteria this is fine. .scan(new ScanSpec().withMaxResultSize(1).withConsistentRead(true)) .firstPage() .getLowLevelResult() .getScanResult() .getItems();

Информация о версии

Пока я использую этино если это будет изменено в более поздних версиях, я хотел бы знать решение, которое минимизирует будущие проблемы миграции:

<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-core</artifactId> <version>1.11.127</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk</artifactId> <version>1.11.127</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-dynamodb</artifactId> <version>1.11.127</version> </dependency>

1 Ответ

0 голосов
/ 26 июня 2018

Просто используйте аргумент Limit Scan.

По умолчанию Scan будет оценивать каждый элемент в таблице.Использование оператора лимита установит «максимальное количество элементов для оценки (не обязательно количество подходящих элементов)».

Так что если вы сканируете таблицу без фильтров, а для параметра Ограничение установлено значение 1, вы всегда будетеполучить один возвращенный предмет (при условии, что есть хотя бы один предмет).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...