fuelphp で dynamodb

Post on 31-May-2015

3.369 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

FuelPHPでDynamoDB

小山哲志@koyhoge

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

about こいほげ

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

22013年10月12日土曜日

AMNでFuelといえば

32013年10月12日土曜日

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

Amazon DynamoDB?

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

52013年10月12日土曜日

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

62013年10月12日土曜日

データ型

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

72013年10月12日土曜日

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

データ

Item

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

82013年10月12日土曜日

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

データ

Item

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

レンジキー

92013年10月12日土曜日

dynamoutil

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

102013年10月12日土曜日

composer.json

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

112013年10月12日土曜日

ファイル

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

122013年10月12日土曜日

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日土曜日

使い方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日土曜日

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

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

152013年10月12日土曜日

書き込み$test_table = new TestTable;

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

$test_table->put($data);

162013年10月12日土曜日

読み込み

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

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

172013年10月12日土曜日

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

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

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

182013年10月12日土曜日

query

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

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

192013年10月12日土曜日

scan

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

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

202013年10月12日土曜日

queryとscan

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

212013年10月12日土曜日

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

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

222013年10月12日土曜日

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

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

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

232013年10月12日土曜日

おまけ:Packageの作り方

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

242013年10月12日土曜日

ファイル

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

252013年10月12日土曜日

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日土曜日

まとめ

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

272013年10月12日土曜日

提供

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

282013年10月12日土曜日

質問?

292013年10月12日土曜日

top related