Edited at

DynamoDBメモ (+PHP SDK2)

More than 3 years have passed since last update.


データ型

キー名
データ型
説明

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

http://docs.aws.amazon.com/aws-sdk-php/latest/class-Aws.DynamoDb.DynamoDbClient.html#_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

http://docs.aws.amazon.com/aws-sdk-php/latest/class-Aws.DynamoDb.DynamoDbClient.html#_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形式のデータ型に変換)

https://github.com/aws/aws-sdk-php/blob/master/src/Aws/DynamoDb/DynamoDbClient.php

※ 注意: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 の同じ部分


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