每周在应用程序中创建一个DynamoDB表

时间:2015-01-23 19:52:19

标签: java android amazon-web-services amazon-dynamodb

我正在开发一个Android应用程序,它的目的是每周创建一个DynamoDB表。我得到了当前的周数:

Time time = new Time(); 
time.setToNow(); 
curweekNumb = time.getWeekNumber();

所以我想将表名修改为:

Constants.TEST_TABLE_NAME = "Week_" + currentweekNumb; 

每当currentweekNumb值改变时。

Constants类:

public class Constants {
    public static String TEST_TABLE_NAME = "Week_1";
}

这里的主要问题是,我收到一个错误,表明注释属性DynamoDBTable.tableName的值必须是常量表达式。所以它需要一个" final"字符串值作为tableName。在这种情况下,我无法在应用程序的任何位置更改该值。是否无法动态更改应用程序中的表名?

@DynamoDBTable(tableName = Constants.TEST_TABLE_NAME) <--- The error is on this line
public static class UserPreference {
    private int Tid;
    private String Mandag;     

    @DynamoDBHashKey(attributeName = "Tid")
    public int getTid() {
        return Tid;
    }

    public void setTid(int Tid) {
        this.Tid = Tid;
    }

    @DynamoDBAttribute(attributeName = "Mandag")
    public String getMandag() {
        return Mandag;
    }

    public void setMandag(String Mandag) {
        this.Mandag = Mandag;
    }       
}

2 个答案:

答案 0 :(得分:1)

虽然@ lesto的回答是有效的,但我不建议每周制作一张ew表。从长远来看,它可能无法扩展。 DynamoDB每个区域的每个帐户限制为256个表,因此最终您将遇到它。见https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html#limits-tables

我建议您创建一个以星期作为分区的分区键。

答案 1 :(得分:0)

在编译时对注释进行了编辑,因此您无法使它们变为动态。 但你可以绕过它们;

UserPreference userTable = ..
String tableName = .. // Get table name
dynamoMapper.save(userTable, new DynamoDBMapperConfig(new TableNameOverride(tableName)));

你甚至可以使用表格列表但是你必须使用batchWrite()而不是save()