高速で柔軟な NoSQL データベースサービス。Amazon DynamoDB をグラレコで解説

2022-06-01
AWS グラレコ解説

Author : 米倉 裕基 (監修 : 堤 勇人)

※ 本連載では、様々な AWS サービスをグラフィックレコーディングで紹介する awsgeek.com を、日本語に翻訳し、図の解説をしていきます。awsgeek.com は 、Jerry Hargrove 氏が運営しているサイトです。

これまでのグラレコ解説はこちら »

builders.flash 読者のみなさん、こんにちは ! テクニカルライターの米倉裕基と申します。

本記事では、ハイパフォーマンスなアプリケーションをあらゆる規模で実行するために設計された、フルマネージドかつサーバーレス なキーバリューストア型の NoSQL データベース「Amazon DynamoDB」(以下 DynamoDB) をご紹介します。


NoSQL とは

DynamoDB 独自の機能を知る前に、NoSQL データベースについてご紹介します。NoSQL を詳しく知ることで、DynamoDB の特性を理解しやすくなります。

NoSQL という用語は Not Only SQL の略と言われており、この SQL とは伝統的なリレーショナルデータベース (RDB) を指します。つまり NoSQL は、特定のデータベースの種類というよりも、RDB 以外のデータベース全般を意味します

そのため、一言に NoSQL といっても、キーバリューストア型、ドキュメント型、グラフ型、インメモリ型などさまざまな種類があり、DynamoDB は「キーバリューストア型」にカテゴライズされる NoSQL データベースになります。

img_awsgeek-dynamodb_01

クリックすると拡大します

「キーバリューストア型」のデータベースは、シンプルな識別子 (キー) と値 (バリュー) の組み合わせでデータを管理します。複雑なスキーマを持たないため、不定形のデータを柔軟に格納できます。またデータの読み込みや書き込み処理がシンプルなため、高速なパフォーマンスを実現できます。

その反面、SQL を使った高度な検索が行えないため、複雑で定形的な構造を持つデータの格納には向きません。キーバリューストア型の NoSQL の具体的な活用シーンは、ウェブアプリケーションのセッション情報や、EC サイトのショッピングカート情報、IoT 機器から収集したビッグデータ、ゲームや Web 広告のユーザー行動履歴など、大量の不定形なデータを高速に処理する場面に向いています。

AWS が提供する NoSQL データベースは、DynamoDB (キーバリューストア型) の他にも、 Amazon DocumentDB (ドキュメント型) や、Amazon Neptune (グラフ型)、Amazon MemoryDB for Redis (インメモリ型) などがあります。AWS が提供する NoSQL データベースについて詳しくは、AWS 公式サイトの「NoSQL とは」をご覧ください。

DynamoDB は、キーバリューストア型の NoSQL データベースの機能を備えながら、スケーラビリティや可用性、セキュリティなどの面で特徴を持っています。
本記事では、DynamoDB の主な機能や特徴を以下の項目に分けてご説明します。

  1. 基本機能
  2. スケーラブル
  3. 可用性
  4. セキュリティ
  5. 料金体系

それでは、項目ごとに詳しく見ていきましょう。


1. 基本機能

DynamoDB には、パーティションキャパシティーユニットなど DynamoDB を特徴づける基本的な機能や概念があります。ここでは、「格納できるデータの種類」、「パーティションによるデータの分散保存」、「テーブルの構造」の順で、DynamoDB の基本機能をご説明します。

img_awsgeek-dynamodb_02

クリックすると拡大します

格納できるデータの種類

DynamoDB は、文字列や数値、ブール値などの保存だけでなく、JSON や XML などの半構造化データを、リスト・マップ構造を維持したまま格納できます。そのため、DynamoDB はキーバリューストア型の NoSQL データベースであると同時に、ドキュメントストア型のデータベースとしても利用できます。

パーティションによるデータの分散保存

