DynamoDB Basic information

DynamoDBの基本情報。

特徴

  • ハイスケーラブル(高い拡張性)
  • 低レイテンシー(少ない遅延)
  • 高可用性
  • シンプルなAPI
  • ストレージが無制限
  • 運用管理必要なし

信頼性・可用性

DynamoDBはSPOF(障害が発生したらシステムが止まる箇所)が存在しない構成になっているため、可用性が高い。利用者はDynamoDBのダウンを心配することなくストレージを利用することができる。また、保存されたデータは同リージョン内で数十km以上離れた3箇所のAZに保存されるため、信頼性も高い。

ストレージは必要に応じて自動的にパーティショニングされ、低レイテンシーを保つ設計にもなっている。例えば、1つのハッシュキーに対して大量のデータを保存するような利用方法をした場合、ハッシュキー1つに対して2つのノードを利用させるようなアルゴリズムが組まれている。(非効率になるので、この機能に期待して1つのハッシュキーにアイテムを集中させるべきではない)

ストレージ

データ量の制限は存在しない。 データセットのサイズが増えると、保存要件に対応するために十分な数のマシンリソースにデータが自動的に分散される仕組みになっているので、ディスクやノードの増設作業は一切不要。

整合性モデル

書き込みでは、3つのAZのうち少なくとも2つのAZでの書き込み完了確認が取れた時点で完了となる。そのため通常の読み込みでは最新の書き込み結果が反映されない可能性がある。(利用者が気にしなければならないほどの大きなレイテンシではない)

しかし読み込みではConsistent Readオプションを付けたリクエストする送信することで、Read Capacity Unitを2倍消費して強力な結果整合性のある読み込みが可能となっている。DynamoDBがこのオプションが付いたConsistent Readリクエストを受け取ると、リクエストを受け取る前までのWriteがすべて反映されたレスポンスを保証してくれるため、最新の書き込みが漏れることはない。

料金

DynamoDBの料金は主に3つの要素で決定される。プロビジョンドスループットが2つと、データストレージ利用料での料金だ。

  • 書き込みキャパシティーユニットの数 1WCU 0.47USD/月
  • 読み込みキャパシティーユニットの数 1RCU 0.09USD/月
  • データストレージ使用料 1GB 0.25USD/月

大規模に利用するのであればキャパシティーユニットの事前予約(リザーブドキャパシティ)による割引も利用できる。

また、公式には月の料金しか記載されていないが、料金は全て分か秒で割られて課金されているはず。

キャパシティーユニットの料金計算は単純で、設定したぶんだけそのまま課金される。1つのWCUは毎秒1回の書き込みが可能で、1つのRCUは毎秒2回の読み込みをが可能。想定されるリクエストによってテーブルに適用するキャパシティーユニットの数を変更する必要がある。実質、WCUはRCUの10倍ほどの値段設定になっていて少し高い。

毎秒10回の書き込みが行われるテーブルには10WCU、毎秒10回の読み込みの場合は5RCUを設定する。単純に計算すると1WCUでも月に259万2000件書き込みできるが、1秒間に2回書き込みが来るかもしれない場合はバッファとして多めにWCUを設定しておくこと。

データストレージの料金計算も単純で、保存している容量ぶんだけ課金される。データストレージが10GBだったら2.5USD。ただし、月あたり初めの25GBは無料。

DynamoDBは課金するほど強くなる

得意処理と、苦手処理の解決

DynamoDBはシャーディングを利用したKVSなので負荷分散は得意であり、Amazonの大規模なデータセンターのおかげでデータの信頼性・保全性はとても高い。しかし、KVSであるが故に苦手な処理も多い。(速度と自由度を求め、柔軟性を捨てたKVSの宿命である)

苦手な処理には例えば、次ようなものがある。

  • 検索(せいぜい、レンジキーで範囲検索できる程度)
  • 集計・分析(RDBのように柔軟な集計は行えない)
  • プライマリキー以外のインデックスを貼れない
    • → RDBと役割分担で解決できる
    • → データ解析にはAWS EMRを使える
  • 大きなデータの保存(1アイテム64KBまでの制限)
    • → 大きなデータはS3に保存、DyanamoDBはインデックス保持に徹する
  • トランザクションが存在しない(複数アイテムを一貫性を保ったまま同時に更新できない)
    • → AWS SQS(処理の完遂保証)を利用することで、擬似的に実現可能

課金額以上の負荷(WCU数不足)、ネットワークエラー、エンドポイント側障害などによって全てのレコード操作は失敗する可能性があるため、絶対に処理の完遂保証までしたい場合はAWS SQSなどを利用する必要がある。

用語解説

DynamoDB

キャパシティーユニット

Item

Attribute

Hash Key

Range Key

WIP

results matching ""

    No results matching ""