1 Oracle Globally Distributed Databaseの概要

Oracle Globally Distributed Databaseの機能と利点について概要を説明します。

分散データベースとは

分散データベースは、計算ワークロードとストレージ・ワークロードを分散するためのデータをパーティション化する方法で、ハイパースケール・コンピューティングの実現に役立ちます。

ハイパースケール・コンピューティングは、システムに対する需要の増加にあわせて素早くスケール・アップまたはスケール・ダウンできるコンピューティング・アーキテクチャです。このアーキテクチャの革新は、分散サイトを運営しているインターネット巨大企業によって主導されたもので、大規模なクラウド・プロバイダに採用されています。

多くの場合、企業はデータベース・シャーディングと呼ばれるテクノロジを使用してハイパースケール・コンピューティングを実現します。このテクノロジでは、データ・セットのセグメントが分散され、シャードは多数の異なるコンピュータに多数のデータベースを分散します。

すべてのシャードが一体になって、分散データベースと呼ばれる単一の論理データベースを形成します。分散データベースでは、何も共有しないアーキテクチャを使用します。このアーキテクチャでは、シャードはハードウェアもソフトウェアも共有しません。

アプリケーションの観点からは、分散データベースは単一のデータベースのように見えます。シャードの数とそれらのシャード間でのデータの分散は、データベース・アプリケーションに対して完全に透過的です。データベース管理者の立場では、分散データベースは、まとめて管理できる複数のデータベースで構成されています。

図1-1 データベース・シャード間の表の分散



Oracle Globally Distributed Databaseについて

Oracle Globally Distributed Databaseは、ハードウェアまたはソフトウェアを共有しないOracleデータベースのプール間でデータを自動的に配布およびレプリケートできる、Oracle Databaseの機能です。Oracle Globally Distributed Databaseは、ここで説明するように、成熟したRDBMSおよびNoSQLデータベースの最高の機能と性能を備えています。

  • オブジェクトの作成、厳格なデータ整合性、複雑な結合、ACIDトランザクションのプロパティ、分散トランザクション、リレーショナル・データ・ストア、セキュリティ、暗号化、堅牢なパフォーマンス・オプティマイザ、バックアップとリカバリ、およびOracle Databaseでのパッチ適用に使用されるSQL言語

  • Oracleのイノベーションとエンタープライズ・レベルの機能: Advanced Security、Automatic Storage Management (ASM)、Advanced Compression、パーティション化、高性能ストレージ・エンジン、SMPスケーラビリティ、Oracle RAC、Exadata、インメモリー列、オンライン再定義、JSONドキュメント・ストアなど

  • 分散データベース対応のOracle Databaseツール: 分散データベース・アプリケーションの開発と管理のためのSQL Developer、Enterprise Manager Cloud Control、Recovery Manager (RMAN)、Data Pumpなど

  • プログラム・インタフェース: 分散データベース・アプリケーション開発用の拡張機能を含む、Java Database Connectivity (JDBC)、Oracle Call Interface (OCI)、Universal Connection Pool (UCP)、Oracle Data Provider for .NET (ODP.NET)、PL/SQLなど

  • Oracle Data GuardおよびOracle Active Data Guardによるきわめて高い可用性。その他のレプリケーション・オプションには、Oracle Globally Distributed Databaseに組み込まれているRaftレプリケーションがあります。

  • 複数モデルのデータ(リレーショナル、テキスト、JSONなど)のサポート

  • 社内およびワールド・ワイドのOracleデータベース管理者スキル・セットの活用して、既存のライフサイクル管理および運用プロセスの維持が可能

  • エンタープライズ・レベルのサポート

  • NoSQLデータベースの最大限のスケーラビリティと可用性

分散パーティション化としてのOracle Globally Distributed Database

分散データベースは、データを複数の独立した物理データベース間に水平にパーティション化するデータベースのスケール・テクニックです。このような構成内の各物理データベースをシャードと呼びます。

