Amazon DynamoDBについて

AWS SAAの勉強をしています。 Amazon DynamoDBについて調べたことをメモ。

aws.amazon.com

Amazon DynamoDBの概要

フルマネージド、サーバーレスのkey-value NoSQLデータベース。 NoSQLなので、SQLは使えない。セッションデータやユーザデータの保存に向いているらしい? key-valueもドキュメントデータモデルもサポートしている。なので、リレーショナルデータベースのように、データ構造が変わったときにテーブルを再定義しなくて良い。 データはすべてデフォルト暗号化される。オンデマンドバックアップで、ユーザが任意のタイミングでバックアップを作り出したり復元できたりする。

key-valueデータストア

キーの組み合わせでデータを管理するデータベース。 値には複雑なオブジェクトでもよい。ハッシュテーブルをイメージすれば大体あってそう。 セッションデータストアに向いている。一意のセッションIDに対応して、ユーザプロファイルやメッセージ、その他のデータなどを保存できる。ショッピングカートにも向いている。

メモリ内キー値ストアとは? | AWS

ドキュメントデータモデル

JSONのようなドキュメントでデータを管理するデータベース。JSONをそのまま突っ込めるので、アプリケーションの構築が容易? カタログデータベースとか、コンテンツ管理に使える。

DynamoDBのいろいろな機能

機能と言うか、出てきた単語についてずらずらと書く。

オンデマンドモードと読み込み/書き込みキャパシティーモード

DynamoDBの使用率が予測不能な場合はオンデマンドモードを選択して利用すると、自動でキャパシティーを調節してくれる。もちろん支払いは使用した分だけ。 逆に読み込み/書き込みキャパシティーモードは、使用するキャパシティがわかっているときに指定する。同じキャパシティで使用した場合は、オンデマンドモードのほうが高くつく。

DynamoDB Accelerator(DAX)

よく出てくるDAX。こいつはフルマネージドのインメモリキャッシュを使う。読み取りパフォーマンスを向上させる場合に使う。既存のDynamoDB APIコールと互換性あり。……DynamoDBとは別ってこと?

調べてみると、DynamoDB + DAXを使う場合は、アプリケーションはDAXへアクセスし、CACHEにデータが有る場合はそれを、そうでない場合はDAXAmazon DynamoDBにアクセスして、データを取ってくるみたい。 Application <-> DAX <-> Amazon DynamoDBのイメージ。

「キャッシュを使うから早いよ」という利点と、「キャッシュに溜め込む機能はAmazonで用意するよ」という嬉しさが有る。

DAXとElastiCacheの違い

そういえばElastiCacheもインメモリキャッシュで(NoSQLみたいな単語が出てきてた)な、と思って調べたら、わかりやすい記事があった。

dev.classmethod.jp

  • 可用性やセキュリティのためにDynamoDBのほうが遅い。
  • DynamoDBはリクエストのたびに課金されるので、時間単位課金のElastiCacheの方がコストを抑えられる。
  • DAXVPC内に置かないといけない、書き込んでもすぐに反映されない、などのマイナスが有る。

DynamoDB + DAXよりも高速に通信したい場合はElastiCacheを使ったほうがいいらしい。 各VPCDAXを置かないといけないなら高くついちゃう?

グローバルテーブル

複数リージョンにアプリケーションを展開している場合に、リージョン間のデータのレプリケーションを可能にする機能。 リージョン間でデータの同一性が保たれるので、いちいち別のリージョンにデータを見に行く必要がなくなる、うれしい!

DynamoDB ストリーム

DynamoDB内のテーブルが項目レベルで変更されたときに、その変更を時系列でキャプチャする機能。 これによって、例えばDynamoDBへの変更を他のアプリケーション等に共有することができる。 ストリームを読み取るには、DynamoDBストリームエンドポイントに接続して、APIリクエストを発行する必要がある。 DynamoDBストリームのデータ保持期限は24時間。24時間を超えたデータは削除される可能性がある。(可能性だけ?) なお、ストリームデータを手動で削除する手段は用意されていない。24時間経つまで待つ必要がある。

DynamoDB トランザクション

DynamoDBテーブルに対するオペレーションに対応して、なにか処理をして保存したりできるらしい。

おわり

他にもあったら書き足していきます。