狠狠撸

狠狠撸Share a Scribd company logo
FuelPHPで
DynamoDB
小山哲志
@koyhoge
Fuel&CIの集い 2013/10/12
12013年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日土曜日
config
return array(
'defaults' => array(
// developer key
'key' => 'XXXXXXXXXXXXXXX',
// developer secret key
'secret' => 'xxxxxxxx',
// region where used
'region' => AwsCommonEnumRegion::TOKYO,
// table prefix
'table_prefix' => '',
),
// Default setup group
'default_setup' => 'default',
// Setup groups
'setups' => array(
'default' => array(),
),
);
132013年10月12日土曜日
使い方
class TestTable extends DynamoUtilTableBase
{
protected $tableName = 'test_tbl';
protected $keyAttrs = array(
array(
'AttributeName' => 'id',
'AttributeType' =>
AwsDynamoDbEnumType::NUMBER,
'KeyType' =>
AwsDynamoDbEnumKeyType::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 = DynamoUtilSequence('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(
'DynamoUtilDynamoUtil' => __DIR__.'/classes/dynamo_util.php',
'DynamoUtilException' => __DIR__.'/classes/dynamo_util.php',
'DynamoUtilTableBase' => __DIR__.'/classes/table_base.php',
'DynamoUtilSequence' => __DIR__.'/classes/sequence.php',
));
262013年10月12日土曜日
まとめ
?DynamoDB は RDBほど柔軟ではないですが、
用途によってはバッチリ使えます
?スケーリングをAmazon任せにできるので楽ち
ん
?アクセスが少なければそんなにお高くない
272013年10月12日土曜日
提供
ひとりの気持ち、ひとの気持ち
アジャイルメディア?ネットワーク株式会社
282013年10月12日土曜日
質問?
292013年10月12日土曜日

More Related Content

FuelPHP で DynamoDB