LoginSignup
37
38

More than 5 years have passed since last update.

DynamoDBメモ (+PHP SDK2)

Last updated at Posted at 2014-03-31

データ型

キー名 データ型 説明
S String
N Number
B Binary
SS A set of strings
NS A set of numbers
BS A set of binary

クライアントの生成 / DynamoDbClient#factory


<?php
use Aws\DynamoDb\DynamoDbClient;

$dynamo = DynamoDbClient::factory(array(
    'key'    => AWS_KEY,
    'secret' => AWS_SECRET,
    'region' => AWS_REGION,
));

データの登録 / DynamoDbClient#putItem

<?php

$result = $dynamo->putItem(
    array(
        'TableName' => 'table_name',
        'Item' => $dynamo->formatAttributes(
            array(
                'key1'  => $value1,
                'key2'  => $value2,
                'key3'  => $value3,
            )
        ),
         // INDEXES | TOTAL | NONE
        'ReturnConsumedCapacity' => 'TOTAL',
        // NONE | ALL_OLD | UPDATED_OLD | ALL_NEW | UPDATED_NEW
       'ReturnValues' => 'ALL_NEW',        
        // SIZE | NONE
       'ReturnItemCollectionMetrics' => 'SIZE', 
    )
);

ReturnConsumedCapacity

説明
NONE (デフォルト値) 何も返さない
TOTAL テーブルとインデックス両方で消費されたキャパシティのトータルを返す
INDEXES インデックスで消費されたキャパシティのみ返す

キャパシティはread capacity unitsのこと。多分。

ReturnItemCollectionMetrics

説明
NONE (デフォルト値) 何も返さない
SIZE 操作中に変更されたアイテムのコレクションがあれば、統計情報が返されます。

データの更新 / DynamoDbClient#updateItem

<?php

use Aws\DynamoDb\DynamoDbClient;
use Aws\DynamoDb\Enum\Type;
use Aws\DynamoDb\Enum\AttributeAction;
use Aws\DynamoDb\Enum\ReturnValue;


$result = $dynamo->updateItem(array(
    "TableName" => 'table_name',
    "Key" => array(
        "Id" => array(Type::NUMBER => 121)
    ),
    "AttributeUpdates" => array(
        "NewAttribute" => array(
            "Value" => array(Type::STRING => "Some Value")
        ),
        "Authors" => array(
            "Action" => AttributeAction::ADD,
            "Value" => array(Type::STRING_SET => array("Author YY", "Author ZZ"))
        )
    ),
    "ReturnValues" => ReturnValue::ALL_NEW
));

パラメータ:Action (ADD | PUT | DELETEが指定可能)

  • ADD:

    • 属性が既に存在しない場合、属性とその値がアイテムに追加される。
    • 属性が存在する場合は、属性のデータ型によって動作が異なる。
      • 既存の属性がnumberで 値もnumberの場合、加算される。
      • 既存の属性がセット型で、値もセットの場合、追加される。
  • PUT:

    • アイテムに指定された属性を追加。属性が既に存在する場合は、新しい値に置き換えられる。
  • DELETE:

    • 値を指定しない場合、属性とその値をアイテムから除去される。
    • 指定された値のデータ型は、既存の値のデータ型と一致する必要がある。
    • 値にセット型が指定されている場合、それらの値は、古いセットから減算される。たとえば、[A、B、C]という値が設定されていた場合に、[A、C]の削除アクションを実行すると、結果は[B]になる。空のセットを指定するとエラー。

パラメータ:Expected

期待する値を持っているかチェックできるぽい。詳細は不明

パラメータ:ReturnValues

説明
NONE (デフォルト値) 何も返さない
ALL_OLD 古い属性値すべてを返す
UPDATED_OLD 更新された古い属性値のみを返す
ALL_NEW 新しいバージョンの属性すべて返す
UPDATED_NEW 更新された新しい属性値のみを返す

データの取得 / DynamoDbClient#getItem

<?php

 $args = array(
        'TableName' => 'table_name',
        'Key' => array(
            'field1' => array('N' => '1201'),
            'field2' => array('S' => 1),
        ),
        // 'AttributesToGet' => array('string', ... ),
        'ConsistentRead' => true,
        //'ReturnConsumedCapacity' => 'string',
 );
 $result = $client->getItem($args);

パラメータ:ConsistentRead

説明
true 強く一貫した読み取り
false (デフォルト)結果的な読取り一貫性

パラメータ:AttributesToGet

属性を指定した場合、指定した属性のみ返す。指定しなかった場合はすべて返す。
select * と、select field1, field2 from table の違いみたいな感じ。

データの検索 / DynamoDbClient#query

レスポンス: LastEvaluatedKey

Limitを指定した場合か、結果セットが1MBを超えた場合にのみ返される。
続きのデータを取得したい場合は、LastEvaluatedKey の値を ExclusiveStartKeyに指定して再度queryする。

メモ/比較演算子

演算子 説明
EQ 等しい
LE 以下 (Less than or equal)
LT 未満 (Less than)
GE 以上 (Greater than or equal)
GT より大きい (Greater than)
BEGINS_WITH 〜で始まる
BETWEEN A〜Bの間 (AとBは含む)

DynamoDbClientの便利メソッド(Dynamo形式のデータ型に変換)

※ 注意:2014/11/09追記

このメソッドは、DynamoDBがjsonをサポートしたのに伴い、deprecated になっています。
(see https://github.com/aws/aws-sdk-php/blob/master/src/Aws/DynamoDb/DynamoDbClient.php#L155)

<?php

$attrs = array(
    name" => "my_name",
    "age" => 30,
);

$res = $client->formatAttributes($attrs, $format = Aws\DynamoDb\Attribute::FORMAT_PUT);

print_r($res);

結果:

Array
(
    [name] => Array
        (
            [S] => my_name
        )

    [age] => Array
        (
            [N] => 30
        )

)

$format は下記が指定可能

  • Aws\DynamoDb\Attribute::FORMAT_PUT (put)
  • Aws\DynamoDb\Attribute::FORMAT_UPDATE (update)
  • Aws\DynamoDb\Attribute::FORMAT_EXPECTED (expected)

update, expected は下記のような形式になる。
形式が違ってめんどくさいよね…

Array
(
    [name] => Array 
        (
            [Value] => Array
                (
                    [S] => my_name
                )
    [age] => Array 
        (
            [Value] => Array
                (
                    [N] => 30
                )

)

putItem と updateItem の違い

  • putItemはレコード全体を指定したkey,valueで置き換える
  • updateItem は、レコードの一部のkey, valueを置き換えらえる
  • updateItem は、ADD, PUT, DELETE のアクションが行える。

putItem と updateItem の同じ部分

  • どちらも、新規登録、更新ができる
37
38
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
38