COLUMN誰でもわかる!お役立ちコラム

AWS活用支援コラム

AWSのNoSQLの代表、Amazon DynamoDBとは

Amazon DynamaDBとは?

Amazon DynamoDBは、Amazon Web Services(AWS)が開発したマネージドデータベースサービスの1つです。NoSQLというタイプのデータベースであり、通常のデータベースとは大きな違いがあります。本記事では、NoSQLの特徴や、DynamoDBの使いどころについて、記載してきます。

NoSQLデータベースとリレーショナルデータベースの比較

NoSQLと通常のデータベースはどのような違いがあるのでしょうか。それぞれのデータベースの形式の特徴について記載していきます。

リレーショナルデータベースとは?

リレーショナルデータベース(以下RDBMS、Relational DataBase Management System)とは、属性を列、組を行とする表(テーブル)の形でデータを格納するデータベースです。エクセルのような、行と列にデータを格納しながら、格納したデータに対して様々な操作が可能なデータベースであるとイメージするといいでしょう。

RDBMSではSQLと呼ばれる言語を用いてデータの参照や加工をおこないます。RDBMSは不正なデータの記録を拒否するなどしてデータベースの整合性を保つ機能や、権限のない利用者による不正な読み出しや改竄などからデータを保護する仕組みを持っています。

また、関連する複数の処理を一体化して矛盾なく実行する機能(トランザクション)もあり、データの整合性に強みを持っています。一方で、SQLによる読み書きに時間がかかってしまうデメリットがあり、非常に高速にデータを読み書きする必要があるアプリケーションには不向きです。

NoSQLとは?

NoSQLはRDBMSではないデータベース全般を指します。特にデータの格納・読み出しを大量かつ高速に行う作業において、RDBMSではデメリットが出てしまうケースを解決する為に開発されてきました。そのため、キーバリューストア型データベースなど様々な種類があり、要件に応じて選択することが可能です。

RDBMSと比較してデータの正確性(ACID特性といいます 。ACIDはAtomicity(不可分性)、Consistency (一貫性)、Isolation(独立性)、Durability(永続性)の頭文字をつなぎ合わせたものです。)には多少の弱みがあることが多いですが、データの格納形式がRDBMSよりも複雑ではないため追加処理やデータ参照が多いシステムに向いています。NoSQLは代表的なもので下記の種類があります。
NoSQLで利用できるデータモデルの例として、以下にいくつか挙げます。

・キーバリュー型:キーとバリューのみのシンプルな組み合わせのモデル
・カラム型:列方向にまとめでデータを扱うことモデル
・ドキュメント型:JSONやXML形式で記述されたドキュメントの形で管理するモデル
・グラフ型:データとデータ間のつながりを管理するモデル

Amazon DynamoDBは何を目的として生まれたのか?

Amazon DynamoDBは、Werner Vogals(AmazonのCTO)により開発されました。分散システム(複数のコンピュータ・サーバーにより構成されるシステム)においては、CAP定理という、「一貫性(Consistency)」「可用性(Availability)」「ネットワーク分断耐性(Partition-tolerance)」をすべて達成することはできない、という決まりがあります。

このなかで、「可用性(Availability)」「ネットワーク分断耐性(Partition-tolerance)」を重視した結果開発されたのがDynamoDBです。AmazonはECが主要な産業の一つですが、DynamoDBを使うことによって、ECのカートにおいて、”いつでもカートに追加できる=可用性”、”カートに入れたデータを失わない=ネットワーク分断耐性”を、大量に処理することができます。

DynamoDBも活用した柔軟なシステム開発を提供するしてスタイルズのクラウドネイティブなAWS開発サービスはこちら→

DynamoDBの特徴

