Z dokumentacji dynamo interfejsu API doc obsługuje obsługę stronicowania dla operacji skanowania i kwerend. Połów tutaj polega na ustawieniu ExclusiveStartIndex
bieżącego żądania na wartość LastEvaluatedIndex
poprzedniego żądania, aby uzyskać następny zestaw (strona logiczna) wyników.Tworzenie stron z DynamoDBMapper Java AWS SDK
Próbuję wdrożyć to samo, ale używam DynamoDBMapper
, który wydaje się mieć dużo więcej zalet, takich jak ścisłe połączenie z modelami danych. Więc gdybym chciał zrobić z powyższym, jestem przy założeniu, chciałbym zrobić coś jak poniżej:
// Mapping of hashkey of the last item in previous query operation
Map<String, AttributeValue> lastHashKey = ..
DynamoDBQueryExpression expression = new DynamoDBQueryExpression();
...
expression.setExclusiveStartKey();
List<Table> nextPageResults = mapper.query(Table.class, expression);
Mam nadzieję, że powyższe rozumienie jest właściwe Stronicowanie za pomocą DynamoDBMapper. Po drugie, skąd mam wiedzieć, że osiągnąłem koniec wyników. Od docs, jeśli mogę użyć następujące API:
QueryResult result = dynamoDBClient.query((QueryRequest) request);
boolean isEndOfResults = StringUtils.isEmpty(result.getLastEvaluatedKey());
Wracając do korzystania DynamoDBMapper, jak mogę wiedzieć, czy został osiągnięty koniec wyników w tej sprawie.
Jeśli jest 'limit' ustawione na say 2 przy użyciu 'query', nadal zwraca wszystkie rekordy. Dlaczego tak jest? – user7
@ user7 Wygląda na to, że zwraca wszystkie rekordy, podczas gdy w rzeczywistości podstawowa implementacja ('PaginatedQueryList') obsługuje tę funkcję. Zobacz dokumentację dla ['PaginatedQueryList'] (https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/PaginatedQueryList.html). Zachowuje się w taki sam sposób jak napisałem o 'scan' powyżej. Zasadniczo, jeśli przejdziesz przez to iterację, ostatecznie pobierze wszystkie elementy, ponieważ automatycznie wykonuje wywołania w paginacji. – mkobit
Więc 'withLimit' nie dotyczy? – user7