日本語PDF

1 Oracle Shardingの概要

ここでは、Oracle Shardingで実行できることについて大まかな概念について学習します。

次の項目では、Oracle Shardingの機能および利点について説明します。

シャーディングとは

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

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

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

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

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



Oracle Shardingについて

Oracle Shardingは、ハードウェアまたはソフトウェアを共有しないOracleデータベースのプール間でデータを自動的に分散およびレプリケートできる、Oracle Databaseの機能です。Oracle Shardingは、ここで説明するように、成熟した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およびActive Data Guardによる究極の可用性。

    ノート:

    Oracle ShardingのOracle GoldenGateレプリケーション・サポート高可用性は、Oracle Database 21cでは非推奨です。
  • 複数モデルのデータ(リレーショナル、テキスト、JSONなど)のサポート

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

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

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

分散パーティション化としてのOracle Sharding

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

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

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

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

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

図1-2 分散パーティション化としてのシャーディング

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

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

Oracle Shardingの利点

Oracle Shardingは、最も負荷の高いアプリケーションに対する線形の拡張性を備え、完全な障害分離およびグローバルなデータ分散を実現します。

Oracle Shardingには、次のような主な利点があります。

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

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

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

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

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

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

  • データの地理的分散

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

データベース・シャーディングを使用するアプリケーションの例

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

リアル・タイムOLTP

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

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

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

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

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

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

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

機械学習

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

ビッグ・データの分析

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

NoSQLの代替

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

柔軟なデプロイメント・モデル

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

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

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

Oracle Shardingの高可用性

Oracle Shardingは、高可用性および障害時リカバリを提供するためにOracle Data Guardと緊密に統合されています。レプリケーションはシャード・データベースが作成されると自動的に構成およびデプロイされます。

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

Oracle GoldenGateは、ファイングレイン・アクティブ-アクティブ・レプリケーションに使用します。ただし、アプリケーションは、潜在的なフェイルオーバー発生時の競合とデータ損失に対処できる必要があります。

ノート:

Oracle ShardingのOracle GoldenGateレプリケーション・サポート高可用性は、Oracle Database 21cでは非推奨です。

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

シャーディング方法

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

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

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

  • コンポジット・シャーディングでは、2つのレベルのシャーディングを使用できます。まずデータが範囲またはリストによってシャードされ、次にコンシステント・ハッシュによってさらにシャードされます。

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

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

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

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

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

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

問合せの実行

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

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

また、Oracle Shardingには、シャード・データベースに対してのみ実行できるSQL DDL文の独自のキーワードがあります。

高速データ収集

SQL*Loaderにより、高速データ収集の際にはデータをデータベース・シャードに直接ロードできます。

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

  • ストリーミング機能により、大規模なクライアントのグループからのデータをブロックなしで受信できます
  • ネイティブUCPを使用するOracle RACシャード・アフィニティに従ったレコードのグループ化
  • レコード処理をI/Oから切り離した上でのCPU割当ての最適化
  • ダイレクト・パス・インサート(SQLをバイパスしてデータベース・ファイルに直接書き込むこと)による、Oracle Databaseの挿入メソッドの高速化

デプロイの自動化

シャード・データベースのデプロイメントは、スクリプト(Terraform、Kubernetes、およびAnsible)によって高度に自動化されます。

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

データ・ポンプの移行

Oracle Data Pumpはシャーディング対応で、非シャードOracleデータベースからシャードOracleデータベースにデータを移行するために使用します。

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

シャードのライフサイクル管理

Oracle Shardingコマンドライン・インタフェースとOracle Enterprise Managerは、シャード・データベースの管理に役立ちます。

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

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