Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t通过JavaAPI将属性列表存储到本地dynamoDB_Java_Amazon Web Services_Amazon Dynamodb_Nosql - Fatal编程技术网

Can';t通过JavaAPI将属性列表存储到本地dynamoDB

Can';t通过JavaAPI将属性列表存储到本地dynamoDB,java,amazon-web-services,amazon-dynamodb,nosql,Java,Amazon Web Services,Amazon Dynamodb,Nosql,我在本地使用了dynamoDB进行开发,但是如果某些属性是List(例如字符串),如果我使用Set而不是List,那么我就不能在这个DB中存储项,所有的工作都是正确的,但是它破坏了逻辑。您能否澄清这是我的错误或DynamoDB的bug,示例如下: AmazonDynamoDBClient client = new AmazonDynamoDBClient(); client.setEndpoint("http://0.0.0.0:8000"); DynamoDB dyna

我在本地使用了dynamoDB进行开发,但是如果某些属性是List(例如字符串),如果我使用Set而不是List,那么我就不能在这个DB中存储项,所有的工作都是正确的,但是它破坏了逻辑。您能否澄清这是我的错误或DynamoDB的bug,示例如下:

    AmazonDynamoDBClient client = new AmazonDynamoDBClient();
    client.setEndpoint("http://0.0.0.0:8000");
    DynamoDB dynamoDB = new DynamoDB(client);
    try {
        ArrayList<AttributeDefinition> attributeDefinitions = new ArrayList<>();
        attributeDefinitions.add(new AttributeDefinition()
                .withAttributeName("key")
                .withAttributeType("S"));

        ArrayList<KeySchemaElement> keySchema = new ArrayList<>();
        keySchema.add(new KeySchemaElement()
                .withAttributeName("key")
                .withKeyType(KeyType.HASH));

        CreateTableRequest createTableRequest = new CreateTableRequest()
                .withKeySchema(keySchema)
                .withAttributeDefinitions(attributeDefinitions)
                .withProvisionedThroughput(new ProvisionedThroughput()
                        .withReadCapacityUnits(1000L)
                        .withWriteCapacityUnits(100L)); //I know it's now reason for local db
        Table table = dynamoDB.createTable(createTableRequest.withTableName("test-list"));
        table.waitForActiveOrDelete();

        Item correctItem = new Item().withPrimaryKey("key", "1").with("list", new HashSet<>(Arrays.asList("a")));
        table.putItem(correctItem);

        ScanResult scanResult = client.scan(new ScanRequest().withTableName(table.getTableName()).withScanFilter(Collections.EMPTY_MAP));

        for (Map<String, AttributeValue> stringAttributeValueMap : scanResult.getItems()) {
            System.out.println(stringAttributeValueMap);
        }


        Item wrongItem = new Item().withPrimaryKey("key", "2").with("list", Arrays.asList("a"));
        table.putItem(wrongItem);

        scanResult = client.scan(new ScanRequest().withTableName(table.getTableName()).withScanFilter(Collections.EMPTY_MAP));

        for (Map<String, AttributeValue> stringAttributeValueMap : scanResult.getItems()) {
            System.out.println(stringAttributeValueMap);
        }
    } finally {
        dynamoDB.getTable("test-list").delete();
    }
AmazonDynamoDBClient=newamazondynamodbclient();
client.setEndpoint(“http://0.0.0.0:8000");
DynamoDB DynamoDB=新DynamoDB(客户);
试一试{
ArrayList attributeDefinitions=新的ArrayList();
添加(新的AttributeDefinition()
.withAttributeName(“键”)
.withAttributeType(“S”);
ArrayList keySchema=新的ArrayList();
添加(新的KeySchemaElement()
.withAttributeName(“键”)
.withKeyType(KeyType.HASH));
CreateTableRequest CreateTableRequest=新建CreateTableRequest()
.withKeySchema(keySchema)
.withAttributeDefinitions(attributeDefinitions)
.withProvisionedThroughput(新的ProvisionedThroughput()
.带读取容量(1000L)
.withWriteCapacityUnits(100L));//我知道这是本地数据库的原因
Table Table=dynamoDB.createTable(createTableRequest.withTableName(“测试列表”));
table.waitForActivieOrDelete();
Item correctItem=new Item()。带primaryKey(“key”,“1”)。带(“list”,新哈希集(Arrays.asList(“a”));
表2.1项目(更正项目);
ScanResult ScanResult=client.scan(新的ScanRequest().withTableName(table.getTableName()).withScanFilter(Collections.EMPTY_MAP));
对于(映射stringAttributeValueMap:scanResult.getItems()){
System.out.println(stringAttributeValueMap);
}
Item ErrorItem=new Item().withPrimaryKey(“key”,“2”)。with(“list”,Arrays.asList(“a”);
表2.putItem(错误项);
scanResult=client.scan(新的ScanRequest().withTableName(table.getTableName()).withScanFilter(Collections.EMPTY_MAP));
对于(映射stringAttributeValueMap:scanResult.getItems()){
System.out.println(stringAttributeValueMap);
}
}最后{
dynamoDB.getTable(“测试列表”).delete();
}
注释

  • Java版本是:1.7.0\u 71
  • AWS sdk版本:AWS java sdk dynamodb:1.9.24
  • 本地发电机:发电机2013-12-12
  • DynamoDBLocal由以下命令启动:
    java-Djava.library.path=./DynamoDBLocal\u lib-jar DynamoDBLocal.jar

我使用相同的依赖项运行了您的代码(Java 8除外),并在向DynamoDBLocal发出请求后看到了相同的异常。我确实将行从
newhashset(Arrays.asList(“a”)
更改为
Collections.singletonList(“a”)

我对最新版本的DynamoDB local版本运行了相同的代码,该版本当前为DynamoDB_local_2015-01-27。我使用的两个命令都是
java-Djava.library.path=./DynamoDBLocal\u lib-jar DynamoDBLocal.jar-inMemory-port 8000

这就是输出:

{list={L:[{S:a,}],},key={S:1,}}

{list={L:[{S:a,}],},key={S:1,}}

{list={L:[{S:a,}],},key={S:2,}}


这看起来是DynamoDB Local版本的一个bug。您应该下载DynamoDB local的最新版本,该版本似乎已修复。

谢谢,我从本文中获取了DynamoDB,但错过了该版本,因为该版本太旧了
Exception in thread "main" com.amazonaws.AmazonServiceException: The request processing has failed because of an unknown error, exception or failure. (Service: AmazonDynamoDBv2; Status Code: 500; Error Code: InternalFailure; Request ID: ddce50a5-4e56-4769-9d9e-9e23a3b2dc92)
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1078)
    at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:726)
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:461)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:296)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:3139)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.putItem(AmazonDynamoDBClient.java:1214)
    at com.amazonaws.services.dynamodbv2.document.internal.PutItemImpl.doPutItem(PutItemImpl.java:87)
    at com.amazonaws.services.dynamodbv2.document.internal.PutItemImpl.putItem(PutItemImpl.java:41)
    at com.amazonaws.services.dynamodbv2.document.Table.putItem(Table.java:138)