1 Oracle Shardingの概要

Oracle Shardingによるシャード・データベースの管理に関連する概念を詳しく学びます。

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

シャーディングについて

シャーディングは、独立したデータベース間でデータが水平にパーティション化されるデータ階層アーキテクチャです。

データベースは、独自のローカル・リソース(CPU、メモリー、フラッシュまたはディスク)を持つ専用サーバーでホストされます。このような構成の各データベースはシャードと呼ばれます。すべてのシャードが一体的に単一の論理データベースを形成し、これはシャード・データベース(SDB)と呼ばれます。

水平パーティション化にはシャード間のデータベース表の分割が伴い、これによって各シャードには、列は同じですが行は異なるサブセットを持つ表が含まれます。この方法で分割された表はシャード表とも呼ばれています。

次の図は、3つのシャード間で水平パーティション化された表を示しています。

図1-1 シャード間の表の水平パーティション化

図1-1の説明が続きます
「図1-1 シャード間の表の水平パーティション化」の説明

シャーディングはシェアードナッシング・ハードウェア・インフラストラクチャに基づいており、シャードがCPU、メモリーまたはストレージ・デバイスなどの物理リソースを共有しないため、単一障害点が排除されます。シャードはソフトウェアの観点でも疎結合されています。クラスタウェアが実行されないためです。

通常、シャードは専用サーバーでホストされます。これらのサーバーには、市販のハードウェアまたはエンジニアド・システムを使用できます。シャードは、単一インスタンスまたはOracle RACデータベースで実行できます。それらは、オンプレミス、クラウド、またはオンプレミスとクラウドのハイブリッド構成に配置できます。

データベース管理者の視点からすると、SDBは、まとめて管理することも個別に管理することも可能な複数のデータベースで構成されています。ただし、アプリケーションの視点からはSDBは単一のデータベースのように見えます。シャードの数とそのシャード間におけるデータ分散は、データベース・アプリケーションに対して完全に透過的です。

シャーディングは、シャード・データベース・アーキテクチャに適したカスタム・アプリケーションを対象としています。シャーディングを使用するアプリケーションには、シャーディング・キーを使用して主にデータにアクセスする適切に定義されたデータ・モデルおよびデータ分散方法(コンシステント・ハッシュ、範囲、リストまたはコンポジット)が必要です。シャーディング・キーの例としてcustomer_idaccount_noまたはcountry_idがあります。

シャーディングの利点

シャーディングは、最も負荷の高いアプリケーションに対する線形の拡張性と完全な障害分離を提供します。

シャーディングには、次のような主な利点があります。

  • 線形のスケーラビリティ。シャーディングによりパフォーマンス上のボトルネックを排除し、シャードを追加することでパフォーマンスと容量を線形に拡張できます。

  • 障害の封じ込め。シャーディングは、共有ディスク、SAN、クラスタウェアなど、単一障害点を排除するシェアード・ナッシング・ハードウェア・インフラストラクチャであり、強力な障害分離が可能なため、1つのシャードの障害または処理速度の低下は他のシャードのパフォーマンスまたは可用性に影響しません。

  • データの地理的分散.シャーディングは、データを特定の管轄に配置することが必要なときに、特定のデータをそのコンシューマの近くに格納して定期的な要求を満たすことを可能にします。

  • ローリング・アップグレード。1回につき1つのシャードへの構成変更の適用は他のシャードに影響を及ぼさないため、管理者は最初にデータの小さなサブセットで変更をテストできます。

  • クラウド・デプロイメントの簡潔性。シャーディングはクラウドへのデプロイメントに適しています。シャードのサイズは必要に応じて設定し、使用可能なクラウド・インフラストラクチャを収容して、必要なサービス・レベルを実現できます。Oracle Shardingは、オンプレミス、クラウドおよびハイブリッドのデプロイメント・モデルをサポートしています。

シャーディングを実装するNoSQLデータ・ストアとは異なり、Oracle ShardingはエンタープライズRDBMSの機能を犠牲にすることなく、シャーディングの利点を提供します。たとえば、Oracle Shardingは次の要素をサポートしています。

  • リレーショナル・スキーマ

  • データベース・パーティション化

  • ACIDプロパティおよび読取りの一貫性

  • SQLおよびその他のプログラム的インタフェース

  • 複合データ型

  • オンラインのスキーマ変更

  • マルチコアの拡張性

  • 高度なセキュリティ

  • 圧縮

  • 高可用性機能

  • エンタープライズ級のバックアップおよびリカバリ

Oracle Shardingアーキテクチャのコンポーネント

Oracle Shardingは、使用に適したアプリケーションのためのスケーラビリティ機能および可用性機能です。ハードウェアまたはソフトウェアを共有しないOracleデータベースのプールで、データの分散およびレプリケーションを可能にします。

アプリケーションは、データベースのプールを単一の論理データベースとして認識します。アプリケーションは、データベース(シャード)をプールに追加することによって、どのプラットフォーム上でも、いずれのレベルにも弾力的に(データ、トランザクションおよびユーザーを)スケーリングできます。Oracle Databaseでは、1,000シャードまでのスケーリングがサポートされています。