アプリケーションの観点からすると、分散データベースは単一のデータベースのように見えます。シャードの数とそのシャード間でのデータ分散は、アプリケーションに対して完全に透過的です。

分散データベースはアプリケーションおよびアプリケーション開発者には単一のデータベースのように見えますが、データベース管理者の視点では、分散データベースは、それぞれが単一のシャードであり、一括して管理できる一連の別個のOracleデータベースで構成されています。

シャード表は、分散データベースのすべてのシャード間にパーティション化されます。各シャードの表のパーティションは、シャーディングされていないOracleデータベースで使用できるパーティションと同様です。

次の図は、単一の論理データベースのパーティション化と複数シャード間に分散されたパーティションの違いを示しています。

図1-2分散パーティション化としてのOracle Globally Distributed Database

図1-2の説明が続きます。
「図1-2分散パーティション化としてのOracle Globally Distributed Database」の説明

Oracle Globally Distributed Databaseは、CREATE SHARDED TABLE文を発行すると、シャード間にパーティションを自動的に分散します。パーティションの分散はアプリケーションに対して透過的です。前述の図は、シャード表の論理ビューとその物理的な実装を示しています。

Oracle Globally Distributed Databaseの利点

Oracle Globally Distributed Databaseは、最も要求の厳しいアプリケーションに対する線形スケーラビリティ、完全な障害分離およびグローバルなデータ分散を提供します。

Oracle Globally Distributed Databaseの主な利点は次のとおりです。

  • 線形のスケーラビリティ

    Oracle Globally Distributed Databaseの何も共有しないアーキテクチャにより、パフォーマンス・ボトルネックを排除し、無制限のスケーラビリティが得られます。Oracle Globally Distributed Databaseでは、1,000シャードまでスケーリングできます。

  • 最大限の可用性と障害の分離

    シャードはソフトウェア、CPU、メモリー、ストレージ・デバイスなどのリソースを共有しないため、単一障害点が排除されます。あるシャードの障害や処理速度の低下が別のシャードのパフォーマンスや可用性に影響しません。

    シャードは、Oracle Data GuardやOracle RACなどのOracle MAAベスト・プラクティス・ソリューションによって保護されます。

    シャードの計画外停止または計画メンテナンスはそのシャードのデータの可用性にしか影響しないため、フェイルオーバー・ブラウンアウト時などにそのごく一部のデータのユーザーのみが影響を受けます。

  • データの地理的分散

    Oracle Globally Distributed Databaseを使用すると、グローバル・データベースをデプロイできます。このグローバル・データベースでは、1つの論理データベースを複数の地理的位置に分散できます。これにより、データ・プライバシ規則の要件(データ主権)を満たせるようになり、特定のデータを利用者の近くに保存できるようにもなります(データ近接性)。

Oracle Globally Distributed Databaseを使用するアプリケーションの例

Oracle Globally Distributed Databaseは、様々なユースケースでメリットが得られます。

リアル・タイムOLTP

リアル・タイムOLTPアプリケーションは、非常に高いトランザクション処理スループット、大量のユーザー人口、膨大なデータ量を扱い、大規模に厳格なデータ整合性と管理を必要とします。たとえば、インターネットに接続する消費者アプリケーション、金融アプリケーション(モバイル決済など)、大規模SaaSアプリケーション(課金や診察アプリケーションなど)が挙げられます。このようなアプリケーションにOracle Globally Distributed Databaseを使用する利点は次のとおりです。

  • 1秒当たりのトランザクションの線形スケーラビリティ。増大したデータ量をサポートするために新しいシャードを追加したときにも応報時間が一定に保たれます
  • アプリケーションSLAの向上。特定のシャードに対する計画停止および計画外停止は、別のシャードに保存されたデータに影響することなく利用できます
  • トランザクション・アプリケーションに対応する厳格なデータ整合性
  • 複数のシャードに及ぶトランザクション
  • 複雑な結合、トリガー、およびストアド・プロシージャのサポート
  • 大規模な管理の簡易化

グローバル・アプリケーション

