最近DynamoDB发布了文档类型(列表或地图)。在这里看到:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html#DataModel.DataTypes 或在这里:http://www.allthingsdistributed.com/2014/10/document-model-dynamodb.htmlAWS PHP SDK问题(DynamoDB)
现在正在尝试以下数组存储在DynamoDB
array("key"=>"value")
我使用PHP SDK 2.7.0和2.7.2和3.0.0的测试版(尝试了所有那些解决我的问题,每次都是同样的问题)。我下面哪个代码存储两个字符串完美的作品:
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"),
),
)
));
现在我想存储与地图数据类型的简单数组,而不是字符串:
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")),
),
)
));
这将导致以下错误:
Fatal error: Uncaught Aws\DynamoDb\Exception\DynamoDbException: AWS Error Code: SerializationException, Status Code: 400, AWS Request ID: 8H9URPVBNPCTG4VALA62XXXX3NVV4KQNSO5AEMVJF66Q9ASUAYGX, AWS Error Type: client, AWS Error Message: Expected null, User-Agent: aws-sdk-php2/2.7.0 Guzzle/3.9.2 curl/7.36.0 PHP/5.3.28 thrown in /path/aws2.7.0/Aws/Common/Exception/NamespaceExceptionFactory.php on line 91
AWS PHP SDK 2.7.0及以上应支持地图和列表类型:https://github.com/aws/aws-sdk-php/releases/tag/2.7.0
如何将数组存储在DynamoDB中?目前的SDK还有可能 - 还是需要发布更新以完全支持这些新的数据类型?或者是我的代码中的问题?
我会很感激任何意见或可能的解决方案。提前致谢!
关于这个新功能的更多信息,可以发现在aws博客上:http://aws.amazon.com/blogs/aws/dynamodb-update-json-and-more/ – 2014-10-27 17:44:26