2016-04-23 14 views
9

Tôi hiện đang sử dụng Java dynamoMapper để tạo và truy vấn bảng. Khi cố gắng tạo bảng có chỉ mục phụ tổng thể, tôi nhận được lỗi sau đâyTạo bảng với chỉ mục phụ toàn cục bằng DynamoMapper và chú thích lớp

No provisioned throughput specified for the global secondary index

Lớp java của tôi đại diện cho bảng có thuộc tính này cho chỉ mục phụ toàn cầu.

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

Class để tạo bảng trông như thế này

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

Tôi đã tìm kiếm các trang web Amazon cho chú thích bổ sung và cấu hình nhưng không đưa ra cho DynamoMapper. Có anyway để làm điều này bằng cách sử dụng ORM hoặc tôi sẽ phải tự tạo bằng cách sử dụng một API cấp thấp hơn?

Trả lời

9

Bạn cần đặt thông lượng được cung cấp trên mỗi bảng chỉ mục phụ cũng sẽ được tạo.

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

Cảm ơn bạn đã làm việc! –

1

Mở rộng tới @ Jeremy's answer.

Nếu bạn có nhiều hơn một GSI, thì bạn có thể làm như sau. Ngoài ra, bạn không cần phải tạo đối tượng ProvisionedThroughput tất cả thời gian nếu chúng có cùng giá trị.

final ProvisionedThroughput provisionedThroughput = new ProvisionedThroughput(5L, 5L); 
createRequest.setProvisionedThroughput(provisionedThroughput); 
createRequest.getGlobalSecondaryIndexes().forEach(v -> v.setProvisionedThroughput(provisionedThroughput)); 
Các vấn đề liên quan