多くのエンタープライズ・アプリケーションは本質的にグローバルなもので、同じアプリケーションが複数の地理的位置にいる顧客に使用されます。一般に、こうしたアプリケーションは、複数の地域に分散される単一の論理グローバル・データベースを使用します。分散データベースには、次のような利点があります:

  • データ主権の厳格な施行。データ・プライバシ規制により、特定の地理的場所、地域、国、または地方にデータを保留することが必要になる場合があります。
  • 各場所に渡るデータ・レプリケーションの削減
  • アプリケーションSLAの向上。ある地域での計画停止および計画外停止は別の地域に影響しません

IoT (Internet of Things)とデータ・ストリーミング・アプリケーション

一般に、こうしたアプリケーションは、大量のデータを収集して、高速でストリーミングします。Oracle Globally Distributed Databaseには、最適化されたデータ・ストリーム・ライブラリが用意されています。このライブラリでは、Oracle Databaseダイレクト・パスI/Oテクノロジを使用して、分散データベースにデータを高速にロードします。このようなアプリケーションのデータ・ロードの要件は、1秒当たりのレコード数が数億になることもあります。データがデータベースに直接ロードされると、高度な問合せ処理と分析機能によってすぐに処理できるようになります。

機械学習

機械学習アプリケーションの多くは、リアルタイムでのモデルのトレーニングおよびスコアリングを必要とします。異常検出などのアルゴリズムを使用するアプリケーションに対応するモデルのトレーニングとスコアリングや、クラスタリングは、特定のエンティティに固有のものです(たとえば、一定の日数における特定のユーザーの金融取引パターンやデバイスのメトリックなど)。この種のデータは、ユーザーやデバイスに固有のシャーディング・キーを使用することで簡単にシャードできます。さらに、Oracle Database Machine Learningのアルゴリズムは、データベースで直接適用できるため、個別のデータ・パイプラインや機械学習処理インフラストラクチャが不要になります。

ビッグ・データの分析

TB単位のデータがあるときには、分散データベースにデータを格納することで、分析のためにデータをウェアハウスに格納する必要がなくなります。Oracle Globally Distributed Databaseの容量は最大1000シャードで、リレーショナル・データベースをウェアハウス規模のデータ・ストアに変えることができます。フェデレーテッド分散データベース・ソリューションを使用すると、同じアプリケーションを実行する様々な場所にある複数のデータベース・インストールをフェデレーテッド分散データベースに変換できるため、データを移動せずにデータ分析を実行できます。

NoSQLの代替

NoSQLソリューションには、リレーショナル・スキーマ、SQL、複合データ型、オンラインのスキーマ変更、マルチコアのスケーラビリティ、セキュリティ、ACIDプロパティ、単一シャード操作のためのCRなど、主要なRDBMS機能がありません。Oracle Globally Distributed Databaseでは、NoSQLで得たほとんど無制限のスケーリングとパーティション化と、Oracle Databaseのすべての機能と利点も得られます。

柔軟なデプロイ・モデル

Oracle Globally Distributed Databaseの何も共有しないアーキテクチャにより、データはオンプレミス、クラウド、またはクラウドとオンプレミス・システムのハイブリッドに保持できます。データベース・シャードでは一切のリソースを共有しないため、シャードはオンプレミスおよびクラウドの様々なシステムのどこにでも存在できます。

すべてのシャードをオンプレミスにデプロイすることも、すべてをクラウドに配置することも、ニーズにあわせてクラウドとオンプレミスに分割することもできます。

シャードは、あらゆるデータベース・デプロイメント・モデル(単一インスタンス、Exadata、Oracle RACなど)にデプロイできます。

Oracle Globally Distributed Databaseでのデータ・レプリケーション

Oracle Globally Distributed Databaseは、可用性のためにレプリケーションに依存します。Oracle Globally Distributed Databaseは、ニーズに応じて様々なレプリケーション手段を提供します。

レプリケーションによって高可用性、障害回復、および読取りのスケーラビリティ向上が実現します。レプリケーションの単位にはシャード、シャードの一部またはシャードのグループがあります。