DynamoDB では、データをパーティションと呼ばれる内部で分散されているリソースに保存します。パーティションごとに格納できるデータの最大容量は 10 GB です。また、パーティションごとで利用できるスループットにも上限が決まっており、読み取りキャパシティーユニット (RCU) は最大 3,000、書き込みキャパシティーユニット (WCU) は 1,000 です。

キャパシティーユニットとは :
1 秒間に消費する読み込み / 書き込みの処理量を指します。読み込みキャパシティーユニットは RCU (Read Capacity Unit) 、書き込みキャパシティーユニットは WCU (Write Capacity Unit) と表記します。
DynamoDB では、キャパシティーユニット単位で料金が発生します。予想される RCU と WCU を予約してコストを最適化するプロビジョンドモードと、実際のリクエスト数に応じて従量課金で料金が発生するオンデマンドモードがあり、ユースケースに応じて選択できます。

DynamoDB は、パーティションが許容するデータサイズやスループットを超過すると、自動でパーティションが増え、負荷を分散する仕組みを備えています。複数のパーティション間で分散的にデータを管理することで、特定のパーティションへの過度なアクセスの集中を防ぎ、項目の読み込み / 書き込みを安定して処理することができます。

テーブルの構造

DynamoDB は、他のデータベース同様テーブルにデータを格納します。テーブル項目の集合であり、項目属性の集合です。属性には、データを識別する一意のキーであるプライマリキーと、レコードと呼ばれるデータ本体があります。項目の最大サイズは 400 KB です。

プライマリキーは以下の 2 種類から選択できます。

プライマリキー

説明

パーティションキー

項目を特定するための 1 ~ 2048 バイトの文字列です。このオプションでは、パーティションキーのみをプライマリキーとして利用します。

複合プライマリキー
(パーティションキー + ソートキー)

パーティションキーに加えて、もう一つ 1 ~ 1024 バイトの一意のソートキーを 2番目のプライマリキーとして利用します。ソートキーにより、同じパーティションキーを共有するすべての項目をソートまたは検索できます。

 

プライマリキーだけでは十分な検索要件を満たさない場合、ローカルセカンダリインデックス (LSI) とグローバルセカンダリインデックス (GSI) を指定することで、テーブルではカバーしきれない高度な検索を実現できます。セカンダリインデックスについて詳しくは、Amazon DynamoDB デベロッパーガイドの「セカンダリインデックスを使用したデータアクセス性の向上」をご覧ください。


2. スケーラブル

DynamoDB は、あらゆる規模のテーブルを複数のパーティションに水平スケールすることでパフォーマンスを維持します。水平スケーリングによるテーブルの分散管理は、テーブル構造の堅牢性と一貫性を重んじる RDB では難しく、分散管理を前提に設計されている DynamoDB だからこそ実現できます。

この高いスケーラビリティによって、DynamoDB は 1 日あたり 10 兆以上 (ピーク時には、1 秒あたり 2,000 万以上) のリクエストを 1 桁ミリ秒という速度で処理します。

データを分散保存するために最低限必要なパーティションの個数は、テーブルのサイズとスループットで決まります。

img_awsgeek-dynamodb_03

クリックすると拡大します

テーブルサイズによるパーティション個数

テーブルサイズが、パーティションが保存できる最大サイズ (10 GB) を超過すると自動でパーティションが増え、データが分散されます。テーブルサイズを 10 GB で割った値が、最低限必要なパーティションの個数になります。

テーブルサイズが 25 GB の場合 :
15 GB (テーブルサイズ) / 10 GB (パーティションの最大サイズ) = 1.5
※ 1.5 を繰り上げた 2 がパーティションの個数

スループットによるパーティション個数

プロビジョンドモードの場合、指定した RCU と WCU によってパーティションの個数が決まります。具体的には、RCU を 3,000 で割った数と WCU を 1,000 で割った数を足した値が、最低限必要なパーティションの個数になります。

RCU が 1,500 / WCU が 1000 の場合 :
(1500 RCU / 3000) + (1000 WCU / 1000) = 1.5
※ 1.5 を繰り上げた 2 がパーティションの個数

