2012-05-29 8 views
8

Sto provando a interrogare DynamoDB con l'aiuto di DynamoDBMapper in Java con hashKey e rangeKey. Ma non sto ottenendo tutti i risultati, ne restituisce solo una parte. Il mio codice è simile:Come posso recuperare tutti gli elementi dal risultato impaginato di una query DynamoDBMapper()?

queryDynamoDb() { 
    Condition rangeKeyCondition = new Condition() 
    .withComparisonOperator(ComparisonOperator.GT.toString()) 
    .withAttributeValueList(new AttributeValue().withS("0")); 

    DynamoDBQueryExpression queryExpression = new DynamoDBQueryExpression(
      new AttributeValue().withS(prefKey)); 

    queryExpression.setRangeKeyCondition(rangeKeyCondition); 

    List<MyObj> myobjs = mapper.query(MyObj.class, queryExpression); 
    return myobjs; 
} 

MyObj è correttamente annotato con annotazioni DynamoDB. Quindi sono in grado di salvare gli oggetti, ma il recupero restituisce solo un risultato parziale.

La documentazione di interrogazione entro DynamoDBMapper dice:

Il metodo query restituisce la collezione "pigro-caricato". Cioè, inizialmente restituisce solo una pagina di risultati. Effettua una chiamata di servizio per la pagina successiva quando necessario.

Ora la domanda è, come dire al mappatore di effettuare una chiamata di servizio o che è necessaria una pagina, quindi carica tutte le pagine (effettivamente tutte le voci)?

risposta

9

Il frammento di codice Java all'interno della documentazione Amazon DynamoDB per la DynamoDBMapper Class è un po 'sfortunato qui (anche se tecnologicamente corretta), la documentazione AWS SDK for Java API per Class DynamoDBMapper è (naturalmente) più precisa a questo proposito si veda il metodo query():

public <T> PaginatedQueryList<T> query(Class<T> clazz, 
             DynamoDBQueryExpression queryExpression) 

Così il tipo restituito è in realtà un Class PaginatedQueryList:

attuazione dell'interfaccia List che rappresenta i risultati fro m una query in AWS DynamoDB. I risultati impaginati vengono caricati su richiesta quando l'utente esegue un'operazione che li richiede. Alcune operazioni, come size(), devono recuperare l'intero elenco, ma i risultati sono pigramente recuperati pagina per pagina quando possibile. [sottolineare miniera]

vale a dire, davvero non c'è bisogno di caricare in modo esplicito qualsiasi cosa durante il normale utilizzo, nella misura in cui esso è implicitamente curato dalla realizzazione lazy-caricamento delle PaginatedQueryList<T>; tuttavia, se lo si desidera per qualsiasi motivo, è possibile attivarlo tramite operazioni che richiedono l'accesso a tutta la raccolta, con il metodo menzionato esplicitamente come apparentemente uno di essi.

+0

Aperto, sono d'accordo con la tua risposta, sembra che io sia nello stesso problema. La domanda è qui, https://stackoverflow.com/questions/45495145/issue-with-caching-and-dynamo-db-combination – Deepak

Problemi correlati