LoginSignup
6
5

More than 5 years have passed since last update.

PHPからのDynamoDBアクセスを高速化する

Last updated at Posted at 2015-03-06

このドキュメント(Performance Guide)を見ていて、何かDynamoDBのアクセスをチューニングできないかと思って試してみたメモです。

試してみたのは、 下記の3種類とその組み合わせです。

  1. pecl の uri_templateを入れてみる
  2. validation を falseにしてみる
  3. http接続にする (httpsをやめる)

(httpにすると早くなるらしいというのは、どこかで見かけたのだけど、覚えてない…)

テスト内容

  • $client->getItem() で 1件取得 を1000回繰り返して、1件ごとに消費した秒数の平均を計算
  • Read Capacityは予め多めにしておく。

結果

パターン 平均秒数
normal 0.282
uri_template 0.262
validation=false 0.268
scheme=http 0.087

uri_template と、validation = false は少し早くなりました。
が、断然早くなったのは、「http接続にする」で、約3.2倍の速度がでました。

次に、上記の組み合わせで試してみました。

パターン 平均秒数
scheme=http, uri_template 0.058
scheme=http, uri_template, validation=false 0.056

http接続+uri_template にすると、通常の4.8倍程度の速度になりました。
validation=falseも組み合わせてみましたが、あまり変わらず。
何度か試していると逆に遅くなるケースもあり、誤差の範囲のようです。

DynamoDB-Performance-Test.png

コード

http接続にする

$client = Aws\DynamoDb\DynamoDbClient::factory(array(
    'region' => 'ap-northeast-1',
    'scheme' => 'http',
));

validation を offにする

$client = Aws\DynamoDb\DynamoDbClient::factory(array(
    'region' => 'ap-northeast-1',
    'validation' => false
));

uri_template

$ sudo pecl install uri_template
$ sudo echo "extension=uri_template.so" > /etc/php.d/uri_template.ini

まとめ

  • http接続 + uri_template にすると、通常の4.8倍くらいになるよ。
  • 当然ながら暗号化されないので、ご利用は自己責任で。

追記(2015/03/07)

DynamoDBへのアクセスに 200ミリsecとかかかってて、遅すぎじゃね?と思って調べたら、
Aws\DynamoDb\DynamoDbClient::factory でインスタンス生成して、初回のgetItemのみ、200msくらいかかって、それ以降は数msになった。

0.228
0.007
0.013
0.013
0.01
0.007
0.015
0.013
0.012
0.018

https でも http でも同様に2回め以降は 数msから数10msの範囲だったので、ほぼ差はみられなかった。

「初回の遅さ」が何に起因しているのか調査が必要。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5