DynamoDBの特徴は以下の通りです。

  • フルマネージドサービスであり、自動的に容量の拡張やレプリケーションが実施される
    データベースの運用はほかのミドルウェアと比べて、格納されるデータ容量の予測やバックアップといった運用が非常に難しく、運用コストがかさんでしまう原因となっています。DynamoDBは自動で容量の拡張やレプリケーションが行われるマネージドサービスとして提供されており、運用負荷の軽減が可能です。また、レプリケーションや自動バックアップが、「ネットワーク分断耐性(Partition-tolerance)」の向上につながっています。
  • 「値」とそれを取得するための「キー」だけを格納するというシンプルな機能を持った「キーバリュー型」の形式をもつNoSQLで、データの格納と取得に特化されている
    データの格納形式をシンプルに行うことで、データの読み書きを高速に行うことができるようになっています。これにより、データの読み書きの際にDynamoDBはサーバー側の負荷を上げることがないため、障害の低減や高速なデータの読み書きが可能になっています。一方で、表の結合など複雑なデータのクエリは不得意、という特徴もあります。
  • 1桁ミリ秒単位のレイテンシーを要求するアプリケーションにも対応
    DynamoDBは読み書きの性能がRDBMSと異なり非常に高速に実施することが可能になっています。そのため、レイテンシに厳格なアプリケーションにおけるデータベースとして利用することが可能です。

上記の特性から、DynamoDBでは下記のような特徴を持つシステム・アプリケーションのデータベースとして利用することがいいでしょう。

  • ミリ秒単位のアクセスレイテンシーが求められる
  • RDBMSのような複雑なデータ構造は扱わない
  • データ容量の予測がしにくい

具体的には、モバイルゲームにおけるデータ収集やアカウント管理、Web広告におけるクリックストリーミングログの格納、IoTのようなセンサー機器とデータを管理するシステムなどでの利用が適しているといえます。詳細はAmazon DynamoDB: ゲームのユースケースと設計パターンを確認するといいでしょう。

DynamoDBも活用した柔軟なシステム開発を提供するしてスタイルズのクラウドネイティブなAWS開発サービスはこちら→

DynamoDBの設計上の考慮点

DynamoDBでアプリケーションを構成しようとする場合、最も重要な考慮点がキーの設計です。DynamoDBでは、テーブルのデータをパーティションと呼ばれる領域に分けて保持します。データがどのパーティションへ配置されるかは”パーティションキー”によって決定されます。

また、パーティションにデータを格納する場合は”ソートキー”として指定した順序でデータを格納します。データが格納されすぎているパーティションがある場合(そのようなパーティションをホットパーティションといいます)、データのクエリ速度が遅くなる場合があります。

また、データの検索手段として、フルスキャンと、パーティションキーを指定した上でのソートキーによる範囲を指定したスキャンの方法があり、ソートキーを指定している場合は後者の検索が可能となり、検索速度が向上します。また、Amazon DynamoDBはインデックスとして、LSI(Local Secondary Index)とGSI(Global Secondary Index)の2種類が利用できます。LSI は、Partition Keyが同一なアイテムを、ほかのアイテムからの検索するために利用します。いずれにせよDynamoDBの設計は、パーティションキーおよびソートキーその他のキー設計が非常に重要な要素になります。データ構造だけ定義しクエリーを柔軟に発行できた RDBMS と違い、DynamoDB はクエリーが柔軟ではありません。

また、データ集計にも強くありません。そのため、設計段階で各種データへどのようなアクセスがされるかをきちんと考えておく必要があります。また、システム全体をDynamoDBだけで無理やり実現しようとせずに、DynamoDBに向いている機能に限定して採用しようとする考え方が大切です。

DynamoDBの料金体系

DynamoDBの料金を決める要素は大きく3つです。

  • キャパシティーユニット
  • ストレージ容量
  • データ転送量

このなかで、DynamoDB特有のキャパシティーユニットについて解説します。キャパシティーユニットとは、事前に設定しておく読み込み/書き込み容量を指します。1キャパシティーユニットは1秒間に決められた回数の読み込み/書き込み容量を提供します。

書き込みはWCU、読み込みRCUと呼ばれており、1WCUは1秒間に1回の書き込み、1RCUは1RCUは1秒間に2回の読み込み、または結果整合性のある1回の読み込みが可能です。このキャパシティーユニットを設定した数量に応じて課金が生じます。また、1キャパシティーユニットには書き込みが1KB、読み込みが4KBまでと制限があることも考慮しておく必要があります。

まとめ

DynamoDBは非常に高速な読み書きが可能で、運用コストも低いマネージドデータベースサービスです。一方で、DynamoDBの具体的な使いどころや、コスト効率がよく使うためには、DynamoDBについて深い理解を持っておく必要があります。使用の際には専門知識を持つベンダーに相談してみるといいでしょう。