fuelphp で dynamodb
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日土曜日