また、DynamoDB テーブルの不均衡なワークロードを適切に処理する仕組みとして、アダプティブキャパシティーという機能があります。

アダプティブキャパシティーには、アクセス頻度の高い項目が同一パーティションに複数存在した場合、自動で複数パーティションに分散し、特定のパーティションへのスループットの集中を避ける機能があります。このような、パーティションごとのアクティビティを均一化する仕組みについて詳しくは、Amazon DynamoDB デベロッパーガイドの「パーティションキーを効率的に設計し、使用するためのベストプラクティス」をご覧ください。


3. 可用性

DynamoDB は可用性を重視しており、データの耐障害性とバックアップのニーズに対応できるように複数の機能を提供しています。

ここでは、DynamoDB の可用性を担保する「データレプリケーション」と「DynamoDB Streams」、「グローバルテーブル」という 3 つの機能について説明します。

img_awsgeek-dynamodb_04

クリックすると拡大します

データレプリケーション

DynamoDB は単一障害点 (SPOF) を持たない構成になっていて、自動で同一リージョン内の 3 つのアベイラビリティーゾーンにデータをコピー (レプリケーション) します。

このデータレプリケーション機能により、予期しないサーバー障害やアベイラビリティーゾーンの停止からデータを保護します。

DynamoDB Streams

DynamoDB Streams は、過去 24 時間に DynamoDB のテーブルに対して行われた追加・更新・削除の変更履歴をログとして保存する機能です。DynamoDB Streams で保存されたテーブルの変更イベントを AWS Lambda で検知し、別のリージョンにデータをレプリケーションするLambda 関数を実装することで、マルチリージョンでのデータをバックアップするクロスリージョンレプリケーションを独自に構成できます。クロスリージョンレプリケーションを構成することで、単一障害点を持たない DynamoDB の可用性をさらに向上できます。

なお、DynamoDB Streams の用途はクロスリージョンレプリケーションの構成に限りません。テーブルの変更をイベントとして検出する機能を使って、データをリアルタイムで監視したり、問題を検出した場合に通知を送るなど、さまざまなユースケースで利用できます。DynamoDB Streams について詳しくは、「DynamoDB Streams の変更データキャプチャ」をご覧ください。

グローバルテーブル

DynamoDB Streams を使って独自にクロスリージョンレプリケーションを構成するのは、自由度が高い反面、手間のかかる作業です。グローバルテーブル を使えば、もっと簡単にクロスリージョンレプリケーションを構成できます。

AWS コンソール上で、レプリカ (テーブルのコピー) を作成したいリージョンを指定するだけで、マルチリージョン、マルチマスターのデータベースを構成できます。なお、グローバルテーブルを利用する場合は、DynamoDB Streams を有効にする必要があります。


4. セキュリティ

DynamoDB のテーブルデータはデフォルトで暗号化されていますが、AWS KMS を利用することで暗号化キーをより柔軟に管理することが可能です。また、他の AWS サービスと組み合わせることで、さまざまなコンプライアンス要件に適合したセキュリティプラクティスを実現できます。

こちらの図は、DynamoDB のセキュリティのベストプラクティスを示しています。

img_awsgeek-dynamodb_05

クリックすると拡大します

以下に代表的なセキュリティプラクティスの例をご紹介します。

AWS KMS キーの選択

DynamoDB のデータの暗号化には、デフォルトでは AWS 所有のキーが使用されますが、セキュリティ要件に従い、AWS マネージドキーやカスタマーマネジメントキーも自由に選択できます。3 種類の AWS KMS キーについて詳しくは、AWS KMS の「基本概念」をご覧ください。

DynamoDB へのアクセス制限

DynamoDB は AWS ネットワーク上にあり、Amazon VPC (仮想ネットワーク) 内に直接設置して利用することはできません。ただし、VPC エンドポイントを作成することで、Amazon VPC からのアクセスのみに制限でき、クライアントとエンドポイント間の通信が傍受されるリスクを排除できます。

