コンテンツに移動
デベロッパー

Google Cloud のデータベース オプションについての説明

2021年9月9日
https://storage.googleapis.com/gweb-cloudblog-publish/images/DB_header.max-2600x2600.png
Google Cloud Japan Team

※この投稿は米国時間 2021 年 8 月 25 日に、Google Cloud blog に投稿されたものの抄訳です。

用途に適したデータベースを選択することは簡単ではありません。この選択はトランザクション処理、分析処理、インメモリ データベースといったユースケースによって大きく左右されますが、他の要素もかかわってきます。この投稿では、リレーショナル(SQL)および非リレーショナル(NoSQL)データベースを含む Google Cloud の各種のデータベース オプションについて触れ、各データベースのオプションに最適なユースケースを説明します。

リレーショナル データベース

リレーショナル データベースでは、情報を行と列のテーブルに保存するので、一般的に構造化データに適しています。結果として、データの構造が頻繁に変化しないような用途で使用されます。ほとんどのリレーショナル データベースの操作には、SQL(Structured Query Language)が使用されます。ACID 整合性モードが用意されており、次の特徴があります。

  • アトミック: トランザクションのすべてのオペレーションが成功しないと、ロールバックされます。

  • 整合性: トランザクションの完了時に、データベースの構造は正常な状態です。

  • 分離: トランザクションが互いに競合することはありません。データへのアクセスが連続して発生した場合、データベースにより調停され、トランザクションはシーケンシャルに実行されるように見えます。

  • 耐久性: トランザクションの適用結果は、仮に障害が存在する場合でも恒久的なものです。

こういった特性から、リレーショナル データベースは高精度が求められる用途や、金融および小売の取引などトランザクション クエリを必要とする用途で使用されます。たとえば、バンキングで顧客が振込リクエストを行うとき、取引が可能で、最新の口座残高に対して取引されることを確実にしなければなりません。この場合、エラーやリクエストの再送信は多くの場合に問題ありません。

Google Cloud で使用できるリレーショナル データベースには、Cloud SQL、Cloud Spanner、Bare Metal Solution の 3 つがあります。

Cloud SQL: Google Cloud 上で利用できる MySQL、PostgreSQL、SQL Server のマネージド データベースを提供します。保守費用の削減を見込めるほか、データベースのプロビジョニング、ストレージ容量の管理、バックアップを自動化できます。また、高可用性と障害復旧やフェイルオーバーがはじめから備わっています。これらの理由から、汎用のウェブ フレームワーク、CRM、ERP、SaaS、e コマースの用途に最適です。

Cloud Spanner: 全世界に分散された、強整合性を備えたエンタープライズクラスのデータベースです。最高 99.999% の可用性を誇り、リレーショナル データベースの構造と、非リレーショナルの水平スケーリングの利点を併せ持ちます。Cloud Spanner は非リレーショナル データベースや NoSQL データベースのようなスケーラビリティと ACID トランザクション、SQL クエリ、リレーショナル構造を両立させたユニークなデータベースです。結果として、Spanner はゲーム、支払いソリューション、グローバルな会計台帳、小売バンキング、在庫管理など、強整合性と高可用性を維持したまま無制限のスケーリングを必要とする用途に最適です。

Bare Metal Solution: Google Cloud で特殊なワークロードを低レイテンシで実行するためのハードウェアを提供します。Oracle データベースを Google Cloud にリフト&シフトするとき特に便利です。これによりデータセンターの使用を停止することが可能になり、従来のアプリケーションをモダナイズする道が拓けます。

非リレーショナル データベース

非リレーショナル データベース(または NoSQL データベース)は、複雑で構造化されていないデータをテーブル以外の形式(ドキュメントなど)で保存します。非リレーショナル データベースは多くの場合、膨大な数の複雑で多様なデータを編成する必要があるときに使用されます。リレーショナル データベースのようにクエリを実行して応答を得るためにいくつものテーブルにアクセスする必要がないため、高速に動作します。頻繁に変更されるデータの保存や、多くの異なる種類のデータを処理する必要がある用途に理想的です。

たとえば服飾店で、シャツのサイズ、ブランド、色などすべての情報を記載し、袖の長さ、襟といったパラメータを後から追加する余地を残したドキュメントを使用するデータベースなどが考えられます。

NoSQL データベースが高速なのは、次の理由です。

  • 結果整合性: 保存データは一般に後から整合性が得られます(後の読み取り時など)。

  • 通常はハッシュされた分散により水平スケーリングを行います。

  • 通常は、特定のワークロード パターン(Key-Value、グラフ、ワイドカラム)に最適化されます。

  • 通常は、シャード間のトランザクションや柔軟な分離モードをサポートしません。