分散データベースのレプリケーション・トポロジは、GDSCTLコマンド構文を使用して宣言的に指定します。Oracle Data GuardまたはRaftレプリケーションを選択して、データをレプリケートできます。Oracle Globally Distributed Databaseは、指定されたレプリケーション・トポロジを調達されたシステムに自動的にデプロイし、データ・レプリケーションを有効にします。

シャード・レベルのレプリケーション

Oracle Globally Distributed Databaseでは、シャードはデータベースです。シャード・データベースの可用性は、1つ以上のシャードが停止したり、処理速度が低下しても影響されません。Oracle Data Guardのレプリケーションは、個別のシャードレベルの高可用性を提供するために使用できます。レプリケーションは分散データベースが作成されると自動的に構成およびデプロイされます。

Oracle Data Guardは、Oracle Globally Distributed Databaseと密接に統合されており、厳格なデータの一貫性とデータ損失ゼロで高可用性と障害時リカバリを提供します。Oracle Data Guardのレプリケーションは、高可用性およびデータ保護のために、シャード(プライマリ)の1つ以上の同期されたコピー(スタンバイ)を維持します。スタンバイはローカルまたはリモートにデプロイでき、Oracle Active Data Guardを使用する場合は、読取り専用アクセスでオープンすることもできます。

詳細は、「Oracle Data Guardを使用したシャード・レベルのレプリケーション」を参照してください。

オプションで、シャードレベルの高可用性のために、レプリケーションによって補完されるOracle RACを使用すると、クラスタが停止した場合にシャードレベルのデータの可用性を維持できます。各シャードは、Oracle RACクラスタにデプロイすることで、すぐにノード障害からの保護が可能です。たとえば、各シャードを2ノードのOracle RACクラスタにすることができます。Oracle Globally Distributed Databaseは、計画外の停止が発生したときに、データベース接続をシャードからレプリカに自動的にフェイルオーバーします。

Raftレプリケーション

シャード・レベルでのレプリケーションではなく、Oracle Globally Distributed DatabaseのRaftレプリケーション機能では、より小さなレプリケーション・ユニットが作成され、チャンク割当て、チャンク移動、ワークロードの分散、およびスケーリング時のバランス(シャードの追加または削除)に対応するためにシャード間に自動的に分散されます(計画的または計画外のシャード可用性変更を含む)。

RaftレプリケーションはOracle Globally Distributed Databaseに組み込まれており、コンセンサスベースの高パフォーマンスで低オーバーヘッドの可用性ソリューションを提供し、分散レプリカとデータ損失ゼロの高速フェイルオーバーを実現すると同時に、シャードが失敗した場合にはレプリケーション・ファクタを自動的に維持します。Raftレプリケーション管理のオーバーヘッドは、シャードの数で増加しません。NoSQLデータベースに慣れており、レプリケーションの仕組みについて知ろうとしていなくても、Oracle Globally Distributed Databaseのネイティブ・レプリケーションは機能します。

Data Guardレプリケーションとは異なり、シャードの追加または削除時にRaftレプリケーションを再構成する必要はなく、レプリカをアクティブに管理する必要はありません。

詳細は、「Raftレプリケーションの構成および管理」を参照してください。

データ配分方法

