見出し画像

AWS_DynamoDBの概要 #375

DynamoDBとは、AWSの代表的なNoSQL型データベースです。
今回はその概要について整理したいと思います。

DynamoDBとは

IoTやWebセッションなどのストリーミングデータを利用した「リアルタイムデータ処理」などに最適なデータベースとして利用する、NoSQL型データベースです。「テーブル -> 項目 -> 属性」という設計になっています。

また、DynamoDBはワイドカラムのキーバリュー型で、キーに対するバリューのCRUD操作が可能です。ただしJOIN / TRANSACTION / COMMIT / ROLLBACKはできません。

容量に実用的な制限はありませんが、1データあたり400KBが上限という特徴があるため、画像などの大容量データの保存には向いていません。

大量データを高速処理するため、パーティショニングによる分散処理を実施しています。


DynamoDBのユースケース

リアルタイムデータ処理にDynamoDBですが、具体的に以下のようなユースケースがあります。

IoT等のビッグデータ処理

IoT等で発生するキーバリュー型のシーケンシャルな(連続的な、順次的な)データを収集・蓄積・分析に向いています。Amazon EMRのHadoop処理(分散処理)と連携してビッグデータ処理も可能です。

セッションデータ・メタデータ・ユーザー行動データ

セッションデータやメタデータ等、アプリ上でシンプルなデータを蓄積できます。それらのデータをリアルタイムで高パフォーマンスに処理可能です。

バックエンドデータ処理

モバイルアプリのバックエンド / バッチ処理のロック管理 / フラッシュマーケティング / ストレージのインデックス等に使用できます。


DynamoDBの性能

DynamoDBは完全マネージド型のNoSQLデータベースサービスです。冒頭に述べた通り1データあたり400KBが上限という制約があり、画像などの大きなデータは格納できませんが、その制約を考慮しても驚くべき性能を持っています。

ストレージの容量制限がない

まずテーブルのサイズに実用的な上限がありません。テーブル内の項目数やバイト数が無制限です(1データあたり400KBという制限はある)。

低レイテンシー

負荷が高くなっても応答速度が低下しません。1桁のミリ秒レイテンシーを実現しています。DAXというインメモリキャッシュを活用すれば更に速められます。

高可用性

SPOF (Single Point Of Failer) がなく、データは3箇所のAZに保存されます。

メンテナンスフリー

マネージド型のため当然メンテナンスは不要です。CloudWatchで運用されます。


DynamoDBの整合性モデル

書き込みと読み取りでそれぞれ以下のようになっています。

書き込みの整合性モデル

少なくとも2つのAZでの書き込み完了が確認された時点で完了

読み取りの整合性モデル

【デフォルト】
結果整合性モデル(最新の書き込み結果が反映されない可能性がある)

【オプション】
強い整合性モデル(GetItem, Query, Scanで指定可能)


DynamoDBのインデックス

ハッシュキーとレンジキーという2種類のプライマリーキーと、LSIとGSIというセカンダリインデックスがあります。

ハッシュキー

データを一意に特定するためのIDなどで、テーブル作成時に1つの属性を選び、ハッシュキーとして宣言します。分散処理のためのパーティションを決定するハッシュ関数のキーです

レンジキー

ハッシュキーにレンジを加えたもので、複合キーとも呼ばれます。テーブル作成時に2つの属性を選び、1つをハッシュキーとして、もう1つをレンジキーとして宣言します。2つの値の組み合わせで1つの項目を特定します。

LSI (Local Secondary Index)

複合キーテーブルにのみ設定可能なインデックスです。パーティションキーを上記で指定したうえで、別の規格のインデックスとなり、クエリ検索に利用できます。

GSI (Global Secondary Index)

インデックス用に新たにパーティションキーとソートキーを指定する検索方式です。ハッシュキーテーブルと複合キーテーブルの両方に設定できます。ハッシュキーの代わりになるため、ハッシュキーを跨いで物理パーティションにとらわれない検索が可能です。


DynamoDBストリーム

DynamoDBの機能で、テーブルに保存された項目の追加・変更・削除の発生時の履歴をキャプチャできます。過去24時間のデータ変更の履歴を保存し、24時間経過すると削除されます。ハッシュキーが異なる場合は順番が前後する可能性があるので注意です。

DynamoDBストリームを活用することで、データ変更をトリガーとして処理を実行する機能を作れます。例えばデータ更新に応じた通知処理や、キャプションをトリガーとしたクロスリージョンレプリケーションの実施などです。


DAX (DynamoDB Accelerator)

DAXはDynamoDBにインメモリキャッシュ型の機能を付与します。これによる高速なインメモリパフォーマンスが可能になり、1秒あたりのリクエスト数が数百万件になる場合でも、ミリセカンドからマイクロセカンドへ向上できます。


バックアップとリカバリ

DynamoDBでは、パフォーマンスに影響なく数百TBのバックアップを実行可能です。

オンデマンドバックアップ

任意のタイミングでテーブルの完全なバックアップを作成します。長期間の保存とアーカイブを実施します。

ポイントインタイムリカバリ

バックアップを継続的に実施し、任意のタイミングでリカバリできるようにします。過去35日間の任意の時点にテーブルを復元可能です。


ここまでお読みいただきありがとうございました!!


参考

https://www.udemy.com/share/101WKk3@6r7OCuN_3Cv30ZU2rEJ9JUFRjuyQqcu9-y_1ZPuwsGNRMnByaDiqGmhntuGy9OwdQQ==/


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