Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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」などの機能があるみたいです.

参考にしたサイト

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした