Вам нужно будет использовать Выражения фильтра , чтобы ограничить объем данных, обрабатываемых вашим приложением.
Вы также можете избавиться от дополнительных, неважных атрибутов в результатах сканирования, используя ProjectionExpressions .
Вот код:
DynamoDbClient client = DynamoDbClient.builder().build();
ScanRequest request =
ScanRequest
.builder()
.tableName("users")
.filterExpression("version = :version")
.expressionAttributeValues(
Map.of(":version", AttributeValue.builder().s("3.1").build()) // Using Java 9+ Map.of
)
.projectionExpression("id, version, emailsEnabled")
.build();
ScanIterable response = client.scanPaginator(request);
for (ScanResponse page : response) {
for (Map<String, AttributeValue> item : page.items()) {
// Consume the item
System.out.println(item);
if (item.get("emailsEnabled").bool()) {
// Update counters
}
}
}
Обратите внимание, что выражение фильтра применяется после завершения сканирования, но до возвращения результатов.Таким образом, сканирование будет потреблять одинаковую емкость чтения независимо от того, присутствует выражение фильтра или нет.