これらの特性から、非リレーショナル データベースは大規模で、高い信頼性と可用性を必要とし、頻繁にデータが変更される用途で使用されます。一部のリレーショナル データベースではデータの増大に応じてマシンのサイズを大きくして垂直スケーリングを行うのに対して、非リレーショナル データベースはサーバーを追加することで簡単に水平スケーリングを行えます。ただし、Cloud Spanner など一部のリレーショナル データベースはスケールアウトと厳格な整合性をサポートしています。

非リレーショナル データベースは、ドキュメント、Key-Value、グラフ、ワイドカラムなど各種の非構造化データを保存できます。Google Cloud で使用できる非リレーショナル データベースには次のものがあります。

  • ドキュメント データベース: 情報をドキュメントとして保存します(JSON や XML などの形式)。例: Firestore。

  • Key-Value ストア: コレクション内の関連するデータをグループ化し、レコードを固有のキーにより識別して、簡単に取得可能にします。Key-Value ストアは、リレーショナル データベースの値をミラーリングするのに十分な構造を持ちつつ、NoSQL の利点も維持できます。例: Datastore、Bigtable、Memorystore。

  • インメモリ データベース: 目的に特化したデータベースで、主にメモリにデータを保存します。ディスクへのアクセスをなくすことで、レスポンス時間をごく短くできます。マイクロ秒単位のレスポンス時間が求められ、トラフィックが急増する用途に理想的です。例: Memorystore。

  • ワイドカラム型データベース: テーブル形式を使用しますが、同じテーブルの中でも各行のデータに広範な名前付けと形式を使用できます。基本的な構造を備えていますが、柔軟性もあります。例: Bigtable。

  • グラフ データベース: グラフ構造を使用して保存されるデータポイント間の関係を定義します。非構造化および半構造化情報のパターンを識別するのに便利です。例: JanusGraph。

Google Cloud で使用できる非リレーショナル データベースは 3 つあります。

  • Firestore: サーバーレス ドキュメント データベースで、オンデマンドでスケーリングし、Backend-as-a-Service として機能します。アプリケーション構築を迅速化できる DBaaS です。e コマース、ゲーム、IoT、リアルタイム ダッシュボードなど、すべての汎用ユースケースに最適です。Firestore ユーザーはライブとオフラインのデータを操作し、共同で編集できるため、リアルタイム アプリケーションとモバイルアプリに理想的です。

  • Cloud Bigtable: Cloud Bigtable はデータがスパース(低密度)に格納されるテーブルで、数十億行、数千列の規模にスケーリング可能です。これにより、数テラバイト、あるいは数ペタバイトのデータを保存できます。極めて短いレイテンシで単一キーの超大容量データを保存するために理想的です。ミリ秒未満のレイテンシで高い読み取り / 書き込みスループットを実現できるため、MapReduce オペレーションに理想的なデータソースです。また、オープンソースの HBase API 規格をサポートしているため、HBase、Beam、Hadoop、Spark などの Apache エコシステムや、Google Cloud エコシステムと簡単に統合可能です。

  • Memorystore: Google Cloud の Redis や Memcached 用のフルマネージドのインメモリ データストア サービスです。インメモリや一時データストアに最適で、プロビジョニング、レプリケーション、フェイルオーバー、パッチ適用の複雑なタスクを自動化できるため、コーディングに多くの時間を振り分けることができます。Memorystore はレイテンシが極めて短く、パフォーマンスが高いため、ウェブやモバイル、ゲーム、リーダーボード、ソーシャル、チャット、ニュース フィードの用途に理想的です。

結論

リレーショナルと非リレーショナルのどちらのデータベースを選択するかは、ユースケースによって左右されます。一般に、ACID トランザクションを必要とする用途でデータ構造があまり変化しない場合は、リレーショナル データベースを選択します。

Google Cloud では、すべての汎用 SQL データベースに Cloud SQL を使用し、大規模で世界的にスケーラブルな、強整合性のユースケースには Cloud Spanner を使用します。一般に、データ構造が後から変化することがあり、スケーラビリティと可用性が整合性よりも重要な要件の場合は、非リレーショナル データベースが望ましい選択です。Google Cloud は、ドキュメント、Key-Value、ワイドカラム型データベースの範囲に含まれる幅広いユースケースをサポートするため、Firestore、Memorystore、Cloud Bigtable を提供しています。

各データベースの比較に関するほかのリソースについては、概要をご覧ください。Bigtable をお試しになりたい場合はこちらのオンデマンド トレーニングをご覧ください。データベースをマネージド サービスに移行する方法については、こちらのホワイトペーパーをご覧ください。

Video Thumbnail

#GCPSketchnote をさらにご覧いただくには、GitHub リポジトリをフォローしてください。同様のクラウド コンテンツについては、Twitter で @pvergadia で発信しています。thecloudgirl.dev もぜひご覧ください。

-Google デベロッパー アドボケイト Priyanka Vergadia

投稿先