2016-04-23 5 views
9

Ich verwende derzeit Java dynamoMapper zum Erstellen und Abfragen der Tabelle. Beim Versuch, eine Tabelle mit einem globalen Sekundärindex zu erstellen, bekomme ich folgende FehlerErstellen Sie Tabelle mit globalen sekundären Index mit DynamoMapper und Klasse Annotation

No provisioned throughput specified for the global secondary index

Meine Java-Klasse, die die Tabelle für den globalen Sekundärindex dieses Attribut hat.

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

Klasse Tabelle zu erstellen, sieht wie folgt aus

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; 
} 

ich die Amazon-Website für zusätzliche Anmerkungen und Konfiguration, aber nichts für DynamoMapper kam gesucht. Gibt es eine solche Möglichkeit, ORM zu verwenden, oder muss ich manuell eine API auf niedrigerer Ebene erstellen?

Antwort

9

Sie müssen den bereitgestellten Durchsatz für jede sekundäre Indextabelle festlegen, die ebenfalls generiert wird.

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

Danke das hat funktioniert! –

1

Erweiterung auf @ Jeremys Antwort.

Wenn Sie mehr als ein GSI haben, können Sie es wie folgt tun. Außerdem müssen Sie das ProvisionedThroughput-Objekt nicht immer erstellen, wenn sie die gleichen Werte haben.

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