プライマリ・コンテンツに移動

Oracle® Data Provider for .NET開発者ガイド ODAC 12.2c リリース1 (12.2.0.1) for Microsoft Windows E88311-03 |
| 目次 | 索引

前 | 次 |

# データベース・シャーディング

シャーディングは、独立したデータベース間でデータが水平にパーティション化されるデータ階層アーキテクチャです。このような構成内の各データベースをシャードと呼びます。すべてのシャードが一体的に単一の論理データベースを形成し、これはシャード・データベースと呼ばれます。シャーディングは、シェアード・ナッシング型のデータベース・アーキテクチャです。物理データベースが独立しており、CPU、メモリー、ストレージ・デバイスを共有しません。ただし、アプリケーション側から見ると、物理データベースのコレクションが1つの論理データベースのように見えます。

シャーディングではグローバル・データ・サービス(GDS)を使用します。GDSは可用性、負荷、ネットワーク待機時間、レプリケーション・ラグなどのパラメータに基づいて、クライアント・リクエストを適切なデータベースにルーティングします。同じグローバル・サービスを提供する複製データベースのセットが、GDSプールです。GDSプールのデータベースは、異なる地域にまたがる複数のデータ・センターにあってもかまいません。共有GDSプールには、共有データベースのシャードとそのレプリカがすべて含まれ、データベース・クライアントには1つの共有データベースとして見えます。

アプリケーションは、1つ以上のシャーディング戦略に基づいてデータがパーティション化される複数のデータベース(シャード)に接続できます。この戦略は、ハッシュ・ベース、範囲ベース、リスト・ベースのいずれかです。データベース操作が必要になるたびに、アプリケーションは接続先のシャードを判断する必要があります。

シャーディング・キーが、1行分のデータが格納されるシャードを決定するパーティション化キーになります。1つの表は、シャーディング・キーを使用してパーティション化できます。

シャード・チャンクのコレクションをスーパー・シャーディング・キーと言い、ここにはスーパー・シャーディング・キー識別子という特定の値を持つチャンクのみが格納されます。スーパー・シャーディング・キーは、複数のデータベース・グループ間にデータを分散させるために使用されます。スーパー・シャーディング・キーを指定すると、ユーザー制御のデータ・パーティション化が可能になります。

## ODP.NETシャーディング

バージョン12.2から、ODP.NETもOracle Databaseもシャーディングをサポートします。

注意:

ODP.NET管理対象ドライバは、シャーディングをサポートしていません。

ODP.NETアプリケーションは、単一シャードの問合せに対するデータベース接続をオープンする前に、シャーディング・キーとスーパー・シャーディング・キーの情報を提供する必要があります。接続をオープンした後で、これらのシャーディング値を設定または変更することはできません。シャーディング・キー値のいずれかを変更する必要がある場合は、新しい値で新しい接続を作成し、それをオープンする必要があります。

接続をオープンした後でシャーディング・キーを設定した場合、次に`OracleConnection.Open()`が呼び出されるまで、ODP.NET接続はその新しいシャーディング・キー値を使用しません。

`OracleShardingKey`オブジェクトには、1つ以上のキー値が格納されます。複数のキーを設定して複合キーを作成することもできます。ODP.NETは、指定されたシャーディング・キーを識別し、適切なシャードとチャンクに接続します。

シャーディングは、接続プールを使用する場合も接続プールを使用しない場合もサポートされます。ODP.NET接続プールでは、同じ共有プール内の共有GDSデータベースの異なるシャードとチャンクへの接続が保持されます。

シャーディング・キー(`SHARD_KEY`)とスーパー・シャーディング・キー(`GROUP_KEY`)は、アプリケーション・コードではなくTNS接続記述子で指定できます。この場合、アプリケーションが使用するシャードに適用される接続記述子は、.NET開発者が選択します。

データベースのシャードおよびチャンク間でデータが分散されても、それはエンド・ユーザーには意識されません。GDS内でチャンクが再シャーディングされるとき、エンド・ユーザーに対する影響はODP.NETによって最小限に抑えられます。

シャード間の問合せを実行するとき、ODP.NETシャードAPIは使用されません。かわりに、アプリケーションはGDSカタログ・サービスに接続するので、すべてのシャード・データベースへのアクセスが可能になります。必要なシャードすべてを反復するSQL問合せが特別に作成されます。たとえば、`select count(*) from employees`という非シャード・データベースの問合せは、`select sum(c) from (Iterator(select count(*) c from employees(i))`というシャード間問合せと等価です。

ODP.NETの単一シャード問合せの例

    using System;
    using Oracle.DataAccess.Client;

    class Sharding
    {
      static void Main()
      {
        OracleConnection con = new OracleConnection("user id=hr;password=hr;Data Source=orcl;");
        //Setting a shard key
        OracleShardingKey shardingKey = new OracleShardingKey(OracleDbType.Int32, 123);
        //Setting a second shard key value for a composite key
        shardingKey.SetShardingKey(OracleDbType.Varchar2, "gold");
        //Creating and setting the super shard key
        OracleShardingKey superShardingKey = new OracleShardingKey();
        superShardingKey.SetShardingKey(OracleDbType.Int32, 1000);

        //Setting super sharding key and sharding key on the connection
        con.SetShardingKey(shardingKey, superShardingKey);
        con.Open();

        //perform SQL query
      }
    }

関連項目:

- OracleShardingKeyクラス

- SetShardingKey(OracleShardingKey, OracleShardingKey)