DynamoDBLocalとAWS SDK for PHP2でごにょごにょする2 - create table

[DynamoDBLocalとAWS SDK for PHP2でごにょごにょする](http://qiita.com/duke-gonorego/items/4bcd9d8c409d4ad2bf89)にてDynamoDB Localへの接続確認ができました。

次は実際にテーブルを作ってみようと思います。

#### 環境
---
 * VirtualBox 4.3
 * ubuntu 14.04
 * PHP 5.5.9-1ubuntu4.5 (cli)

#### テーブルの設計
---
次のようなテーブルを作ってみます。

userテーブル

|**user_id**|`int`|
|---|---|
|**customer_id**|`int`|

#### テーブルの作成
---

```php:CreateTable.class.php
<?php
require_once 'DynamoDB.class.php';
class CreateTable {
    private $dynamo;
    public function __construct() {
        $this->dynamo = DynamoDB::conn();
    }

    public function execute() {
        $schema = array(
            'TableName' => 'user',
            'AttributeDefinitions' => array(
                array(
                    'AttributeName' => 'user_id',
                    'AttributeType' => 'N'
                ),
                array(
                    'AttributeName' => 'customer_id',
                    'AttributeType' => 'N'
                )
            ),
            'KeySchema' => array(
                array(
                    'AttributeName' => 'user_id',
                    'KeyType'       => 'HASH'
                ),
                array(                                                                                                                              
                    'AttributeName' => 'customer_id',
                    'KeyType'       => 'RANGE'
               )
            ),
            'ProvisionedThroughput' => array(
                'ReadCapacityUnits'  => 10,
                'WriteCapacityUnits' => 10
            )
        );

        $this->dynamo->createTable($schema);

        // 確認
        $param = array(
            'TableName' => 'user'
        );

        try {
            $result = $this->dynamo->describeTable($param);
            var_dump($result);
        } catch (DynamoDbException $e) {
            print $e;
        }
    }
}
$createTable = new CreateTable;
$createTable->execute();
```

#### 実行
---

```
$ php CreateTable.class.php 
object(Guzzle\Service\Resource\Model)#65 (2) {
  ["structure":protected]=>
  NULL
  ["data":protected]=>
  array(1) {
    ["Table"]=>
    array(8) {
      ["AttributeDefinitions"]=>
      array(2) {
        [0]=>
        array(2) {
          ["AttributeName"]=>
          string(7) "user_id"
          ["AttributeType"]=>
          string(1) "N"
        }
        [1]=>
        array(2) {
          ["AttributeName"]=>
          string(11) "customer_id"
          ["AttributeType"]=>
          string(1) "N"
        }
      }
      ["TableName"]=>
      string(4) "user"
      ["KeySchema"]=>
      array(2) {
        [0]=>
        array(2) {
          ["AttributeName"]=>
          string(7) "user_id"
          ["KeyType"]=>
          string(4) "HASH"
        }
        [1]=>
        array(2) {
          ["AttributeName"]=>
          string(11) "customer_id"
          ["KeyType"]=>
          string(5) "RANGE"
        }
      }
      ["TableStatus"]=>
      string(6) "ACTIVE"
      ["CreationDateTime"]=>
      float(1425270735.763)
      ["ProvisionedThroughput"]=>
      array(3) {
        ["NumberOfDecreasesToday"]=>
        int(0)
        ["ReadCapacityUnits"]=>
        int(10)
        ["WriteCapacityUnits"]=>
        int(10)
      }
      ["TableSizeBytes"]=>
      int(0)
      ["ItemCount"]=>
      int(0)
    }
  }
}
```

なにやら作成されたようです。

#### create時の各パラメータ
---
 * TableName：作成するテーブル名称
 * AttributeDefinitions：属性の設定。
    * AttributeName：属性名。(カラム名称みたいなもん)
    * AttributeType：属性の型。今回は「N(Numeric)」を指定
 * KeySchema：検索時に利用するキー設定。
    * AttributeName：属性名。(AttributeDefinitionsの値と合わせる)
    * KeyType：キータイプ。HASHとRANGEがある。キーを1つだけ指定したい場合はHASHのみだが、今回は「user_id」と「customer_id」との複合キーにしたかったので、一方をHASHに、一方をRANGEにした
 * ProvisionedThroughput：(いまいちピンと来ない。。[DynamoDB プロビジョンドスループット](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-provisionedthroughput.html))

次はデータを登録してみます。