【学習メモ】AWS Dynamo DB

概要


Dynamo DBはいわゆるNo SQLデータベースである。
No SQLの対としてリレーショナルデータベースがあり、AWSではRDSが該当する。

データ型


Dynamo DBはキーバリュー型でデータを扱う。
端的に言うと保存するデータ(バリュー)とそのデータを特定するための識別子(キー)をセットでデータを管理する。
メリットとしては既存のデータ構造に変更を加えることなく、データの追加を行える点があげられる。またシンプルな構造のため、複数のデータを組み合わせて分析するというよりも、単一のデータを格納、取得するというユースケースに適している。
パフォーマンス性に優れており、秒間2000万件のリクエストにも対応可能で、ストレージ容量にも制限がない。

キーバリュー型から派生した、ドキュメント型のデータを扱うこともできる。
ドキュメント型はJSON形式でデータを階層的に管理する。
さらに、DynamoDBはスキーマレスなデータベースである。
スキーマ(データベースの構造)がないことでより柔軟にデータベースの変更を行うことができる。(通常スキーマの変更やデータに対する修正作業など煩雑になる)
DynamoDBではプライマリキーを除き、スキーマの変更作業が不要である。

またDynamoDBはインデックスを作成可能で、テーブル内のデータへ高速にアクセスすることができるようになる。(スループットの向上)

可用性

DynamoDBはデータを自動で3つのAZに保存するため、対象が制に優れ、可用性が高い。
またデータのバックアップも可能で、任意のタイミングでバックアップを行うオンデマンドバックアップと自動でバックアップを行うポイントインタイムリカバリがある。ポイントインタイムリカバリはオンデマンドバックアップと異なり、差分バックアップが自動で取得される。(定期的)リカバリは35日前まで遡ることができる。
データ容量が増えてもストレージは自動スケーリングされるのでダウンタイムなく稼働できる。

性能

DynamoDBは、テーブルに対する書き込み、読み込み量と料金が関わっている。
課金形態は次の2つである。
・オンデマンドモード: 
書き込み読み込みのリクエスト単位で課金される
・プロビジョニングモード:
読み込み、書き込み量をキャパシティユニットという形で予約する設定を行う。これは1秒間にどのくらいの読み込み、書き込みをするかを予約するもので、その量に応じて課金される。(当然量が大きいほど高額になる)
WCU(書き込み): 最大1KBのデータを1秒間に1回の書き込み
RCU(読み込み): 最大4KBのデータを1秒間に1回の読み込み※データによっては2件

テーブル作成時にはどちらも5に設定されており、キャパシティユニットは後から変更可能だ。またアクセスに応じて自動スケーリングの機能もある。

またキャパシティユニットをあらかじめ100ユニット単位で1年ないし3年で予約する、リザーブドキャパシティを利用すると料金が割安になる。


データの整合性

DynamoDBは自動で3つのAZにデータを保存するが、その時、2つのAZのテーブルに書き込んだ時点で、完了と判断する。残りのAZのテーブルには後からレプリケートするが、その前にデータを参照する際AZ間のテーブルで不整合が発生する恐れがある。
そこでDynamoDBでは2つの読み込みモードがある。
①結果整合性のある読み込み(デフォルト)
読み込んだデータが最新でない場合を許容し、最終的には最新のデータを読み出す(書き込みからの時間超過による解決)
②強力な整合性のある読み込み
必ず最新のデータを読み込めるが、読み込み時のコストが2倍になり、レイテンシが高くなる恐れがある。

その他の機能

DynamoDB Streamsによってテーブルへの直近24時間の変更をログに保存して、見ることができるようにする。

またTime to live(TTL)機能があり、特定の時点で自動的にデータ項目を削除する。追加のコストや管理が不要でデータのライフサイクル管理が簡素化されて、ストレージの逼迫を防ぐ。

DynamoDB グローバルテーブルはDynamoDBテーブルを複数リージョンにまたがって運用するサービスである。
複数のリージョンにテーブルが自動的にレプリケートされ、ユーザは地理的に近いリージョンのテーブルに読み込みと書き込みを行う。
そのため高速な読み込み書き込みが可能になる。(エッジサービス?)
データのレプリケートは1秒以内に行われ、複数リージョンにデータが分散保存されるため高可用性を実現する。※レプリケート先のリージョンは指定する。

さらにDynamoDBはS3へのデータエクスポートが可能だ。機能としてテーブルデータを直接S3バケットに吐き出せる。この際にRCUは消費せず、テーブルやパフォーマンスへの影響はない。
※この機能は内部でポイントインタイムリカバリの前提となる継続的バックアップ機能を利用しているため、S3にエクスポートする対象のテーブルのポイントインタイムリカバリを有効にしておく必要がある。

DynamoDB Accelerator(DAX)は別記事にまとめる。




この記事が気に入ったらサポートをしてみませんか?