2016-04-23 8 views
9

Attualmente sto utilizzando il dynamoMapper Java per creare e interrogare la tabella. Quando si tenta di creare una tabella con un indice secondario globale, ottengo il seguente erroreCrea tabella con indice secondario globale utilizzando DynamoMapper e classe Annotazione

No provisioned throughput specified for the global secondary index

La mia classe Java che rappresenta la tabella ha questo attributo per l'indice secondario globale.

@DynamoDBIndexHashKey(globalSecondaryIndexName="sender") 
    public String getSender() { 
    return sender; 
} 

classe per creare la tabella assomiglia a questo

public boolean createTable() { 
try { 
DynamoDBMapper mapper = new DynamoDBMapper(client); 
CreateTableRequest tableRequest =  mapper.generateCreateTableRequest(entityClass); // 1 
tableRequest.setProvisionedThroughput(new ProvisionedThroughput(1000L, 1500L)); // 2 
client.createTable(tableRequest); // 3 

    } catch (Error e) { 
     e.printStackTrace(); 
     return false; 

    } catch (Exception e) { 
     e.printStackTrace(); 
     return false; 
    } 
    return true; 
} 

Ho cercato il sito di Amazon per le annotazioni aggiuntive e di configurazione, ma niente è venuto in su per DynamoMapper. C'è comunque modo di fare ciò usando ORM o dovrò creare manualmente usando un'API di livello inferiore?

risposta

9

È necessario impostare il throughput fornito su ogni tabella indice secondaria che verrà generata.

tableRequest.getGlobalSecondaryIndexes().get(0).setProvisionedThroughput(new ProvisionedThroughput(10l, 10l)); 
+0

Grazie che ha funzionato! –

1

Estensione a @ risposta di Jeremy.

Se si dispone di più di un GSI, è possibile farlo come di seguito. Inoltre, non è necessario creare oggetti ProvisionedThroughput per tutto il tempo se hanno gli stessi valori.

final ProvisionedThroughput provisionedThroughput = new ProvisionedThroughput(5L, 5L); 
createRequest.setProvisionedThroughput(provisionedThroughput); 
createRequest.getGlobalSecondaryIndexes().forEach(v -> v.setProvisionedThroughput(provisionedThroughput)); 
Problemi correlati