fuelphp で dynamodb

29
FuelPHPで DynamoDB 小山哲志 @koyhoge Fuel&CIの集い 2013/10/12 1 20131012日土曜日

Upload: tetsuji-koyama

Post on 31-May-2015

3.369 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: FuelPHP で DynamoDB

FuelPHPでDynamoDB

小山哲志@koyhoge

Fuel&CIの集い 2013/10/1212013年10月12日土曜日

Page 2: FuelPHP で DynamoDB

about こいほげ

‣小山哲志 (こやま てつじ)‣プログラマー‣Twitter: @koyhoge‣facebook: http://facebook.com/koyhoge‣PHPユーザ会の中の人‣濃いヒゲ koyhige, 巨ほげ kyohoge とよく間違えられる

22013年10月12日土曜日

Page 3: FuelPHP で DynamoDB

AMNでFuelといえば

32013年10月12日土曜日

Page 4: FuelPHP で DynamoDB

‣FuelPHPの紹介を書きました42013年10月12日土曜日

Page 5: FuelPHP で DynamoDB

Amazon DynamoDB?

‣「フルマネージドNoSQLデータベースサービス」‣いわゆるKVS‣SSDに保存‣3のAZに自動リプリケーション‣プロビジョニングされたIO

52013年10月12日土曜日

Page 6: FuelPHP で DynamoDB

プロビジョニングIO?‣必要なスループットを指定‣テーブルを作成するとき‣もちろん後から変更可能‣例‣10 read/秒、3 write/秒‣1~10,000 (それ以上はフォーム申請)‣あとはAWSが良きに計らってくれる‣高い値を指定すると当然お値段も高くなる

62013年10月12日土曜日

Page 7: FuelPHP で DynamoDB

データ型

‣Number‣String‣Binary‣上記それぞれのSet‣NumberSet‣StringSet‣BinarySet

72013年10月12日土曜日

Page 8: FuelPHP で DynamoDB

プライマリーキー(単独)ハッシュキー

データ

Item

キーは以下のいずれか•Number•String•Binary

82013年10月12日土曜日

Page 9: FuelPHP で DynamoDB

プライマリーキー(複合)ハッシュキー

データ

Item

キーは以下のいずれか•Number•String•Binary

レンジキー

92013年10月12日土曜日

Page 10: FuelPHP で DynamoDB

dynamoutil

‣https://github.com/koyhoge/fuelphp-dynamoutil‣ドキュメント全然ない‣aws-sdk for phpが必要‣composer install

102013年10月12日土曜日

Page 11: FuelPHP で DynamoDB

composer.json

"require": { : , "aws/aws-sdk-php": "*"

112013年10月12日土曜日

Page 12: FuelPHP で DynamoDB

ファイル

‣bootstrap.php‣config‣dynamo_util.php - 設定の雛形‣classes‣dynamo_util.php - もろもろのutil‣table_base.php - テーブル親クラス‣sequence.php - シーケンスエミュレーション

122013年10月12日土曜日

Page 13: FuelPHP で DynamoDB

configreturn array( 'defaults' => array( // developer key 'key' => 'XXXXXXXXXXXXXXX',

// developer secret key 'secret' => 'xxxxxxxx',

// region where used 'region' => \Aws\Common\Enum\Region::TOKYO,

// table prefix 'table_prefix' => '', ),

// Default setup group 'default_setup' => 'default',

// Setup groups 'setups' => array( 'default' => array(), ), );

132013年10月12日土曜日

Page 14: FuelPHP で DynamoDB

使い方class TestTable extends \DynamoUtil\TableBase{ protected $tableName = 'test_tbl'; protected $keyAttrs = array( array( 'AttributeName' => 'id', 'AttributeType' => \Aws\DynamoDb\Enum\Type::NUMBER, 'KeyType' => \Aws\DynamoDb\Enum\KeyType::HASH, ), );}

142013年10月12日土曜日

Page 15: FuelPHP で DynamoDB

テーブル作成$test_table = new TestTable;

$throughput = 2;$test_table->create($throuput);

152013年10月12日土曜日

Page 16: FuelPHP で DynamoDB

書き込み$test_table = new TestTable;

$data = array( 'id' => 1, 'name' => 'John', 'family' => 'Titor',);

$test_table->put($data);

162013年10月12日土曜日

Page 17: FuelPHP で DynamoDB

読み込み

$key = array( 'id' => 1,);

$data = $test_table->get($key);

172013年10月12日土曜日

Page 18: FuelPHP で DynamoDB

更新$key = array( 'id' => 1,);

$vals = array( 'nickname' => 'time traveler',);

$data = $test_table->update($key, $vals);

182013年10月12日土曜日

Page 19: FuelPHP で DynamoDB

query

$key = array( 'id' => 1,);

$data = $test_table->query($key);

192013年10月12日土曜日

Page 20: FuelPHP で DynamoDB

scan

$conds = array( 'name' => 'John',);

$data = $test_table->scan($conds);

202013年10月12日土曜日

Page 21: FuelPHP で DynamoDB

queryとscan

‣query‣プライマリーキーによる検索‣scan‣全部のデータを舐めて、そこからフィルターで抽出

212013年10月12日土曜日

Page 22: FuelPHP で DynamoDB

シーケンスエミュレーション

‣SQLのSEQUENCE‣MySQLでいうところのSerial‣アトミックな数値カウンター‣ 'seq_' + シーケンス名というテーブルを作って、そこに格納

222013年10月12日土曜日

Page 23: FuelPHP で DynamoDB

シーケンスエミュレーション

$seq_user = \DynamoUtil\Sequence('user');$seq_user->create();

$cur_id = $seq_user->current();$next_id = $seq_user->next();

232013年10月12日土曜日

Page 24: FuelPHP で DynamoDB

おまけ:Packageの作り方

‣独自の名前空間を用意する‣namespace DynamoUtil;‣その名前空間に対するオートローダを定義

242013年10月12日土曜日

Page 25: FuelPHP で DynamoDB

ファイル

‣bootstrap.php‣config‣dynamo_util.php - 設定の雛形‣classes‣dynamo_util.php - もろもろのutil‣table_base.php - テーブル親クラス‣sequence.php - シーケンスエミュレーション

252013年10月12日土曜日

Page 26: FuelPHP で DynamoDB

bootstrap.php

Autoloader::add_namespace('DynamoUtil', __DIR__.'/classes/');

Autoloader::add_classes( array( 'DynamoUtil\\DynamoUtil' => __DIR__.'/classes/dynamo_util.php', 'DynamoUtil\\Exception' => __DIR__.'/classes/dynamo_util.php', 'DynamoUtil\\TableBase' => __DIR__.'/classes/table_base.php', 'DynamoUtil\\Sequence' => __DIR__.'/classes/sequence.php', ));

262013年10月12日土曜日

Page 27: FuelPHP で DynamoDB

まとめ

‣DynamoDB は RDBほど柔軟ではないですが、用途によってはバッチリ使えます‣スケーリングをAmazon任せにできるので楽ちん‣アクセスが少なければそんなにお高くない

272013年10月12日土曜日

Page 28: FuelPHP で DynamoDB

提供

ひとりの気持ち、ひとの気持ちアジャイルメディア・ネットワーク株式会社

282013年10月12日土曜日

Page 29: FuelPHP で DynamoDB

質問?

292013年10月12日土曜日