ユーザー定義のシャーディング
ユーザー定義のシャーディングでは、個々のシャードへのデータのマッピングをユーザーが明示的に指定できます。これは、パフォーマンスや規制などの理由で、特定のデータを特定のシャードに格納する必要があり、管理者がシャード間のデータの移動を完全に制御する必要がある場合に使用します。
ユーザー定義のシャーディングのもう1つのメリットとして、シャードの計画停止または計画外停止の場合に、どのデータが使用できないかをユーザーが正確に知ることができます。ユーザー定義のシャーディングのデメリットは、データベース管理者が、シャード間のデータおよびワークロードの分散のバランスを監視して維持する必要があることです。
シャード領域の理解
シャード領域はシャードのセットで、キーの値の範囲またはリストに対応するデータが格納されます。ユーザー定義のシャーディングでは、シャード領域が1つのシャード、または完全にレプリケートされたシャードのセットから構成されます。わかりやすいように、各シャード領域が1つのシャードから構成されると仮定します。
ユーザー定義構成へのシャード領域の追加
シャードとそのCDBをユーザー定義のシャーディング構成に追加する前に、シャード領域を作成して移入する必要があります。たとえば、次のGDSCTLコマンドを使用できます。
ADD SHARDSPACE -SHARDSPACE east
ADD SHARDSPACE -SHARDSPACE central
ADD SHARDSPACE -SHARDSPACE west
ADD CDB -CONNECT cdb1
ADD CDB -CONNECT cdb2
ADD CDB -CONNECT cdb3
ADD SHARD –CONNECT shard-1 -CDB cdb1 –SHARDSPACE west;
ADD SHARD –CONNECT shard-2 -CDB cdb2 –SHARDSPACE central;
ADD SHARD –CONNECT shard-3 -CDB cdb3 –SHARDSPACE east;
ユーザー定義シャーディングの表領域の作成
ユーザー定義のシャーディングには表領域セットはありません。各表領域を個別に作成し、シャード領域と明示的に関連付ける必要があります。
次の文を使用して、前述の例の各シャード領域の表領域を作成できます。
CREATE TABLESPACE tbs1 IN SHARDSPACE west;
CREATE TABLESPACE tbs2 IN SHARDSPACE central;
CREATE TABLESPACE tbs3 IN SHARDSPACE east;
ユーザー定義シャーディングでのシャード表の作成
ユーザー定義のシャーディングの場合、範囲またはリストによってシャード表をパーティション化できます。シャード表のCREATE TABLE
構文は、各パーティションを個別の表領域に格納する必要があることを除き、通常の表のための構文とそれほど違いはありません。
たとえば:
CREATE SHARDED TABLE accounts
( id NUMBER
, account_number NUMBER
, customer_id NUMBER
, branch_id NUMBER
, state VARCHAR(2) NOT NULL
, status VARCHAR2(1)
)
PARTITION BY LIST (state)
( PARTITION p_west VALUES ('OR', 'WA') TABLESPACE ts1
, PARTITION p_central VALUES ('SD', 'WI') TABLESPACE ts2
, PARTITION p_east VALUES ('NY', 'VM', 'NJ') TABLESPACE ts3
)
;
次の図は、前述の例に示したaccounts
表について、表領域へのパーティションのマッピング、およびシャードへの表領域のマッピングを示しています。
ユーザー定義シャーディングでのチャンク管理
システム管理のシャーディングと同様に、ユーザー定義のシャーディングで作成される表領域もチャンクに割り当てられます。ただし、シャードがシャード・データベースに追加されても、チャンク移行は自動的に開始されません。移行する必要があるチャンクごとにGDSCTL MOVE CHUNK
コマンドを実行する必要があります。
チャンクの合計数は、シャード表で指定されたパーティション数によって定義されます。特定のシャード領域のチャンクの数は、割り当てられたパーティションの数です。シャード表に対するALTER TABLE ADD
、DROP
、SPLIT
およびMERGE PARTITION
コマンドは、チャンクの数を増減します。
GDSCTLコマンドSPLIT CHUNK
はシステム管理のシャーディングでは、ハッシュ範囲の中央でチャンクを分割するために使用されますが、ユーザー定義のシャーディングではサポートされません。ALTER TABLE SPLIT PARTITION
文を使用してチャンクを分割する必要があります。
ユーザー定義シャーディングでのレプリケーション
ユーザー定義のシャード・データベースでは、2つのレプリケーション・スキームがサポートされています。
-
Oracle Data Guard
-
Oracle Active Data Guard
レプリケーション方法としてRaftレプリケーションが使用されている場合、ユーザー定義シャーディングはサポートされません。