2

DynamoDB にデータを送信する際に問題が発生しています。プログラムが正しく実行されているように見えるため、何が問題なのかわかりませんが、DB にデータがないようです。Amazons tutorialを使用してテーブルを作成できましたが、このチュートリアルに従うと、すべてのアイテムを入れようとすると失敗した応答が返され、db で何も更新されていないため、アイテムが 1 つだけの場合は偽の成功が返されます。

これがコードです。特に、この種の問題をデバッグする方法を誰かが知っているかどうか知りたいです。

<?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);
}

お時間をいただきありがとうございます

4

1 に答える 1

1

地域を明示的に設定してみてください。たとえば、EU の場合は次のように呼び出す必要があります。

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

また、異なるリージョンに 2 つのテーブルがあり、適用されているデフォルト リージョンが異なるため、アプリケーションはそのうちの 1 つで動作し、別のテーブルを読み取ろうとしている (または Web コンソールで追跡しようとしている) 可能性もあります。

テーブル内のアイテム数を追跡している場合、これはリアルタイムの数字ではないことに注意してください。6 時間ごとに更新されるだけです。そのため、put リクエストに対して「OK」応答を受け取った直後にアイテムを読み戻そうとすることで、アイテムが実際に書き込まれていることを確認する方法を使用できます。

于 2012-05-21T10:37:11.157 に答える