DynamoDBとAthenaの特徴と構成例
はじめに
AWSのデータベースサービスであるDynamoDBとAthenaの特徴と用途と構成例についてまとめました。
DynamoDBの特徴と用途
Amazon DynamoDBは、ECサイトAmazon.comで利用していたRDBMS(リレーショナルデータベース管理システム)のスケール限界を超えるために開発されたデータベースが起源と言われています。
DynamoDBには、RDBMSにはない特徴があります。データを複数のコンピュータに分散的に配置できるため、ハードウェアを増やした分だけ性能が向上します。複数のアベイラビリティーゾーン(AWSの各リージョンに存在するデータセンター)で冗長化する構成でもパフォーマンスが劣化せず、ストレージも自動拡張されるため、利用者は考慮不要です。
データの操作方法もRDBMSとは異なります。NoSQLのため、SQLではなく、AWSのサービスをコマンドラインから操作し、管理するためのツールであるAWS CLIや各種AWS SDKを利用してAPIベースで行います。
基本的にはキーをJSON(JavaScript Object Notationの略で、XMLなどと同様のテキストベースのデータフォーマット)形式で指定してデータを操作するため、検索や集計など複雑なクエリは向いていません。ただDynamoDBはスキーマレスなため事前のスキーマ定義の必要がなく、同じテーブル内で違うカラムのデータも扱えます。
利用用途としては、ユーザー情報の格納やバッチ処理、アプリケーションのメタ情報の格納などです。インフラの管理がいっさい不要なため、運用スクリプトのちょっとしたデータ格納にも利用できます。APIベースでデータ操作を行うため、サーバーレス構成時のデータベースとしても選択されることが多いです。
DynamoDBはトランザクションや複雑なクエリに向いていないため、アプリケーションの特性に合うかは事前に検証が必要です。
DynamoDBの構成例
DynamoDBは抽象度の高いサービスです。利用者側はAPIでDynamoDBにアクセスします。DynamoDBにアクセスするための認証についてはIAM(AWS Identity and Access Management :AWS リソースへのアクセスを安全に管理するためのウェブサービス)を使います。IAMポリシーにより、アクセスするテーブルや読み書き権限を指定します。DRマルチリージョン用途としてグローバルテーブルを作成することもできます。
Athenaの特徴と用途
Amazon Athena(以下Athena)はデータレイク(多数のソースからのビッグデータを元のままの多様な形式で保持する中央ストレージリポジトリ)上のデータにSQLでアクセスできるサービスです。AWSではS3がデータレイクの役割を果たします。
S3とは、Amazon Simple Storage Serviceの略で、Amazon Web Services によって提供されるオンラインストレージのWebサービスのことです。Amazon S3は、Webサービスのインタフェースを介してストレージを提供しています。 Athenaはスキーマの定義が不要なデータベースです。
目的に応じ使用できるように膨大なデータを格納するシステムであるデータウェアハウスのRedshiftなどは、事前にスキーマを定義、整形してロードする必要がありますが、AthenaはS3へのデータ保存時にスキーマ定義は不要です。
ただし、S3に保存されたデータからデータベースを作成するときにはスキーマを定義します。 データレイクとして利用するS3は、データを無制限に保存できる拡張性、複数のアベイラビリティーゾーンをまたいだ構成による高可用性と耐久性を持つオオブジェクトストレージ(データをオブジェクト単位で扱うストレージのアーキテクチャ)です。
AthenaはS3に保存されたデータに対し、SQLクエリを使ってデータ分析します。
サーバーレスのためインフラ管理が必要なく、大規模データに対しても高速なクエリを実行できるのが特徴です。
利用用途としては、データレイク上のデータをBI(ビジネス・インテリジェンス:企業の情報システムなどに蓄積される膨大な業務データを収集して分析し、その結果を可視化し、業務や経営の意思決定に活用する仕組み)や機械学習、データ探索に利用します。データがアクセスログなら、行動分析や障害調査などに利用します。Athenaはデータの加工ではなく、分析や可視化が得意なサービスです。
Athenaの構成例
Athenaはサーバーレスのためインフラ管理が不要です。分散クエリエンジンのPrestoを利用しており、メモリ上で処理します。AthenaへのSQLクエリは各種AWS SDKやJDBC(Java Database Connectivity は、Java と関係データベースの接続のためのAPI)、アプリケーションソフトがデータベース管理システムなどに接続し、データの取得や書き込み、操作などを行う方法の標準を定めたODBCで行い、認証はIAMで行います。
テーブル情報(カラムやS3上のデータの場所)、パーティション情報などはAWS Glueのデータカタログ機能を利用します。データの可視化はAmazon QuickSightが利用できます。
料金はクエリのスキャンデータ数がベースとなります。パーティション、データの圧縮、効率的な列指向フォーマットに変更するといったチューニングが可能です。クエリの同時実行数やタイムアウトに上限があるので注意が必要です。AWSへの上限緩和申請や、スキャンデータの削減でクエリ速度を上げます。