【AWS】DynamoDBとは?

 

DynamoDBとは?

DynamoDBの特徴

  • 1 日に 10 兆件以上のリクエストを処理することができるデータベース
  • 毎秒 2,000 万件を超えるリクエスト処理が可能なNoSQL型のデータベース
  • DynamoDB はキーバリュー型のれ属した単純なデータ形式を高速で処理にするのに適している
  • IoTデータやセッションデータ管理などに用いられれる
  • DynamoDBのTime-to-Live(TTL)メカニズムにより、アプリケーションのWebセッションを簡単に管理できる
  • 主キーでインデックス付けされた構造化データを格納することができる
  • 1バイトから最大400KBまでの範囲の項目への低レイテンシーの読み取りおよび書き込みアクセスが可能
  • メタデータの保存に最適なDB
  • SQLクエリ処理を実行することはできない

 

参考サイト

 

DynamoDBストリームについて

DynamoDBストリームの有効化

DynamoDBストリームを有効化することで、DynamoDBテーブルへのデータ登録や更新などのイベントをトリガーとして、Lambda関数などを実行して処理することが可能です。

DynamoDBストリームを有効化すると、DynamoDBのデータを取得することも可能ですが、定期的にデータ取得するような処理ではなく、イベント起動になります

DynamoDBストリームを使用してDynamoDBテーブルへの変更ステータスが履歴として残すことができます

また、これをモニタリングすることで、変更管理を実施できます。

過去24時間以内にそのテーブルのデータに対して行われた変更のストリームすべてにアクセス可能で、24時間経過したストリームデータは削除されます。

DynamoDBストリームを有効化した上で、その変更イベントを起点にしてメタデータを取得するといった処理をLambda関数などを利用して自動化することが可能です。

 

DynamoDBストリーム自体はモニタリングをするための機能ではなく、あくまでも変更情報をキャプチャして、その情報を別で利用するという使い方をします。

DynamoDBストリームの使い所は、クロスリージョンレプリケーションやゲーム・ソーシャルサイト等でのユーザの集計・分析などのための非同期処理などとなります。

CloudWatchDynamoDBストリームをキャプチャしてモニタリングするといった設定は可能ですが、これはストリームの機能ではなく、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構成は取れない

 

 

 

おすすめの記事