批量put_item与PHP中的DynamoDB

时间:2012-05-09 18:06:12

标签: php nosql amazon-web-services amazon-dynamodb

我遇到了将数据发送到DynamoDB的问题。我不知道问题是什么,因为看起来程序运行正常,但我的数据库中似乎没有任何数据。我能够使用Amazons tutorial创建表格,但是当我按照本教程进行操作时,如果我尝试将 ALL 设置为项目,则会收到失败的响应,如果只有一个项目则会出现错误的成功,因为db中没有更新任何内容。

这是代码,我很好奇,如果有人知道调试这些问题的方法。

<?php
// If necessary, reference the sdk.class.php file. 
// For example, the following line assumes the sdk.class.php file is 
// in an sdk sub-directory relative to this file
require_once('includes/backend.php'); 

// Instantiate the class
$dynamodb = new AmazonDynamoDB();

####################################################################
# Setup some local variables for dates

$one_day_ago = date('Y-m-d H:i:s', strtotime("-1 days"));
$seven_days_ago = date('Y-m-d H:i:s', strtotime("-7 days"));
$fourteen_days_ago = date('Y-m-d H:i:s', strtotime("-14 days"));
$twenty_one_days_ago = date('Y-m-d H:i:s', strtotime("-21 days"));

####################################################################
# Adding data to the table

echo PHP_EOL . PHP_EOL;
echo "# Adding data to the table..." . PHP_EOL;

// Set up batch requests
$queue = new CFBatchRequest();
$queue->use_credentials($dynamodb->credentials);

// Add items to the batch
$dynamodb->batch($queue)->put_item(array(
    'TableName' => 'ProductCatalog',
    'Item' => array(
        'Id'              => array( AmazonDynamoDB::TYPE_NUMBER           => '101'              ), // Hash Key
        'Title'           => array( AmazonDynamoDB::TYPE_STRING           => 'Book 101 Title'   ),
        'ISBN'            => array( AmazonDynamoDB::TYPE_STRING           => '111-1111111111'   ),
        'Authors'         => array( AmazonDynamoDB::TYPE_ARRAY_OF_STRINGS => array('Author1')   ),
        'Price'           => array( AmazonDynamoDB::TYPE_NUMBER           => '2'                ),
        'Dimensions'      => array( AmazonDynamoDB::TYPE_STRING           => '8.5 x 11.0 x 0.5' ),
        'PageCount'       => array( AmazonDynamoDB::TYPE_NUMBER           => '500'              ),
        'InPublication'   => array( AmazonDynamoDB::TYPE_NUMBER           => '1'                ),
        'ProductCategory' => array( AmazonDynamoDB::TYPE_STRING           => 'Book'             )
    )
));


echo "Item put in <b>Reply</b>" . "<br/>";   

// Execute the batch of requests in parallel
$responses = $dynamodb->batch($queue)->send();

// Check for success...
if ($responses->areOK())
{
    echo "The data has been added to the table." . PHP_EOL;
}
    else
{
    utdump($responses);
}

感谢您的时间

1 个答案:

答案 0 :(得分:1)

尝试明确设置您的区域,例如对于EU,您需要致电:

$myDynamoDbObject->set_region('dynamodb.eu-west-1.amazonaws.com');

也可能是您在不同区域有两个表,您的应用程序使用其中一个表,并且您尝试使用另一个表读取(或使用Web控制台跟踪),因为应用了不同的默认区域。

如果您要跟踪表格中的项目数量,请记住它不是实时数字,它只会每6小时更新一次。因此,使用方式可以确保您的项目确实是通过在收到放置请求的“确定”响应后立即读回来确定的。