VPC エンドポイントを使ったアクセス制限について詳しくは、「Gateway endpoints for Amazon DynamoDB (英語のみ)」をご覧ください。

Fine-Grained Access Control (きめ細やかなアクセス制御)

FGAC (Fine-Grained Access Control) とは、IAM ユーザーおよびロールごとに DynamoDB テーブルの特定の項目や属性へのアクセスを制御する IAM ポリシー条件の考え方です。IAM ポリシーに詳細な DynamoDB 条件キーを指定することで、きめ細やかなアクセス制御を実現できます。FGAC の設定方法について詳しくは、「IAM ユーザーまたはロールを、DynamoDB テーブルにある特定の属性に制限するにはどうすればよいですか ?」をご覧ください。

その他 DynamoDB のセキュリティプラクティスについて詳しくは、Amazon DynamoDB デベロッパーガイドの「DynamoDB での予防的セキュリティのベストプラクティス」をご覧ください。


5. 料金体系

DynamoDB の料金は、データストレージや、データの読み込み、書き込みに加え、オンデマンドバックアップおよび復元 などオプション機能が課金の対象となります。

DynamoDB の主な料金体系は、こちらの図のとおりです。

図内の料金はすべて、2022 年 6 月時点の「アジアパシフィック (東京) 」リージョンのものです。また、料金はプロビジョンドモードのもので、オンデマンドモードの料金とは異なります。

DynamoDB の料金体系について詳しくは、「Amazon DynamoDB 料金」をご覧ください。

img_awsgeek-dynamodb_06

クリックすると拡大します

リザーブドキャパシティーの料金

リザーブドキャパシティーは、読み込み / 書き込みキャパシティーユニット (RCU / WCU) の料金を前払いすることで割引を受けられるサービスです。AWS コンソールで、リージョン、キャパシティーユニット数、および期間を指定して購入します。

リザーブドキャパシティーは、使用するRCU と WCU のユニット数を指定して前払いします。そのため、購入前に使用するユニット数を試算する必要があります。
以下は、キャパシティーユニットの種類ごとのユニット数の計算式です。

キャパシティーユニット

計算式

WCU

1KB * 1 (リクエスト) / 1 (秒) = 1 WCU

RCU (結果整合性)

4KB * 2 (リクエスト) / 1 (秒) = 1 RCU

RCU (強力な整合性)

4KB * 1 (リクエスト) / 1 (秒) = 1 RCU

表内の結果整合性と強力な整合性について :

DynamoDB は、結果整合性強力な整合性のある読み込みをサポートしています。強力な整合性のある読み込みは確実に最新のデータを取得できます。一方、結果整合性を利用すると、強力な整合性よりもキャパシティーユニットの消費量が半分になるため、上記のとおり RCU の計算式が異なります。

読み込み整合性について詳しくは、Amazon DynamoDB デベロッパーガイドの「読み込み整合性」をご覧ください。


まとめ

ユースケースに応じて最適なデータベースを選択するには、データベースごとの特徴と相違点を理解することが重要です。本グラレコ記事では、キーバリューストア型 NoSQL データベースの特徴と DynamoDB ならではの機能を 5 つの項目に分けてご紹介しました。

一般的な リレーショナルデータベース (RDB) と DynamoDB の相違点については、Amazon DynamoDB デベロッパーガイドの「リレーショナル (SQL) または NoSQL?」にまとまっているのでぜひご覧ください。

最後に、全体の図を見てみましょう。

img_awsgeek-dynamodb_full

DynamoDB には、トラフィックパターンに応じてプロビジョンドスループットを動的に調節する「DynamoDB Auto Scaling」や、キャッシュクラスタを構成することで最大 10 倍のパフォーマンス向上が見込める「DynamoDB Accelerator (DAX)」など、本記事では紹介しきれなかった機能がたくさんあります。