次の図は、Oracle Shardingの主要なアーキテクチャ・コンポーネントを示しています。

  • シャード・データベース(SDB) – ハードウェアまたはソフトウェアを共有しない物理Oracle Database (シャード)のプールで水平にパーティション化された単一の論理Oracle Database

  • シャード - シャード・データベースのサブセットをホストする独立した物理Oracleデータベース

  • グローバル・サービス - SDBのデータへのアクセスを提供するデータベース・サービス

  • シャード・カタログ – 自動的なシャードのデプロイメント、シャード・データベースの集中管理、およびマルチシャード問合せをサポートするOracle Database

  • シャード・ディレクタ – シャーディング・キーに基づいて高パフォーマンスな接続ルーティングを可能にするネットワーク・リスナー

  • 接続プール - 実行時に、プールされている接続にデータベース・リクエストをルーティングすることによって、シャード・ディレクタとして機能します

  • 管理インタフェース - GDSCTL (コマンドライン・ユーティリティ)およびOracle Enterprise Manager (GUI)

図1-2 Oracle Shardingのアーキテクチャ

図1-2の説明が続きます。
「図1-2 Oracle Shardingのアーキテクチャ」の説明

シャード・データベースとシャード

シャードは、独自のローカル・リソース(CPU、メモリーまたはディスク)を持つデータベース・サーバーでホストされる独立したOracleデータベースです。シャードには共有記憶域は必要ありません。

シャード・データベースはシャードの集まりです。各シャードは、1つのリージョンに配置するか、別々のリージョンに配置できます。Oracle Shardingのコンテキストでのリージョンは、1つのデータ・センターまたはネットワーク上で近接している複数のデータ・センターを表します。

シャードは、高可用性(HA)および障害時リカバリ(DR)のためにOracleレプリケーション・テクノロジ(Data Guardなど)を使用してレプリケートされます。HAのためには、プライマリ・シャードが配置されているリージョンと同じリージョンにスタンバイ・シャードを配置できます。DRのためには、スタンバイ・シャードを別のリージョンに配置します。

グローバル・サービス

グローバル・サービスは、従来のデータベース・サービスの概念を拡張したものです。グローバル・サービスでは、従来のデータベース・サービスのすべてのプロパティがサポートされます。シャード・データベースでは、グローバル・サービス用の追加のプロパティが設定されます。たとえば、データベース・ロール、レプリケーション・ラグの許容値、クライアントとシャード間のリージョン・アフィニティなどがあります。読取り/書込みトランザクション・ワークロードの場合は、SDB内のプライマリ・シャードからデータにアクセスするために、単一のグローバル・サービスが作成されます。Active Data Guardを使用する高可用性シャードの場合は、別個の読取り専用グローバル・サービスを作成できます。

シャード・カタログ

シャード・カタログは特殊な目的のOracle Databaseであり、SDB構成データの永続的なストアとなり、シャード・データベースの集中管理で主要な役割を果たします。すべての構成の変更(シャードやグローバル・サービスの追加、削除など)は、シャード・カタログで開始されます。SDBのすべてのDDLは、シャード・カタログに接続することによって実行されます。

シャード・カタログには、SDBのすべての重複表のマスター・コピーも含まれています。シャード・カタログは、マテリアライズド・ビューを使用して、すべてのシャードの重複表に変更を自動的にレプリケートします。シャード・カタログは、マルチシャード問合せ、およびシャーディング・キーを指定しない問合せを処理するための問合せコーディネータとしても機能します。

シャード・カタログの高可用性のためにOracle Data Guardを使用することをベスト・プラクティスとしてお薦めします。シャード・カタログの可用性はSDBの可用性に影響しません。シャード・カタログの停止は、スタンバイ・シャード・カタログへの自動フェイルオーバーを完了するために必要な短い時間に、保守操作またはマルチシャード問合せを実行する機能にのみ影響します。トランザクションは引き続きSDBにルーティングされて実行され、カタログの停止の影響を受けません。

シャード・ディレクタ

Oracle Database 12cでは、グローバル・サービス・マネージャが導入され、データベース・ロール、負荷、レプリケーション・ラグおよびローカル性に基づいて接続がルーティングされます。Oracle Shardingをサポートするために、グローバル・サービス・マネージャはデータの場所に基づいた接続のルーティングをサポートします。グローバル・サービス・マネージャは、Oracle Shardingのコンテキストではシャード・ディレクタと呼ばれます。

シャード・ディレクタは、グローバル・サービス・マネージャの特殊な実装であり、SDBに接続するクライアントのリージョナル・リスナーとして機能します。シャード・ディレクタはSDBの現在のトポロジ・マップを維持します。接続リクエスト中に渡されたシャーディング・キーに基づいて、シャード・ディレクタは適切なシャードに接続をルーティングします。

一般的なSDBの場合、一連のシャード・ディレクタが各リージョンの市販のローエンドの専用サーバーにインストールされます。高可用性を実現するには、複数のシャード・ディレクタをデプロイします。Oracle Database 12cリリース2では、特定のリージョンに最大5個のシャード・ディレクタをデプロイできます。

