Я экспериментирую с WriteRequestBatch от AWS SDK для Dynamodb. Ниже мой код. Все работает, кроме части WriteRequestBatch. Я понятия не имею, почему, и задавался вопросом, может ли сообщество помочь мне здесь. Что я могу сделать неправильно? Я пробовал искать и искать здесь и нашел только 8 других вопросов, которые могут быть связаны, но, к сожалению, не помогли.AWS PHP SDK issue with Dynamodb WriteRequestBatch
This, откуда я начал.
$ddb_client = DynamoDbClient::factory(array(
'region' => 'us-east-1',
'key' => 'my_key',
'secret' => 'my_secret'
));
$ddb_client->createTable(array(
'TableName' => 'my_table',
'AttributeDefinitions' => array(
array(
'AttributeName' => 'id',
'AttributeType' => 'S'
),
array(
'AttributeName' => 'ns',
'AttributeType' => 'S'
)
),
'KeySchema' => array(
array(
'AttributeName' => 'id',
'KeyType' => 'HASH'
),
array(
'AttributeName' => 'ns',
'KeyType' => 'RANGE'
)
),
'ProvisionedThroughput' => array(
'ReadCapacityUnits' => 10,
'WriteCapacityUnits' => 10
)
));
$response = $ddb_client->putItem(array(
"TableName" => "my_table",
"Item" => array(
"id" => array("S" => "exp_id"),
"ns" => array("S" => "exp_ns"),
"version" => array("N" => "0"),
),
));
$item = $response['Item'];
$item['version']['N'] = '1';
$put_batch = WriteRequestBatch::factory($ddb_client);
$put_request = new PutRequest(
array(
"Item" => $item,
"Expected" => array(
"version" => array(
"ComparisonOperator" => "EQ",
"AttributeValueList" => array(
array("N" => "0")
)
),
),
),
"my_table"
);
$putBatch->add($put_request);
$putBatch->flush();
Это работает вместо WriteRequestBatch. Я просто должен управлять партиями, чтобы поставить себя чем использовать WriteRequestBatch делает это для меня:
$response = $ddb_client->batchWriteItem(array(
"RequestItems" => array(
"my_table" => array(
array(
"PutRequest" => array(
"Item" => $item,
"Expected" => array(
"version" => array(
"ComparisonOperator" => "EQ",
"AttributeValueList" => array(
array("S" => "0")
)
),
),
)
)
)
)
));
На самом деле Джереми, код в документах, на которые вы ссылаетесь, довольно сломан. Попробуйте прямое копирование/вставку, и вы поймете, что я имею в виду. Броски "Аргумент 1 передан Aws \ DynamoDb \ Model \ BatchRequest \ PutRequest :: __ construct() должен быть экземпляром Aws \ DynamoDb \ Model \ Item, array given ...« Возможно, API впереди документов? Хммм ... все еще работаю над этим. –
Да, это сломано – bagi
@Jeremy Я не знаю, заметили ли вы ** [Это] (http://docs.aws.amazon.com/aws-sdk-php/guide/latest/service-dynamodb.html# using-the-writerequestbatch), откуда я начал. **, Это указывает на ссылку AWS SDK. – bagi