34
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

株式会社NucoAdvent Calendar 2022

Day 3

【まとめ】クラウドデータベース・データウェアハウスを網羅的に紹介【無料枠一覧付き】

Last updated at Posted at 2022-12-02

この記事はNuco アドベントカレンダーの3日目の記事です。
2日目の記事はこちら

クラウドデータベース・データウェアハウスについて、主要クラウドサービスを中心に紹介していきます。
各サービスの無料枠についての比較もしているので、ぜひ参考にしてみてください。

「データベース」と「データウェアハウス」について

DBとDWH

データベースとは

構造化されたデータの集合のことをデータベースと言います。一つ一つのデータが、ただ集約されているだけでなく、データ間の関係が整理されている点が重要で、その整理の仕方によって、さまざまな種類のデータベースが存在します。

データベースは、アプリケーション・システムを構築する最重要基盤の一つです。ユーザーマスタ・商品購入履歴など、ユーザーがサービスを利用する中でのあらゆる場面で、データベースを使ったデータの管理が行われています。

リレーショナルデータベース(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
  • 前提条件
    • 既存プロジェクトの状態
      • オンプレ・別のクラウドで既に使っているサービスはあるか?全く0から作るのか?
    • コスト
      • 費用的に採算は取れそうか?
        • スモールスタートで問題ないか?最初からある程度の規模を想定するのか?
      • 技術的なコストはどうか?
        • メンバーはそのサービスのキャッチアップができそうか?開発言語等のハードルはないか?
    • ...etc

上記はとっても大味ですが、こんな感じで、サービス選定に必要な情報をガシガシ洗い出していきましょう。

  • 「GCP上で動かしているサービスのログをベースに分析・機械学習基盤を作りたい。」
    • →「BigQueryを使いましょう。」
  • 「半構造化データの読み書きができるフルマネージドDBを使いたい。その他インフラはAWS上に構築する予定だ。」
    • →「DynamoDBで間違いなさそう。」

といった具合に、目的と前提条件が明確になっていれば、使うべきツールはそう迷わずに決められるかと思います。

この記事が、皆様のクラウド開発ライフの一助となれば幸いです。

おわりに

弊社では、経験の有無を問わず、社員やインターン生の採用を行っています。

興味のある方はこちらをご覧ください。

34
25
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?