
目次
DynamoDBのざっくりとして説明。イメージを明確にする。他のDBと比較してみる。
DynamoDBの特徴
- DynamoDBはデータ格納制限をして、高速にデータ処理ができるようにしたDB
- DynamoDBはJSON形式のデータを保存・処理するドキュメント型データベース
- JSON を使用して、Tags などの半構造化データを保存することが可能
- JSON ドキュメント内からデータを取得および操作を高速に実行することが可能
- DynamoDB はキーバリュー型のれ属した単純なデータ形式を高速で処理にするのに適している
- DynamoDBのTime-to-Live(TTL)メカニズムにより、アプリケーションのWebセッションを簡単に管理できる
- 主キーでインデックス付けされた構造化データを格納することができる
- 1Byteから最大400KBまでの範囲の項目への低レイテンシーの読み取りおよび書き込みアクセスが可能
- DynamoDBはデフォルトでバックアップが有効化されていない
DynamoDBの可用性
- デフォルト構成でマルチAZに分散されている
DynamoDBの処理速度
- 1 日に10 兆件以上のリクエストを処理することができる
- 毎秒 2,000 万件を超えるリクエスト処理が可能なNoSQL型のデータベース
DynamoDBが得意なこと
- メタデータの保存に最適なDB
- IoTデータやセッションデータ管理などに用いられる
DynamoDBでできないこと
- SQLクエリ処理を実行する
- 日付や時刻の型が無い(数値か文字列で記録するしかできない)
- 数値:タイムスタンプ
- 文字列:ISO 8601
DynamoDBの使い方ー具体例
ソースコード
参考サイト
DynamoDBストリームについて
DynamoDBストリームを有効化すると、、、
DynamoDBストリームを有効化することで、
DynamoDBテーブルへのデータ登録や更新などのイベントをトリガーとして、Lambda関数などを実行して処理することが可能です。
DynamoDBストリームを有効化すると、
DynamoDBのデータを取得することも可能ですが、定期的にデータ取得するような処理ではなく、イベント起動になります。
DynamoDBストリームを使用してDynamoDBテーブルへの変更ステータスが履歴として残すことができます。
また、これをモニタリングすることで、変更管理を実施できます。
過去24時間以内にそのテーブルのデータに対して行われた変更のストリームすべてにアクセス可能で、24時間経過したストリームデータは削除されます。
DynamoDBストリームを有効化した上で、その変更イベントを起点にしてメタデータを取得するといった処理をLambda関数などを利用して自動化することが可能です。
DynamoDBストリーム自体はモニタリングをするための機能ではなく、あくまでも変更情報をキャプチャして、その情報を別で利用するという使い方をします。
DynamoDBストリームの使い所は、クロスリージョンレプリケーションやゲーム・ソーシャルサイト等でのユーザの集計・分析などのための非同期処理などとなります。
CloudWatchがDynamoDBストリームをキャプチャしてモニタリングするといった設定は可能ですが、これはストリームの機能ではなく、CloudWatchのモニタリング機能となります。
ユースケース
DynamoDBにデータが登録されるとS3にメタデータが保存される仕組みを構築する
DynamoDBへのデータ登録後、自動でLambda関数を起動してメタデータを登録することが望ましい構成です
そのためには、DynamoDBストリームという仕組みを使うことで、DynamoDBテーブルへのデータ登録をトリガーにしてLambda関数を起動することができます。
Lambda関数は最大512MBまでのデータ容量を扱うことが可能です。
DynamoDBと連携できるサービス
AppSync
DynamoDBはリアルタイムのデータ集計処理に使用できる、耐久性、拡張性、および可用性の高いデータストアです。
AppSyncを使用して、DynamoDBのデータをリアルタイムで最新の状態に保つコラボレーションアプリを簡単に構築できます。
これにより、アプリケーションはAmazon DynamoDBのデータにアクセスしたり、EC2インスタンスやAWS Lambda関数がデータ処理を実行するなどの機能を実装することができます。
したがって、DynamoDBとAppSyncとを連携して、リアルタイム処理機能を実装することが可能です
EMR
DynamoDBとEMRの組合せにより、DynamoDBに蓄積されたビッグデータをEMRによって解析処理することができます。EMRはビッグデータ解析処理のApach Hadoopなどを実行できるサービスであり、リアルタイム行動分析やランキング処理にはAppSyncを利用することが最適です
Lambda
DynamoDBとLambdaによって、DynamoDBのデータを利用したランキング処理をLambdaによって実行することは可能ですが、AppSyncを使用したリアルタイム処理を利用することが望ましいです
API Gateway
DynamoDBとAPI Gatewayに加えて、Lambda関数を組み合わせれば、APIからDynamoDBのデータを呼び出すことができますが、本件の要件には適していません。
履歴保存について
データベースに保存されたデータ項目に対する追加・変更・削除の 発生時に履歴を保持するためにDynamoDBストリームを利用できます。
DynamoDBストリームはDynamoDB テーブルに保存された項目の変更をキャプチャすることができます。例えば、ユーザーがデータを DynamoDB テーブルに追加した際に、このイベントを起点にして、データ管理者にメールを送信してDynamoDBの変更を通知するといった機能を作ることができます。
DynamoDB ストリーム はDynamoDB テーブル内の項目レベルの変更の時系列シーケンスをキャプチャし、この情報を最大 24 時間ログに保存します
レスポンスを高速化するには
DynamoDB AcceleratorはDynamoDB 専用のインメモリ型のキャッシュクラスタを追加して、キャッシュからのレスポンスをミリ秒単位からマイクロ秒単位まで高速化することができます。
クエリ処理とは
DynamoDBグローバルセカンダリインデックスはクエリ処理の柔軟性を高めるための機能です。
スパイクを安価で回避するには
通常、DynamoDBはスケーラブルであり、かつDAXを利用することで性能を向上させることができますが、DAXはインメモリDBを利用するためコストが高いです。そのため、費用対効果の高いソリューションとしてはSQSキューによって処理を分散にすること方がコスト最適な対応となります
SQSは、あらゆる規模の分散ソフトウェアコンポーネントとマイクロサービス間で確実に通信するための完全に管理されたメッセージキューサービスです。それぞれが個別の機能を実行する個々のコンポーネントからアプリケーションを構築すると、スケーラビリティと信頼性が向上し、最新のアプリケーションのベストプラクティス設計になります。DynamoDBへの処理リクエストをSQSキューとしてDynamoDBへと通知する設定とすることで、DynamoDBは処理できないリクエストキューを待機させることができます
DynamoDB DAXを展開することで、スパイクを改善することができます。しかしながら、DAXはインメモリ型のキャッシュDB機能を追加するため、コスト最適な対応としてはSQSによる処理分散化を優先させます
SQSとの連携
SQSを使用するとクラウドアプリケーションのコンポーネントを分離して調整することで負荷を軽減することができるため対応としては適切です。
SQSを利用することで、キューイングによってDynamoDBへの集中的な処理を調整ことができます。
今回の要件は特定のデータ領域への処理集中という内容となっているため、DAXによるキャッシュ処理を有効化する方が効果的です。
SNSとの連携
SNSによるメッセージングもSQSと同様に、疎結合化を達成することはできます
その他の機能
DynamoDBをプロビジョンドスループット性能へと変更することで、予測可能なデータ処理に対する割り当てを変更することが可能です。
スケーリングについて
DynamoDBは、データ容量に対するオートスケーリングを有効化することなく、マネージド型サービスとして自動でデータ容量が拡張されます。
冗長化について
DynamoDBはグローバルにマルチリージョンに展開できる機能がありますが、マルチAZ構成は取れない。
料金はどのれくらいかかる?