【发布时间】:2014-12-22 23:01:19
【问题描述】:
最近 DynamoDB 发布了文档类型(列表或地图)。见这里:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html#DataModel.DataTypes 或在这里:http://www.allthingsdistributed.com/2014/10/document-model-dynamodb.html
现在我正在尝试将以下数组存储在 DynamoDB 中
array("key"=>"value")
我正在使用 PHP SDK 2.7.0 和 2.7.2 和 3.0.0 beta(尝试了所有这些来解决我的问题,每次都是同样的问题)。我的代码下面存储了两个字符串完美运行:
require ("aws2.7.0/aws-autoloader.php");
use Aws\DynamoDb\DynamoDbClient;
$client = DynamoDbClient::factory(array(
'key' => 'KEY',
'secret' => 'SECRET',
'region' => 'eu-west-1'
));
$result = $client->putItem(array(
'TableName' => 'requests-test',
'Item' => array(
'messageId' => array('S' => "test-message1"),
'data' => array('S' => "message-data-here"),
),
)
));
现在我正在尝试使用 Map 数据类型而不是字符串存储一个简单的数组:
require ("aws2.7.0/aws-autoloader.php");
use Aws\DynamoDb\DynamoDbClient;
$client = DynamoDbClient::factory(array(
'key' => 'KEY',
'secret' => 'SECRET',
'region' => 'eu-west-1'
));
$result = $client->putItem(array(
'TableName' => 'requests-test',
'Item' => array(
'messageId' => array('S' => "test-message1"),
'data' => array('M' => array("key"=>"value")),
),
)
));
这会导致以下错误:
致命错误:未捕获的 Aws\DynamoDb\Exception\DynamoDbException:AWS 错误代码:SerializationException,状态代码:400,AWS 请求 ID: 8H9URPVBNPCTG4VALA62XXXX3NVV4KQNSO5AEMVJF66Q9ASUAYGX,AWS 错误类型: 客户端,AWS 错误消息:预期为空,用户代理: aws-sdk-php2/2.7.0 Guzzle/3.9.2 curl/7.36.0 PHP/5.3.28 扔进去 /path/aws2.7.0/Aws/Common/Exception/NamespaceExceptionFactory.php 在第 91 行
AWS PHP SDK 2.7.0 及以上版本应支持 Map 和 List 类型:https://github.com/aws/aws-sdk-php/releases/tag/2.7.0
如何在 DynamoDB 中存储数组?是否有可能使用当前的 SDK - 或者他们是否需要发布更新以完全支持这些新数据类型?还是我的代码有问题?
我非常感谢任何 cmets 或可能的解决方案。提前致谢!
【问题讨论】:
-
有关此新功能的更多信息,请访问 aws 博客:aws.amazon.com/blogs/aws/dynamodb-update-json-and-more
标签: php amazon-web-services amazon-dynamodb