Dalla documentazione API dynamo db supporta l'impaginazione per le operazioni di scansione e query. Il problema qui è impostare la ExclusiveStartIndex
della richiesta corrente sul valore della LastEvaluatedIndex
della richiesta precedente per ottenere il prossimo set (pagina logica) dei risultati.Paginazione con DynamoDBMapper Java AWS SDK
Sto cercando di implementare lo stesso, ma sto usando DynamoDBMapper
, che sembra avere molti più vantaggi come l'accoppiamento stretto con i modelli di dati. Quindi, se volevo fare quanto sopra, sto assumendo che vorrei fare qualcosa di simile di seguito:
// 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);
Spero che la mia sopra comprensione è corretta impaginazione utilizzando DynamoDBMapper. In secondo luogo, come potrei sapere che ho raggiunto la fine dei risultati. Dalla documentazione se uso il seguente api:
QueryResult result = dynamoDBClient.query((QueryRequest) request);
boolean isEndOfResults = StringUtils.isEmpty(result.getLastEvaluatedKey());
Tornando a utilizzare DynamoDBMapper, come faccio a sapere se ho raggiunto la fine dei risultati in questo caso.
Se 'limit' è impostato per dire 2 quando si usa 'query', sta ancora restituendo tutti i record. Perché è così? – user7
@ user7 Sembra solo che stia restituendo tutti i record, quando in realtà l'implementazione sottostante ('PaginatedQueryList') sta gestendo l'impaginazione per voi. Guarda la documentazione di ['PaginatedQueryList'] (https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/PaginatedQueryList.html). Si comporta nello stesso modo in cui ho postato su 'scan' sopra. Fondamentalmente, se si itera su di esso, alla fine recupererà tutti gli elementi perché sta facendo automaticamente le chiamate di impaginazione. – mkobit
Quindi 'withLimit' non si applica per questo? – user7