LoginSignup
1
0

More than 5 years have passed since last update.

DynamoDBを使ったデータの挿入、取り出し

Last updated at Posted at 2015-02-20

DynamoDBを使ってテーブルを作り, AWS SDK for PHPを使ってデータの挿入、取り出しを行ってみました.

AWS SDK for PHPのインストール

AWS SDKのインストールにはcomposerを用いました. まずはcomposer.jsonを作成します.

composer.json
{
  "require": {
    "aws/aws-sdk-php": "*"
  }
}

composer.jsonを書いた後, php composer.phar installを実行します.

認証情報ファイルの設定

次にAWSのアクセスキー, シークレットキー, リージョンの情報を書いたファイルを作成します.

include/cofig.phpファイルを作成します.

include/config.php
<?php
  return array(
      'includes' => array('_aws'),
      'services' => array(
          'default_settings' => array(
              'params' => array(
                  'key' => 'YOURアクセスキー',
                  'secret' => 'YOURシークレットキー',
                  'region' => 'ap-northeast-1'
                )
            )
        )
      );

以上で基本的な設定は終わりです. 次にDynamoDBにテーブルを作成していきます.

DynamoDBデーブルの作成

DynamoDBのAWS Consoleから作成していきます.
「create table」をクリックすると, 以下のような画面が出てきます.

スクリーンショット 2015-02-20 18.40.03.png

ここで「Table Name」にTeamと入力します.
次に「Primary Key Type」を指定します. これは「Hash and Range」か「Hash」のどちらかが選べます. 今回は「Hash and Range」を指定し, 上図のように値を入れます. 「Hash and Range」を指定した場合, この2つの値を合わせて一意のキーとなります.

この後の画面ではindexやthroughput capacityの設定が続きますが, 今回はこのまま「Continue」をします.

次にいよいよデータの挿入・取り出しを行っていきます.

Putを用いたデータの挿入

Dynamoでは各テーブルのレコードをItemといいます. Itemにはテーブル作成で指定したhash-key, range-keyの他にattributesという値を挿入することができます.
ファイルは以下のように作成します.

dynamo_put.php
<?php

// Composer Vender
require_once('vendor/autoload.php');

use Aws\Common\Aws;
use Aws\DynamoDbException\DynamoDbException;

// AWSクレデンシャル
$aws = Aws::factory('./include/config.php');

try {
  $client = $aws->get('dynamodb');

  $result = $client->putItem(array(
      'TableName' => 'Team',
      'Item' => $client->formatAttributes(array(
          'id' => 101,
          'memberid' => 1,
          'name' => 'Yuya',
          'language' => 'Japanese',
          'age' => 22,
        )),
    ));
} catch (DynamoDbException $e) {
  echo 'Not Success';
}

そして, 実行します.

php dynamo_put.php

attributeですが, 各アイテムごとに異なっても大丈夫です. 例として, 以下のようなものも大丈夫です.

dynamo_put2.php
<?php

// Composer Vender
require_once('vendor/autoload.php');

use Aws\Common\Aws;
use Aws\DynamoDbException\DynamoDbException;

// AWSクレデンシャル
$aws = Aws::factory('./include/config.php');

try {
  $client = $aws->get('dynamodb');

  $result = $client->putItem(array(
      'TableName' => 'Team',
      'Item' => $client->formatAttributes(array(
          'id' => 101,
          'memberid' => 2,
          'name' => 'Sam',
          'language' => 'English',
          'gender' => 'Male',
        )),
    ));
} catch (DynamoDbException $e) {
  echo 'Not Success';
}

次に値を取得していきます. 値の取得にはキーを指定するGetとテーブルの前アイテムを取得するScanとがあります.

データの取得

Get

Getでは, 以下のようにアイテムのhash-keyとrange-keyを指定して値を取得します.

dynamo_get.php
<?php

require_once('vendor/autoload.php');

use Aws\Common\Aws;
use Aws\DynamoDbException\DynamoDbException;

$aws = Aws::factory('./include/config.php');

try {
  $client = $aws->get('dynamodb');

  $result = $client->getItem(array(
      'ConsistentRead' => true,
      'TableName' => 'Team',

      'Key' => array(
          'id' => array('N' => 101),
          'memberid' => array('N' => 1)
        ),
      ));

  var_dump($result);
} catch (DynamoDbException $e) {
  echo 'Not Success';
}

ここで, 'N'が出てきますが, これはidやmemberidの型Numberによるものです. 型の対応は以下のようになります.

キー名 データの型
N Number
S String
B Binary
SS A set of Strings
NS A set of Numbers
BS A set of Binary

実行します.

php dynamo_get.php

配列の形でデータが取れていることがわかります.

Scan

コードは以下になります.

dynamo_scan.php
<?php

require_once('vendor/autoload.php');

use Aws\Common\Aws;
use Aws\DynamoDbException\DynamoDbException;

$aws = Aws::factory('./include/config.php');

try {
  $client = $aws->get('dynamodb');

  $result = $client->scan(array(
    'TableName' => 'Team',
  ));

  var_dump($result);

} catch (DynamoDbException $e) {
  echo 'Not Success';
}

実行します.

php dynamo_scan.php

これもアイテムすべてが配列の形で取得できます.

まとめ

以上のような感じでDynamoDBを使ってデータの挿入・取得をやってみました.
他にも「query」や「batchwriteitem」などの機能があるみたいです.

参考にしたサイト

今回以下のようなサイトを参考にしました.

1
0
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
1
0