本記事を読んで DynamoDB に興味を持たれた方、実際に使ってみたいと思われた方は、ぜひ製品ページの「Amazon DynamoDB」も合わせてご覧ください。

この連載記事のその他の記事はこちら

選択
  • 選択
  • 今話題のブロックチェーンをAWSで実現する仕組みをグラレコで解説 »
  • サーバーレスって何が便利なの ? AWS でサーバーレスを構築するためのサービスをグラレコで解説 »
  • 機械学習のワークフローってどうなっているの ? AWS の機械学習サービスをグラレコで解説 »
  • 外部から AWS のバックエンドサービス利用を実現する仕組みをグラレコで解説 »
  • AWS でデプロイの自動化を実現するベストプラクティスをグラレコで解説 »
  • コンテナを使ってモノリスを分割する方法をグラレコで解説 »
  • クラウドへ移行する理由とそのステップをグラレコで解説 »
  • Windows ワークロードをクラウドへ移行するためのベストプラクティスをグラレコで解説 »
  • サーバーレスのイベントバスって何 ? Amazon EventBridge をグラレコで解説 »
  • サーバーレスで SaaS を構築する方法をグラレコで解説 »
  • 「あなたへのおすすめ」はどう生成するの ? Amazon Personalize で簡単に実現する方法をグラレコで解説 »
  • クラウド設計・運用のベストプラクティス集「AWS Well-Architectedフレームワーク」をグラレコで解説 »
  • 特定の顧客セグメントにメッセージ送信。「Amazon Pinpoint」の仕組みをグラレコで解説 »
  • アプリにユーザー認証機能を簡単に追加できる「Amazon Cognito」をグラレコで解説 »
  • わずか数分で WordPress サイトを構築できる「Amazon Lightsail」をグラレコで解説 »
  • 異なるアプリケーション同士の疎結合を実現。「Amazon SQS」をグラレコで解説 »
  • Web アプリを高速に開発できる「AWS Amplify」をグラレコで解説 »
  • 機械学習の知識ゼロでもテキストデータを分析。Amazon Comprehend をグラレコで解説 »
  • ビジネスデータをまとめて可視化 & 分析。Amazon QuickSight をグラレコで解説
  • 人工衛星の地上局を 1 分単位で利用。AWS Ground Station をグラレコで解説
  • カオスエンジニアリングで本当にカオスにならないための進め方をグラレコで解説
  • GraphQL API を簡単に作成 & 運用。AWS AppSync をグラレコで解説
  • IoT 環境を必要な機能を選択するだけで構築。AWS IoT をグラレコで解説
  • 高い可用性と耐久性のオブジェクトストレージ。Amazon S3 をグラレコで解説
  • サーバーレスでイベント駆動型アプリケーションを実現。AWS Lambda をグラレコで解説
  • データサイエンス教育の強い味方。Amazon SageMaker Studio Lab をグラレコで解説
  • 高速で柔軟な NoSQL データベースサービス。Amazon DynamoDB をグラレコで解説

builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

筆者プロフィール

photo_yonekura-yuki

米倉 裕基
アマゾン ウェブ サービス ジャパン合同会社
テクニカルライター・イラストレーター

日英テクニカルライター・イラストレーター・ドキュメントエンジニアとして、各種エンジニア向け技術文書の制作を行ってきました。
趣味は娘に隠れてホラーゲームをプレイすることと、暗号通貨自動取引ボットの開発です。
現在、AWS や機械学習、ブロックチェーン関連の資格取得に向け勉強中です。

監修者プロフィール

photo_tsutsumi-hayato

堤 勇人
アマゾン ウェブ サービス ジャパン合同会社
Sr. Database Specialist SA

データベースを専門に、主に NoSQL 分野についてお客様を支援しています。最近の興味は部屋の防音です。

AWS のベストプラクティスを毎月無料でお試しいただけます

さらに最新記事・デベロッパー向けイベントを検索

下記の項目で絞り込む
絞り込みを解除 ≫
1

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する