人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

AWSのDynamoDBの基本的な質問です。試しに、最小の設定でテーブルを作ってみる為に
プロビジョニングされたキャパシティの読み込み容量ユニットに1(テーブル)を設定しました。
(書き込みにも1を設定してみました。これでなんと 一か月 0.67$ )
説明書によると、1秒間あたりの読み込み回数が 読み込み容量ユニットであるとの説明があるのですが
Lambdaから getItemをfor文で60回呼び出してみたのですが どう考えても1秒間に1回以上 呼び出せてしまっています。どういうことでしょう (?_?)

●質問者: nekomilk
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● a-kuma3
●50ポイント

AWS DynamoDB では、strongly consistent read というのと、eventually consistent read というのがあるみたいです。
GetItem などでは、パラメータで指定することで strongly consistent read な要求ができる、と。

Strongly Consistent Reads

When you issue a strongly consistent read request, DynamoDB returns a response with the most up-to-date data that reflects updates by all prior related write operations to which DynamoDB returned a successful response. A strongly consistent read might be less available in the case of a network delay or outage. For the GetItem, Query or Scan operations, you can request a strongly consistent read result by specifying optional parameters in your request.

Supported Operations in DynamoDB - Amazon DynamoDB

Capacity Unit による制限も、それぞれで違います。

Capacity Unit Sizes

One read capacity unit = one strongly consistent read per second, or two eventually consistent reads per second, for items up 4 KB in size.

Limits in DynamoDB - Amazon DynamoDB

特に意識してないなら、試してみたコードでは eventually consistent read な要求になっていたのだと思います。
「どう考えても1秒間に1回以上 呼び出せてしまっています」というのは、1秒間に 2回くらい呼び出せているということじゃないか、と想像します。


nekomilkさんのコメント
↓ログを確認してみたのですが、2回どころか (応答が1秒間に)22個くらいあって やっぱりよくわからないです。getItemは成功していてデータもちゃんと取れています。 うーん・・。 2016-02-16T00:06:13.021Z 2016-02-16T00:06:13.022Z 2016-02-16T00:06:13.023Z 2016-02-16T00:06:13.082Z 2016-02-16T00:06:13.084Z 2016-02-16T00:06:13.141Z 2016-02-16T00:06:13.143Z 2016-02-16T00:06:13.201Z 2016-02-16T00:06:13.203Z 2016-02-16T00:06:13.240Z 2016-02-16T00:06:13.361Z 2016-02-16T00:06:13.363Z 2016-02-16T00:06:13.364Z 2016-02-16T00:06:13.401Z 2016-02-16T00:06:13.402Z 2016-02-16T00:06:13.403Z 2016-02-16T00:06:13.404Z 2016-02-16T00:06:13.461Z 2016-02-16T00:06:13.461Z 2016-02-16T00:06:13.463Z 2016-02-16T00:06:13.463Z 2016-02-16T00:06:13.520Z

a-kuma3さんのコメント
No.2 の回答を読んで、ドキュメントを読み直しました。 >http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.Bursting:title> ** Use Burst Capacity Sparingly DynamoDB provides some flexibility in the per-partition throughput provisioning. When you are not fully utilizing a partition's throughput, DynamoDB reserves a portion of your unused capacity for later bursts of throughput usage. DynamoDB currently reserves up five minutes (300 seconds) of unused read and write capacity. << 5分間の使われなかった capacity を使いまわせるみたいです。 多分、eventually consistent read になっていると思うので、5分で最大 600 リクエスト処理できるかも。

nekomilkさんのコメント
な、なるほど!!!

nekomilkさんのコメント
おまけとかな感じで、アクセスできてるのかと思いました。ありがとうございました!

2 ● y-kawaz
●50ポイント

DynamoDBのキャパシティーはバースト出来ます。
なので散発的な場合は、秒単位で見たキャパ以上のアクセスが可能です。
ただしそれが継続するとクエリがDENYされて実行できなくなるはずです。
例えば、1分間に60req/secを1回だけ行うのなら大丈夫ですが、2req/secの利用ペースを10分間ずっと継続とかは出来なかったはずです。

恐らくは CloudWatch の数分単位のメトリクスを使った平均read/writeがキャパを超えたかどうかで判定してるんだと思います。
スパイクアクセス時にバーストしてくれるのは助かるので利用者にとっては無駄なキャパシティを確保する必要が無いので良い仕様だと思います。
ただしキャパオーバーを放っておくと突然使えなくなるのでCloudWatchのメトリクス値には注意するようにしましょう。

DynamoDBコンソールのメトリクスの情報アイコンのポップアップ内にもそう書いてありますね。
f:id:y-kawaz:20160217145432p:image


nekomilkさんのコメント
なるほどですね! とてもしっくり来ました!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