Oracle Globally Distributed Databaseは表のパーティション化に基づくため、Oracle Databaseで提供されるサブパーティション方法はすべてOracle Globally Distributed Databaseでもサポートされています。データ分散方法は、シャードへのデータの配置を制御します。Oracle Globally Distributed Databaseは、システム管理、ユーザー定義、ディレクトリベースまたはコンポジットの分散方法をサポートしています。

  • システム管理のデータ分散では、データをシャードにマップする必要はありません。コンシステント・ハッシュによるパーティション化を使用して、データが自動的にシャード間に分散されます。パーティション化アルゴリズムにより、データがシャード全体に、均一かつランダムに分散されます。

  • ユーザー定義のデータ分散では、個々のシャードへのデータのマッピングをユーザーが明示的に指定できます。これは、パフォーマンスや規制などの理由で、特定のデータを特定のシャードに格納する必要があり、管理者がシャード間のデータの移動を完全に制御する必要がある場合に使用します。

  • コンポジットのデータ分散では、2つのレベルのパーティション化を使用できます。最初にデータが範囲またはリストでパーティション化されてから、コンシステント・ハッシュによってさらにパーティション化されます。

    多くのユースケース(特に、データ主権とデータの近接性の要件)で、コンポジット・メソッドは、システム管理とユーザー定義の両方の方法の最良点を提供し、必要な自動化とデータ配置の制御を可能にします。

  • ディレクトリベースのデータ分散は、ユーザー定義方法の機能拡張です。これにより、シャーディング・キーに関連付けられたデータ・レコードの場所は、ユーザー・プリファレンスに基づいて実行時に動的に指定されます。キーの場所情報はディレクトリに格納され、ここで数十万の大量のキー値セットを保持できます。

    個々のキー値をある場所から別の場所に移動し、一括移動してスケール・アップまたはスケール・ダウンし、データおよびロード・バランシングのために自由に移動できます。場所情報には、シャード・データベース情報およびパーティション情報を含められます。

詳細は、データ分散方法を参照してください

クライアント・リクエストのルーティング

Oracle Globally Distributed Databaseは、アプリケーションからシャードへの直接的なキーベースのルーティング、シャード・カタログを使用したプロキシによるルーティングおよびシャードとのアフィニティが与えられた中間層(アプリケーション・コンテナ、Webコンテナなど)へのルーティングをサポートしています。Oracle Databaseクライアント・ドライバおよび接続プールは、分散データベース対応です。

  • キー・ベースのルーティング。Oracleクライアント側ドライバ(JDBC、OCI、UCP、ODP.NET)は、高パフォーマンスのデータ依存ルーティングのために接続文字列に指定されたシャーディング・キーを認識できます。接続レイヤーのシャード・ルーティング・キャッシュは、データが常駐するシャードにデータベース・リクエストを直接ルーティングするために使用されます。

  • プロキシによるルーティング。Oracle Globally Distributed Databaseは、シャーディング・キーを指定していない問合せのルーティングをサポートしています。これにより、あらゆるデータベース・アプリケーションは、問合せを処理するシャードを指定することなく、SQL文を実行する柔軟性が得られます。プロキシ・ルーティングでは、単一シャードの問合せとマルチシャードの問合せを処理できます。

  • 中間層ルーティング。データ層のパーティション化に加えて、Web層とアプリケーション層のパーティション化も可能です。こうした中間層のシャードを分散することで、データベース・シャードの特定のセットを処理して、スイム・レーンというパターンを作成します。スマート・ルーターは、クライアントのリクエストを特定のシャーディング・キーに基づいて適切なスイム・レーンにルーティングできます。このスイム・レーンにより、シャードのサブセットに対する接続が確立されます。

問合せ処理

Oracle Globally Distributed Databaseをサポートするために、問合せおよびDML文を変更する必要はありません。ほとんどの既存のDDL文は、非シャードOracle Databaseと同じ構文およびセマンティクスを使用して、分散データベースで同様に機能します。

構成内のすべてのシャードでDDL文を処理するのと同じ方法で、特定のOracle提供のPL/SQLプロシージャも実行できます。

また、Oracle Globally Distributed Databaseには、分散データベースに対してのみ実行できるSQL DDL文の独自のキーワードがあります。

高速データ収集

SQL*Loaderにより、Oracle Globally Distributed Databaseシャードへのダイレクト・データ・ロードが可能になり、高速データ収集が可能になります。

SQL*Loaderは、外部ファイルからOracleデータベースにデータを移動する際に使用するバルク・ローダー・ユーティリティです。その構文はDB2ローダー・ユーティリティの構文と同様ですが、より多くのオプションを使用できます。SQL*Loaderは、様々なロード形式、選択的ロード、および複数表のロードをサポートしています。

