シンプルかつ柔軟で高速なデータベースサービス
DynamoDBの特徴は、大きく以下の3点に集約できます。
「サーバーレスで管理不要」:
DynamoDBはAWSが運用管理する完全なサーバーレスのデータベースです。インフラのセットアップや管理の煩雑が不要となるため、多くのリソースを開発そのものに振り分けることができ、開発の速度と効率を向上することができます。
「データ管理方式の柔軟性」:
DynamoDBの特徴は、非構造化データを柔軟に扱えることです。RDSのように先に決まった構造化データの上でスキーマを決める必要はありません。JSON形式のような階層的なデータ(ドキュメントデータ)も扱えるため、DynamoDBの制約下に応じてユースケースにとって都合の良いデータ設計を行うことが可能です。
「高性能と高可用性」:
DynamoDBは、一桁ミリ秒という安定した高速アクセスと99.999%の可用性を実現しています。必要に応じて自動的にスケールし、オンデマンドキャパシティモードにより突発的なトラフィック増加にも対応。さらに、複数のデータセンターで自動的に冗長化されているため、災害時にも迅速な復旧が可能です。
リアルタイムデータ管理やIoTなどのユースケースにマッチ
エンジニアではない方やデータベースに詳しくない方には、NoSQLデータベースの用途が想像しづらいかもしれませんが、以下のような用途でDynamoDBは非常に効果的です。
ケース1 ― リアルタイムデータ管理:
DynamoDBは高速なパフォーマンスに加え、柔軟にクエリーに応じたデータ設計を実現できるため、リアルタイムのイベントデータの管理に非常に適しています。リアルタイムデータ管理が求められる場面として、例えばゲームのスコアボードやチャットアプリケーション、オンラインショッピングカートなどに適しています。
ケース2 ― IoTやメタデータ管理:
IoTデバイスのイベント管理やユーザー情報のメタデータ管理においても優れたパフォーマンスを発揮します。特に、高速なデータアクセスと永続性を兼ね備えた用途に適しています。例えば、車両のテレメトリデータやスマートホーム機器など、大量のデバイスからアップロードされるリアルタイムデータを保存し、後から分析したいケースなど、データの量や形式が多様なIoTソリューションにおいて便利なサービスです。
ケース3 ― 大規模なユーザー管理システム:
大量のユーザーデータを管理する必要があるSNSプラットフォームや、会員制のサービスにおいてもDynamoDBは活用されています。ユーザー認証情報やプロファイルデータを一元管理し、リアルタイムでの迅速なアクセスが求められる状況では、データベースのパフォーマンスがユーザー体験に直結してきます。こうしたサービスの多くで、DynamoDBは利用されています。ただし、大量のデータを管理する場合はそれに応じでコストも高くなるため、その点には注意が必要です。
DynamoDBを利用した開発でのポイントとその特徴
「キー設計の重要性」:
DynamoDBの性能を最大化するにはそのパーティションキーの設計が、もっとも重要です。DynamoDBは、多くのトラフィックを捌くことが出来るように、データをパーティションに分散配置し、それによってスループットを向上させる仕組みとなっています。
データは、そのパーティションキーに対してハッシュ関数を実行することで配置先のパーティションが決定されます。そして、パーティションあたりの性能は予め決まっていため、スケールさせるためにはデータが均一に各パーティションに分散できるようにキー設計を行う必要があります。
例えばIoTシステムなら、「デバイスID」をパーティションキー、「タイムスタンプ」をソートキーとして設計することで、特定デバイスのデータを時系列で効率的に取得できます。適切なキー設計により、データアクセスの最適化とシステム負荷の分散が実現でき、全体のパフォーマンスを向上させることができます。
「結果整合性モデルの採用」:
データの操作に関しては結果整合性モデルが基本となっており、常に一貫性を保証するわけではありません(強い整合性を選べるオプションもある)。そして、最終的には非同期でデータセンター間でコピーされて一貫性のある状態になります(Eventual Consistancy)。つまり常に一貫性が重要となるような決済処理などには不向きな反面、IoTで大量のデータを高速で処理したい場合などはそこまで一貫性を重視するケースも少ないでしょう。この結果整合性モデルを考慮して採用するユースケースを決める必要があります
「スケーラブルかつ管理不要」:
繰り返しになりますが、AWSが完全に基盤からソフトウェアまで管理するサーバーレスのため、サーバー管理やインフラ維持に手間をかけることなく利用できます。負荷が大きく変動するようなスケーリングにおいても手動操作が不要で、システムの開発においてもアプリケーションそのものに集中することができます。ただし、このスケーラビリティを最大化するにはそのキー設計が重要となります。
「コスト効率の良さ」:
DynamoDBは用途に応じた複数の料金体系があります。固定費を最小化したい場合は、利用量(ストレージ量とに応じた完全な従量課金制を選択することで、アクセス量の変動が大きいシステムでも効率的なコスト管理が可能です。また、アクセス頻度の低いデータ向けの低コストストレージ(Standard-IA)も用意されており、用途に応じた最適化が可能です。
「セキュリティとアクセス制御」:
DynamoDBは、AWS上のシステムにおけるユーザー管理を行う「AWS IAM」と統合されており、きめ細かなアクセス制御が可能です。特定のユーザーやサービスに対してのみアクセス権限を設定できるため、データのセキュリティを確保しながら運用できます。また、デフォルトでデータが暗号化されているため、機密性の高いデータを運用するシステムにおいても安心して利用可能です。
まとめ
DynamoDBは、高速なパフォーマンス性能を実現したNoSQLデータベースサービスです。高速なパフォーマンスに合わせて、スケーラビリティや冗長性といった多くの方がクラウドに求めるであろうポイントは押さえており、サーバーレスでシステム構築を行う際に有力なサービスのひとつです。
ユースケースで紹介したような用途において、インフラ管理の工数を削減したい、突発的なトラフィック増加に備えたいならば、DynamoDBは最適な選択肢です。
一方で、リレーショナルデータベースとはそのスキーマ設計や一貫性への保証など、データ設計における根本的な思想が異なっているので、DynamoDBのパフォーマンスやコストメリットを最大限に活かすためには、DynamoDBの思想に基づくデータ設計が必要となります。
弊社では、DynamoDBも含めたさまざまなサーバーレス開発の経験や、事業会社においてサーバーレス開発を内製化する取り組みのご支援を行ってきています。AWSでのデータベースの選定で困っている、DynamoDBを導入したけどパフォーマンスが出ない、または思ったほどコストが下がらない、といった悩みをお持ちの方、ぜひご相談ください。