14.8 クライアント/サーバー接続のためのキーベース・ルーティングの構成

キーベース(または直接)ルーティングを使用して、シャード・データベースにクライアント/サーバー接続を確立する方法を学習します。シャードへのキーベース・ルーティングでは、必要なトランザクションに関連するデータが含まれている単一の関連するシャードに対して、シャーディング・キーを使用して接続が確立されます。

14.8.1 キー・ベースのルーティングについて

キーベースまたは直接ルーティングでは、接続文字列で指定されたシャーディング・キーの値に従って、クライアントからシャードにデータベース接続が直接確立されます。

Oracle Globally Distributed Databaseを使用すると、複数の独立したOracleデータベースにデータを水平にパーティション化できます。このような構成内の各物理データベースをシャードと呼びます。シャード表パーティションはシャーディング・キーに基づいて表領域レベルでシャード間に分散されます。キーの例として顧客ID、アカウント番号、国IDなどがあります。

シャード・ディレクタは、グローバル・サービス・マネージャ(GSM)の特殊な実装であり、シャード・データベースに接続するクライアントのリージョナル・リスナーとして機能します。シャーディング・キーが接続要求で渡されると、シャード・ディレクタは、次のように適切なシャードへの接続を確立します。
  • シャード・ディレクタは、サービスとキー値の検索を実行し、クライアントをデータの格納されている共有場所へとリダイレクトします。
  • クライアントは、SQL文を実行して、結果をそのシャードから直接受け取ります。

直接ルーティングでは、1つの接続内で発行されたすべてのデータベース要求が、指定されたキー値と関連付けられているデータと関連があることが前提とされます。クライアントが別のキー値を持つデータにアクセスする必要がある場合は、新しいデータベース接続を確立する必要があります。

接続文字列は、Oracle Databaseが一貫性のあるハッシュ、リストまたは範囲によってシャードされる場合、単一のシャーディング・キーを含みます。Oracle Databaseでは、2レベルのシャーディングを可能にするコンポジット・シャーディングもサポートしています。まずデータが範囲またはリストによってシャードされ、次に一貫したハッシュによってさらにシャードされます。コンポジット・シャーディング方法では、接続文字列にはシャーディング・キー(一貫性のあるハッシュによるシャーディング用)とスーパー・シャーディング・キー(リストまたは範囲によるシャーディング用)の両方が含まれます。

14.8.2 接続文字列でのシャーディング・キーの指定

接続文字列またはtnsnames.oraファイルのCONNECT_DATAセクションにシャーディング・キーを指定することで、シャードに直接接続できます。Oracle Globally Distributed Databaseのデプロイメントの(エンドポイントとしての)シャード・ディレクタ、グローバル・サービス名およびリージョン名を指定することもできます。

次のいずれかのパラメータを使用して、シャード(パーティション)キー値を指定します。
  • SHARDING_KEY: 特定のシャードのシャーディング・キーを簡易テキスト形式で指定します。

  • SHARDING_KEY_ID: 簡易テキスト形式でシャーディング・キーの一意のSHA-256 IDを指定します。これにより、シャーディング・キーのSHA-256ハッシュ値をすでに計算したクライアントは、接続文字列で直接渡すことができます。このパラメータは、ディレクトリベースのシャーディングに使用します。

  • SUPER_SHARDING_KEY: シャードのコレクションのシャード領域キーを簡易テキスト形式で指定します。

  • SHARDING_KEY_B64: 特定のシャードのシャーディング・キーを、base64でエンコードされたバイナリ形式で指定します。

  • SUPER_SHARDING_KEY_B64: base64でエンコードされたバイナリ形式で、シャードのコレクションにシャード領域キーを指定します。

接続文字列は、グローバル・サービスへの接続で要求される形式になっている必要があります。

シャードの接続文字列の例を次に示します。ここでは、SHARDING_KEYおよびSUPER_SHARDING_KEYパラメータ値が簡易テキスト形式で指定されています。
(DESCRIPTION=
  (FAILOVER=on)
  (ADDRESS_LIST=
    (LOAD_BALANCE=ON)
    (ADDRESS=(host=sales-east1)(port=1522))
    (ADDRESS=(host=sales-east2)(port=1522))
    (ADDRESS=(host=sales-east3)(port=1522)))
  (ADDRESS_LIST=
    (LOAD_BALANCE=ON)
    (ADDRESS=(host=sales-west1)(port=1522))
    (ADDRESS=(host=sales-west2)(port=1522))
    (ADDRESS=(host=sales-west3)(port=1522)))
  (CONNECT_DATA=
   (SERVICE_NAME=sales)
   (SHARDING_KEY=40598230)(SUPER_SHARDING_KEY=gold)
   (REGION=east))
)
シャードの接続文字列の例を次に示します。ここでは、SHARDING_KEY_IDパラメータ値が簡易テキスト形式で指定されています:
(DESCRIPTION=
  (FAILOVER=on)
  (ADDRESS_LIST=
    (LOAD_BALANCE=ON)
    (ADDRESS=(host=sales-east1)(port=1522))
    (ADDRESS=(host=sales-east2)(port=1522))
    (ADDRESS=(host=sales-east3)(port=1522)))
  (ADDRESS_LIST=
    (LOAD_BALANCE=ON)
    (ADDRESS=(host=sales-west1)(port=1522))
    (ADDRESS=(host=sales-west2)(port=1522))
    (ADDRESS=(host=sales-west3)(port=1522)))
  (CONNECT_DATA=
   (SERVICE_NAME=sales)
   (SHARDING_KEY_ID='7E01C6D3F5AF3116668AFB6B2376DAA457165A34020617884C216F1ADAA25C7B')
   (REGION=east))
)