シャード・ディレクタの主な機能を次に示します。

  • SDB構成に関する実行時データおよびシャードの可用性の保守

  • 配下のリージョンと他のリージョンの間のネットワーク待機時間の測定

  • クライアントがSDBへの接続に使用するためのリージョナル・リスナーとして機能します

  • グローバル・サービスの管理

  • 接続ロード・バランシングの実行

接続プール

Oracle Databaseは、データ・アクセス・ドライバ(OCI、JDBC、ODP.NETなど)の接続プーリングをサポートしています。Oracle 12cリリース2では、これらのドライバは接続リクエストの一部として指定されたシャーディング・キーを認識できます。同様に、JDBCクライアントのOracle Universal Connection Pool (UCP)は、接続URLで指定されたシャーディング・キーを認識できます。また、Oracle UCPを使用すると、非Oracleアプリケーション・クライアント(Apache Tomcat、WebSphereなど)は、Oracle Shardingと連携できます。

OracleクライアントはUCPキャッシュのルーティング情報を使用し、アプリケーションから渡されたシャーディング・キーに基づいて、データベース・リクエストを適切なシャードに直接ルーティングします。データベース・リクエストをそのようにデータ依存でルーティングすることにより、余分なネットワークのホップが排除され、ボリュームの大きいアプリケーションのトランザクション待機時間が減少します。

ルーティング情報は、シャード・ディレクタを使用して確立されるシャードへの最初の接続時にキャッシュされます。キャッシュされた範囲内のシャーディング・キーに対する後続のデータベース・リクエストは、シャード・ディレクタをバイパスしてシャードに直接ルーティングされます。

UCPと同様に、シャード・ディレクタは接続文字列に指定されたシャーディング・キーを処理して、ルーティング情報をキャッシュできます。ただし、UCPはすでに確立されている接続を使用してデータベース・リクエストをルーティングしますが、シャード・ディレクタは接続リクエストをシャードにルーティングします。シャードが使用できなくなった場合、またはシャーディング・トポロジに変更が発生した場合、ルーティング・キャッシュは自動的にリフレッシュされます。高パフォーマンスのデータ依存のルーティングにするには、SDBのデータへのアクセス時に接続プールを使用することをお薦めします。

SDBの管理インタフェース

2つのインタフェース(Oracle Enterprise Manager Cloud ControlおよびGDSCTL)を使用して、Oracleシャード・データベースをデプロイ、管理および監視できます。

Cloud Controlでは、グラフィカル・ユーザー・インタフェースを使用してシャード・データベースのライフサイクル管理を有効化します。可用性およびパフォーマンスのためにSDBを管理および監視できます。シャード、サービス、シャード・ディレクタおよび他のシャーディング・コンポーネントの追加およびデプロイなどのタスクを実行できます。

GDSCTLは、SDBの構成の指定およびデプロイメントの自動化を行うための簡単な宣言的手段を提供するコマンドライン・インタフェースです。たとえば、次のようないくつかのGDSCTLコマンドを使用するだけで、SDBを作成できます。

  • CREATE SHARDCATALOG

  • ADD GSMおよびSTART GSM (シャード・ディレクタの作成および開始)

  • CREATE SHARD (各シャードが対象)

  • DEPLOY

GDSCTLのDEPLOYコマンドは、シャードおよびそれに対応するリスナーを自動的に作成します。また、このコマンドは管理者によって指定されたシャードレベルの高可用性のために使用されるレプリケーション構成を自動的にデプロイします。

関連項目:

シャーディングに対するアプリケーションの適合性

電子商取引、モバイル、ソーシャル・メディアなど、多くの顧客対応Webアプリケーションはシャーディングに適切です。そのようなアプリケーションには、適切に定義されたデータ・モデルおよびデータ分散方法(ハッシュ、範囲、リストまたはコンポジット)があり、主にシャーディング・キーを使用してデータにアクセスします。

シャーディング・キーの例として顧客ID、アカウント番号、country_idなどがあります。通常、アプリケーションでは、シャーディングが十分に機能するためにデータの部分的な非正規化も必要となります。

シャード・アーキテクチャの利点を享受するには、シャーディングを使用する予定がない既存のアプリケーションで、一定のレベルの再設計が必要となります。シャーディング・キーを渡すのみで済む簡単な場合や、シャード・データベースで必要となるデータおよびワークロードの水平パーティション化を行うことができない場合があります。

単一の値のシャーディング・キーに関連付けられているデータにアクセスするトランザクションは、シャード・データベースの主なユースケースです。たとえば、顧客のレコード、サブスクライバのドキュメント、財務トランザクション、電子商取引トランザクションなどの検索および更新です。同じ値のシャーディング・キーを持つすべての行は同じシャード上にあることが保証されるため、そのようなトランザクションは常に単一のシャードで最高のパフォーマンスで実行され、最高レベルの一貫性となります。マルチシャード操作はサポートされますが、パフォーマンスおよび一貫性のレベルは低くなります。そのようなトランザクションには単純な集計、レポートなどが含まれ、単一シャードのトランザクションが優位を占めるワークロードに比べて、シャード・アプリケーションで重要度の低い役割を果たします。