SQL*Loaderクライアントは、データを個別のファイルに分割して複数のクライアントを起動しなくても、データのパラレル・ダイレクト・パス・ロードを自動的に開始できます。

その他の利点は、次のとおりです。

  • ストリーミング機能により、大規模なクライアントのグループからのデータをブロックなしで受信できます

  • ネイティブUCPを使用するOracle RACシャード・アフィニティに従ったレコードのグループ化

  • レコード処理をI/Oから切り離した上でのCPU割当ての最適化

  • ダイレクト・パス・インサート(SQLをバイパスしてデータベース・ファイルに直接書き込むこと)による、Oracle Databaseの挿入メソッドの高速化

デプロイの自動化

Oracle Globally Distributed Databaseのデプロイは、Terraform、Kubernetes、およびAnsibleスクリプトで高度に自動化されます。

このデプロイ用スクリプトは、目的のデプロイ・トポロジについて記述したシンプルな入力ファイルを受け取って、単一のホストから実行することですべての分散データベース・ホストにシャードをデプロイします。スクリプトには、エラー発生時のための一時停止操作、再開操作、およびクリーン・アップ操作が含まれています。

データの移行

Oracle Globally Distributed Databaseシャーディング・アドバイザ・ツールは、非分散データベースから分散データベースに移行するための分散データベース・スキーマ設計に役立ちます。Oracle Data Pumpは、分散データベース対応で、非シャードOracleデータベースからシャードOracleデータベースにデータを移行するために使用します。

シャーディング・アドバイザ

シャーディング・アドバイザはOracle Globally Distributed Databaseに付属するツールで、現在のデータベース・スキーマおよびワークロードを分析して、トポロジ構成およびデータベース・スキーマ設計を推奨することで、最適な分散データベース構成を簡単に設計できるようにします。シャーディング・アドバイザは、並列処理(問合せの処理をシャード間に均等に分散する)、クロスシャード結合操作の最小化、重複データの最小化などの主要目標に基づいて推奨事項を作成します。

Oracle Data Pump

各シャードでOracle Data Pumpを実行することで、データをシャードに直接ロードできます。この方法は非常に高速です。これは、データ・ロード操作全体が、データ・セット全体の最大サブセットを使用してシャードをロードするために必要な時間内に完了できるためです。

ライフサイクル管理

Oracle Globally Distributed Databaseのコマンドライン・インタフェースとOracle Enterprise Managerは、分散データベースの管理に役立ちます。

この提供されたツールを使用すると、次の作業を実行できます。

  • スクリプトによる新しい分散データベースプロビジョニング
  • オンラインでのシャードの追加と自動リバランスの活用による必要に応じたスケール・アウト
  • 負荷が低いときのデータの移動とハードウェアの集約によるスケール・イン
  • Enterprise Managerを使用したパフォーマンス統計情報の監視
  • Cloudバックアップ・サービス、RMAN、およびZero Data Loss Recovery Applianceを使用した障害回復のためのバックアップ作成
  • ローリング・モードのoPatchAutoによって自動化されるパッチ適用とアップグレード

フェデレーテッド分散データベース

複数の既存のデータベースを1つのOracle Globally Distributed Databaseアーキテクチャに統合します。

グローバルな事業では、複数の地域にある複数の部署にデプロイした同じアプリケーションの複数のインスタンスを用意することがあります。フェデレーテッド分散データベースにより、そうしたアプリケーションのデータベースを単一のフェデレーテッド・データベースにマッピングできるようなります。そうすることで、次の利点があります。

  • 問合せは、マルチシャード問合せコーディネータを使用することで単一のフェデレーテッド・データベースに対してシームレスに処理できます
  • レポートや分析を目的としたデータのレプリケートが不要になります
  • スキーマおよびデータベース・バージョンの差異が許容されます

この次の作業

要件に最適なOracle Globally Distributed Database構成を計画およびデプロイすることは、困難なタスクになることがあります。次のロードマップは、分散データベースの最初の計画からライフサイクル管理までのプロセスのガイドとして使用してください。