この記事はNuco アドベントカレンダーの3日目の記事です。
2日目の記事はこちら
クラウドデータベース・データウェアハウスについて、主要クラウドサービスを中心に紹介していきます。
各サービスの無料枠についての比較もしているので、ぜひ参考にしてみてください。
「データベース」と「データウェアハウス」について
データベースとは
構造化されたデータの集合のことをデータベースと言います。一つ一つのデータが、ただ集約されているだけでなく、データ間の関係が整理されている点が重要で、その整理の仕方によって、さまざまな種類のデータベースが存在します。
データベースは、アプリケーション・システムを構築する最重要基盤の一つです。ユーザーマスタ・商品購入履歴など、ユーザーがサービスを利用する中でのあらゆる場面で、データベースを使ったデータの管理が行われています。
リレーショナルデータベース(RDB)
表形式(行と列)でデータを管理するデータベースで、古くから利用されているポピュラーなデータベースです。
RDBは、RDBMS(リレーショナルデータベースマネジメント管理システム)という専用のシステムで管理します。
このRDBMSを操作する言語が、SQLです。
「SQLを書くことで、RDBMSを操作し、RDBを管理している」という構図になります。
RDBMSにはいくつかのバリエーションがあり、代表的なものとしては、MySQL、PostgreSQL、MariaDBなどが挙げられます。
NoSQL
RDBに対する概念として、NoSQLが挙げられます。NoSQLは、Not only SQL の略で、SQLに寄らない、RDBでないデータベース全般を指す用語です。
表ではないデータベース全般を指すので、そのデータ構造には様々なものがありますが、代表的なものとして、Key-Value型、ドキュメント型などが挙げられます。
インメモリデータベース
インメモリデータベースは、データをストレージではなくメモリに格納するように設計されたデータベースです。
通常のデータベースがストレージ上に構築されるのに対し、メモリ上にデータを保持するため、高速なデータ読み書きを実現することができます。特に通信ネットワーク機器等、応答時間が非常に重要なアプリケーションで利用されます。
高速である反面、メモリ上であるため、永続性は保証されません。
リレーショナルか、そうでないかはこの言葉の定義には含まれないのですが、NoSQLのDBMSとして実装されることがほとんどです。
中でもよく利用されるのがRedisとMemcachedの2つで、両者にはデータ型のサポート有無などに性能差があります。
データウェアハウスとは
データウェアハウス(Data Ware House, DWH)は、目的に応じて編成・統合されたデータの集合体です。
データベースとの大きな違いは、その役割です。データベースがアプリケーション・システムの基幹部分を担うのに対して、データウェアハウスでは、それらの基幹DBから集めたデータを再構成し、分析可能な状態で提供することを役目とします。
データ分析に特化したDB、と言っても良いと思います。
分析に用いるため、基本的にレコードは削除・更新されず、時系列に沿って累積されていくのも、通常のDBの用途と大きく異なる点になります。
本記事で紹介するサービス一覧表
データベース
大分類 | 中分類 | AWS | GCP | Azure |
---|---|---|---|---|
リレーショナルデータベース | RDS | Cloud SQL |
Azure Database SQL Database |
|
ハイパフォーマンスDB | Aurora | Cloud Spanner | SQL Database Hyperscale | |
NoSQL | Key-Value型 | DynamoDB | Cloud Bigtable | Cosmos DB |
ドキュメント型 | DocumentDB |
Firestore RealtimeDatabase |
||
インメモリDB |
ElastiCache MemoryDB for Redis |
Memorystore | Cache for Redis |
データウェアハウス
AWS | GCP | Azure | その他 |
---|---|---|---|
Amazon Redshift | BigQuery | Synapse Analytics | Snowflake |
クラウドデータベース(リレーショナルデータベース編)
【AWS】 Amazon RDS
Amazon Relational Database Service。
AWSの提供するマネージドRDBサービスです。クラウド内でRDBのセットアップ・運用・スケールが簡単にできます。
利用できるRDBMSには、
- MySQL
- MariaDB
- PostgreSQL
- Oracle
- SQL Server
の5つがあるため、既存のアプリケーションに変更を加えずに(利用するRDBMSを変更せずに)移行しやすいのが強みです。
またこれらのRDBMS以外のオプションとして、Amazon Auroraを選択可能です。
【GCP】 Cloud SQL
GCPが提供するマネージドRDBサービスです。
RDSと同様に、データベース プロビジョニング、ストレージ容量の管理など、時間のかかる作業を自動化してくれ、管理コストを大幅に軽減してくれます。
利用できるRDBMSは、
- MySQL
- PostgreSQL
- SQL Server
の3つです。
【Azure】 Azure Database
Microsoft Azureが提供するマネージドRDBサービスです。
現在利用可能なRDBMSは、
- MySQL
- PostgreSQL
- MariaDB
の3種類です。
Azureでは、次項のSQL DatabaseがSQL Serverのサービスになるため、計4つのRDBMSを、マネージドサービスとして利用することができます。
【Azure】 SQL Database
同じくAzureが提供するマネージドRDBサービスです。
使用できるRDBMSはSQL Serverです。
SQL Serverはマイクロソフトが開発しているため、SQL Serverの開発段階に応じてハイグレードな機能を提供するサービスとして、他のAzure Databaseとは別個に提供されているのがSQL Databaseです。
クラウドRDB比較表
比較しやすい項目に絞って表にしてみます。
AWS (RDS) |
GCP (CloudSQL) |
Azure (Database/SQL Database) |
|
---|---|---|---|
利用可能RDBMS | MySQL MariaDB PostgreSQL Oracle SQL Server |
MySQL PostgreSQL SQL Server |
MySQL MariaDB PostgreSQL SQL Server |
課金体系 | 従量課金 | 従量課金 | 従量課金 |
課金対象 | インスタンス インスタンスが使用するハードウェアリソース |
インスタンス インスタンスが使用するハードウェアリソース |
データベース データベースのサイズ、コンカレント接続数、およびスループットレベル |
選べるRDBMSはRDSが一番多いですね。
課金体系については全て従量課金となっており、AWSとGCPは利用するインスタンス1当たりに対する課金となっています。Azureはインスンタンスではなくデータベースに対する課金となっており、インスタンス内に作成するDB単位で費用が発生します。
【AWS】 Amazon Aurora
Amazon RDSのオプション的な立ち位置のサービスです。
通常のRDSと同様のフルマネージドRDBサービスなのですが、大きな違いとして、高可用性・耐久性が挙げられます。そのため冒頭の一覧表では、「ハイパフォーマンスDB」として区別しています。
Auroraはデータのストレージとコンピューティングインスタンスが分離しており、データは3つのAZ(アベイラビリティゾーン)に、計6つのレプリカを作成しているため、障害に対して非常に強い仕組みとなっています。
反面、通常のRDSに比べて料金が高いこと、選べるRDBMSが少なく、2022年現在、MySQLとPostgreSQLしかないことが、留意すべき点になります。
【GCP】 Cloud Spanner
GCPが提供するハイパフォーマンスDBです。
「NewSQL」と呼ばれる新しいタイプのDBで、無制限のスケーリングと高い整合性が強みです。
構造化データだけでなく、半構造化データも扱いつつ、SQLのインターフェースを保持しています。
RDBはデータの整合性面が強く、スケーリング面でNoSQLに劣り、NoSQLはその逆、というトレードオフが存在する中で、RDBの整合性を維持しつつスケーリング面でも強力であることは大きな強みと言えます。
ただ、MySQLやMariaDBなどを使っているアプリケーションが、既存のDBからCloudSpannerに乗り換える、といったユースケースはおすすめされていません。新規にクラウドネイティブなRDBを使いたい場合に、CloudSpannerは強力な候補になりえますが、そうでない場合は素直にCloudSQLなどを選んだほうが良い場面も多そうです。
【Azure】 SQL Database Hyperscale
Azureが提供するハイパフォーマンスRDBサービスです。
RDSに対するAuroraと同様に、SQL Databaseのオプションというか、選べるサービスレベルの一つとして提供されています。
AWSのAurora、GCPのCloudSpannerと同様に、高い可用性・耐久性が特徴で、通常のSQL Databaseよりも高価格になります。(年間予約契約等で価格を抑えることは可能。)
SQL Databaseのサービスレベルの一つなので、使えるRDBMSはSQL Serverのみになります。
クラウドデータベース(NoSQL編)
【AWS】 Amazon DynamoDB
AWSが提供するKey-Value型のフルマネージドNoSQLサービスです。
ほぼ無制限のスループットとストレージを備えている上、冗長化についても自動で行ってくれます。
RDBではSQLを利用しますが、DynamoDBのメインインターフェースはREST APIです。
各言語ごとのSDKも提供されていて、特にDynamoDBはそのカバー範囲が広いことも特徴です。
- C++
- Go
- Java
- JavaScript
- Kotlin
- .NET
- Node.js
- PHP
- Python
- Ruby
- Rust
- Swift
2022年時点でこれだけあるため、既存のアプリケーションへの組み込みやすさの面で優れていると言えるでしょう。
【AWS】 Amazon DocumentDB
同じくAWSが提供するドキュメント型のNoSQLサービスです。
MongoDBの互換サービスとなっており、クラウドでフルマネージドなMongoDBを利用したい場合の有力な候補になります。
SDKは、同じAWSであるDynamoDBと同じ範囲がカバーされています。
【GCP】 Cloud Bigtable
GCPが提供するKey-Value型のフルマネージドNoSQLサービスです。
特徴的な点は、RESTだけでなくgRPCのインターフェースも提供している点です。
また、HBase(Hadoop分散ファイルシステム上で実行されるDBMS)のAPIも使用できるため、Hadoopなどのビッグデータツールとの相性が良いことも強みと言えます。
またSDKとしては、
- C++
- C#
- Go
- Java
- HBase
- Node.js
- PHP
- Python
- Ruby
がサポートされています。gRPCやGoのサポートが、やはりGoogle、といったところでしょうか。
【GCP】 Firestore
同じくGCPが提供するドキュメント型のNoSQLサービスです。
リアルタイムのデータ受信ができることが特徴で、データに変更が加えられるたび、クライアント側でその変更を受けることが可能です。
特にモバイルアプリやIoTに厚く、iOS、Android、Flutter、Unitiyなどのクライアントで利用できる点も強みと言えます。
【GCP(Firebase)】 Firebase Realtime Database
Firebaseで提供されているドキュメント型のNoSQLサービスです。
(Firebaseは元々GCPとは別の企業・サービスでしたが、現在はGoogleの提供するプラットフォームとなっています。)
JSONデータのリアルタイム保存・容易なデバイス間連携機能が特徴です。Firebaseの提供するデータベースとしては、後発としてFirestoreがあり、現在はそちらの利用が推奨されています。
【Azure】 Cosmos DB
Azureが提供しているフルマネージドNoSQLサービスです。
AWSのDynamoDB、GCPのBIgTableに相当するサービスで、数ミリ秒 (1 桁台) の応答時間と、自動および即時のスケーラビリティにより、あらゆるスケールで速度が保証されます。
大きな特徴として、マルチモデルAPIを実装しており、CosmosDB元来のNoSQL用APIだけでなく、MongoDB、PostgreSQLなどのインターフェースも提供しているため、非常に応用性が高いことが挙げられます。
SDKについては、
- .NET
- Java
- Node.js
- Python
- Go
- PowerShell
などがサポートされています。公式でも最初に.NETが上がるところは、Microsoft製品のカラーが出ている部分だなと思います。
クラウドデータベース(インメモリデータベース編)
【AWS】 Amazon ElastiCache
AWSの提供する、フルマネージドのインメモリキャッシングサービスです。アプリケーションとデータベースパフォーマンスを高速化するキャッシングに使ったり、セッションストア、ゲーミングリーダーボード、ストリーミング、および分析などの耐久性を必要としないユースケースのプライマリデータストアとして使用したりできます。
RedisエンジンとMemcachedエンジンの両方をサポートしています。
https://aws.amazon.com/jp/elasticache/redis-vs-memcached/
【AWS】 Amazon MemoryDB for Redis
同じくAWSが提供している、Redisと互換性があり、耐久性のあるインメモリデータベースサービスです。
ElastiCacheのRedisエンジンと比べると、書き込み速度で劣るものの、高い読み取りパフォーマンスと可用性を有しているようです。特にデータの永続性担保に関して優秀で、ElastiCacheではプライマリノードが落ちた時にレプリカノードがプライマリに昇格するまでのデータロストが発生する可能性がありますが、MemoryDBではそのリスクを排除しています。
その分、ElastiCacheと比べて若干高価で、時間あたり約1.5倍ほどのコストがかかる点は要注意と言えます。
【GCP】 Memorystore
GCPの提供するインメモリデータベースサービスで、スケーラビリティ、セキュリティ、可用性に優れており、RedisとMemcachedをサポートしています。
AWSのElasticCacheに相当するサービスになります。
ElastiCacheとよく比較される点としては、ElastiCacheはクラスタ構成なのに対し、Memorystoreはシングルノード構成である点です。単純なパフォーマンスについては、大きな差はありません。
【Azure】 Cache for Redis
Azureの提供するインメモリデータベースサービスです。こちらはRedisのみサポートしています。
料金プランがBasicからEnterprise Flashまでの5段階用意されており、段階によってデータの永続性やネットワークパフォーマンスに高低があります。そのため、プロジェクトに必要な運用レベルに応じたプランを見極めて選択することが重要です。
また、デプロイできるRedisのバージョンが少ない点にも注意が必要です。
ElastiCacheでは2 ~ 6系、Memorystoreでは3 ~ x系までをサポートしていますが、AzureのCache for Redisでは4系と6系のみの提供となっています。(5系がスキップされている。3系以前が無い。)
もしデプロイしたいバージョンを柔軟に選びたい場合、不自由を感じることがあるかもしれません。
クラウドデータウェアハウス
【AWS】 Amazon Redshift
AWSが提供するデータウェアハウスサービスです。
あらゆる構造化および半構造化データを統合し、分析する基盤として利用することができます。
SQLを使用して、機械学習モデルを簡単に作成、トレーニング、デプロイできる、Amazon Redshift MLといった機能も提供しています。
【GCP】 BigQuery
GCPの提供する、サーバーレスでスケーラビリティと費用対効果に優れたマルチクラウドデータウェアハウスです。
データウェアハウスとしての機能に加えて、
- BigQuery ML による機械学習と予測モデリング
- BigQuery BI Engine によるインタラクティブなデータ分析
といった周辺機能も充実しており、データ分析・活用を協力にバックアップしてくれます。
【Azure】 Synapse Analytics
Azureの提供するデータウェアハウスサービスです。厳密には、「データ統合、データウェアハウス、ビッグデータ分析が一つになった制限のない分析サービス」群 であり、DWHはその一機能になります。これらのサービスがまとめられていることで、データの取り込み、探索、準備、変換、管理、提供によるあらゆるニーズへの対応が可能になっています。
Snowflake
主要クラウドサービス以外でも注目を集めているDWHとして、Snowflake社の提供するこのサービスがあります。
クラウド上で利用することを前提としたアーキテクチャ構成となっており、大量の処理を独立的に同時実行することを可能にしています。AWS、Azure、GCPとの連携に対応しており、既に利用しているクラウドアーキテクチャを維持しつつ、ハイパフォーマンスなデータ分析基盤を構築できます。
課金体系を比較
Redshift | BigQuery | Synapse Analytics | Snowflake | |
---|---|---|---|---|
主な課金対象 | コンピューティングノードとその稼働時間 | クエリでスキャンされたデータ量 | コンピューティングリソースの稼働時間 | 仮想ウェアハウスとそのクエリ使用時間 |
その他、データストレージ量などが含まれます。
各サービスごとにサーバレスコンピューティング機能や、定額プランなどが提供されているものもあるため、実際の選択肢は多岐にわたります。
よく比較されるのがRedshiftとBigQuery(稼働時間課金VSスキャンデータ量課金)で、前者はクエリ自体は打ち放題だが立ち上げている限り課金される、後者はクエリを打った分の課金で済むが、誤って巨大なクエリを発行して爆死するリスクが有る、といった具合に一長一短です。
プロジェクトの成熟段階と、扱うデータ量によっても判断が分かれるところではあります。
各サービスの無料枠比較表
RDB
項目 | RDS | Cloud SQL | Azure Database | SQL Database |
---|---|---|---|---|
無料期間 | 1年間 | 90日間 | 1年間 | 1年間 |
DB稼働時間上限 | 750時間/月 | - | 750時間/月 | - |
ストレージ | 20GB | - | 32GB | 250GB |
備考 | バックアップストレージも20GB無料 | GCP新規利用時に$300分のクレジットが90日間限定で付与 (他のサービスと共有の利用枠) |
バックアップストレージも32GB無料 | DBトランザクションユニット10個まで無料 |
AWSとAzureは大きく変わらない感じですね。GCPはGCPサービス全体で利用できるクレジットになるので、いくつかのサービスを組み合わせて試す場合には柔軟な無料枠になっていると思います。
ハイパフォーマンスDB
項目 | Aurora | Cloud Spanner | Hyperscale |
---|---|---|---|
無料期間 | - | 90日間 | - |
ストレージ | - | 10GB | - |
備考 | 無料枠なし | GCP新規利用時の$300分クレジットと別に、 90日間10GBのストレージが無料 |
無料枠なし |
通常のRDBよりもハイパフォーマンスなサービスである分、無料枠はあまり充実していないようです。
NoSQL
項目 | DynamoDB | DocumentDB | BigTable | Firestore | Realtime Database | Cosmos DB |
---|---|---|---|---|---|---|
無料期間 | 無制限 | 30日間 | - | 無制限 | 無制限 | 無制限 |
ストレージ | 25GB | 5GB | - | 1GB | 1GB | 25GB |
書き込み | 2億回(IO合算)/月 | 3,000万回(IO合算) | - | 20,000回/日 | - | 1,000RU/秒(IO合算) |
読み取り | 2億回(IO合算)/月 | 3,000万回(IO合算) | - | 50,000回/日 | 10GB/月 | 1,000RU/秒(IO合算) |
備考 | - | - | GCP新規利用時に$300分のクレジットが90日間限定で付与される | - | - | Azure無料アカウントと組み合わせると、12ヶ月間はさらに無料枠がUP |
データサイズによりますが、DynamoDBやCosmos DBの無料枠は魅力的に見えますね。軽量なトライアルなら、Firestoreもトライしやすいと思います。
インメモリデータベース
項目 | ElastiCache | MemoryDB for Redis | Memorystore | Azure Cache for Redis |
---|---|---|---|---|
無料期間 | 1年間 | 2ヶ月間 | - | - |
DB稼働時間上限 | 750時間/月 | 750時間/月 | - | - |
ストレージ | - | 20GB | - | - |
備考 | - | - | GCP新規利用時に$300分のクレジットが90日間限定で付与される | - |
Azure Cacheは無料枠と呼べるものが見つかりませんでした。(わかる方、教えてください。)
データウェアハウス
項目 | Redshift | BigQuery | Azure Synapse Analytics | Snowflake |
---|---|---|---|---|
無料期間 | 2ヶ月間 | 無制限 | - | 30日間 |
DB稼働時間上限 | 750時間/月 | - | - | - |
クエリ使用量 | - | 1TB/月 | - | - |
ストレージ | - | 10GB | - | - |
備考 | - | - | - | 利用料全体に$400分のクレジットが付与される |
BigQueryの無料枠が強いですね。無制限で一定程度の枠は無料で担保されています。
まとめ
目的や前提条件を考えて適切に選びましょう
以上、特に主要クラウドサービスが提供するデータベース・データウェアハウスサービスについて紹介してきました。
一覧表にも整理しましたが、細かい違いこそ有れ、機能ごとに見ると、ほとんどのクラウドサービスで類似のものを提供していることがわかると思います。
クラウドDB・DWHを使いたい、となると、基本的には、「目的」と「前提条件」の組み合わせの観点で選んでいくことになると思います。
- 目的
- エンドユーザー向けアプリケーションで使うDBをクラウドで構築したい。
- 求められるパフォーマンスは?スケール可能性は?リアルタイム性は必要?
- 複数サービスのデータを集積して分析基盤を作りたい。
- どんな形で使いたい?メンバーみんなSQL打つ?別途分析インターフェース(ダッシュボードなど)は作る?
- 社内オンプレシステムをクラウド化したい。
- ...etc
- エンドユーザー向けアプリケーションで使うDBをクラウドで構築したい。
- 前提条件
- 既存プロジェクトの状態
- オンプレ・別のクラウドで既に使っているサービスはあるか?全く0から作るのか?
- コスト
- 費用的に採算は取れそうか?
- スモールスタートで問題ないか?最初からある程度の規模を想定するのか?
- 技術的なコストはどうか?
- メンバーはそのサービスのキャッチアップができそうか?開発言語等のハードルはないか?
- 費用的に採算は取れそうか?
- ...etc
- 既存プロジェクトの状態
上記はとっても大味ですが、こんな感じで、サービス選定に必要な情報をガシガシ洗い出していきましょう。
- 「GCP上で動かしているサービスのログをベースに分析・機械学習基盤を作りたい。」
- →「BigQueryを使いましょう。」
- 「半構造化データの読み書きができるフルマネージドDBを使いたい。その他インフラはAWS上に構築する予定だ。」
- →「DynamoDBで間違いなさそう。」
といった具合に、目的と前提条件が明確になっていれば、使うべきツールはそう迷わずに決められるかと思います。
この記事が、皆様のクラウド開発ライフの一助となれば幸いです。
おわりに
弊社では、経験の有無を問わず、社員やインターン生の採用を行っています。
興味のある方はこちらをご覧ください。