シャード間の一意の順序番号の生成
主キー以外の列に対してシャード間でグローバルに一意の順序番号を生成でき、Oracle Globally Distributed Databaseによって処理されます。
customer_idがシャーディング・キーの場合、主キー以外の列(order_idなど)に対して一意のIDを生成する必要がある場合があります。この場合、この機能を使用してシャード間で一意の順序番号を生成できますが、アプリケーション内の主キー以外の特定の列のグローバルな一意性を管理する必要はありません。
この機能は、SHARDED SEQUENCE
オブジェクトでサポートされます。シャード順序はシャード・カタログに作成されますが、各シャード上にインスタンスがあります。各インスタンスは、他のシャードで使用される範囲とオーバーラップしない範囲に属する、単調に増加する番号を生成します。したがって、生成されたすべての番号はグローバルに一意になります。
たとえば、シャード順序を使用すると、顧客IDでシャーディングされた表に対して一意の順序番号を生成できます。顧客IDをキーとして使用してシャードへの接続を確立するアプリケーションでは、シャード順序のローカル・インスタンスを使用して、グローバルに一意の順序番号を生成できます。
シャード順序で生成された番号は、このシャードに挿入される新しい行のシャーディング・キーとしてすぐに使用できません。これは、キー値が別のシャードに属している場合に、挿入によってエラーが発生するためです。新しい行を挿入するには、まずアプリケーションでシャーディング・キーの値を生成し、それを使用して適切なシャードに接続する必要があります。シャーディング・キーの新しい値を生成する一般的な方法は、シャード・カタログで通常の(シャーディングされていない)順序を使用することです。
単一のシャーディング・キー・ジェネレータがボトルネックになっている場合、シャード順序をこの目的で使用できます。この場合、アプリケーションは(シャーディング・キーを指定せずにグローバル・サービスを使用して)ランダムなシャードに接続し、シャード順序から一意のキー値を取得してから、キー値を使用して適切なシャードに接続する必要があります。
この機能をサポートするために、次のCREATE
文の構文に示すように、SEQUENCE
オブジェクト句、SHARD
およびNOSHARD
がSEQUENCE
オブジェクトのDDL構文に含まれます。
CREATE | ALTER SEQUENCE [ schema. ]sequence
[ { INCREMENT BY | START WITH } integer
| { MAXVALUE integer | NOMAXVALUE }
| { MINVALUE integer | NOMINVALUE }
| { CYCLE | NOCYCLE }
| { CACHE integer | NOCACHE }
| { ORDER | NOORDER }
| { SCALE {EXTEND | NOEXTEND} | NOSCALE}
| { SHARD {EXTEND | NOEXTEND} | NOSHARD}
]
NOSHARD
は、順序のデフォルトです。SHARD
句を指定すると、このプロパティは順序オブジェクトのディクショナリ表に登録され、DBA_SEQUENCES
、USER_SEQUENCES
およびALL_SEQUENCES
ビューを使用して表示されます。
SHARD
を指定すると、EXTEND
およびNOEXTEND
句によってシャード順序の動作が定義されます。EXTEND
を指定すると、生成された順序値はすべての長さ(x+y)になります。xは順序値の先頭に付加されるサイズ4のSHARD
オフセット(最大シャード数の幅に対応、つまり1000)の長さ、yは順序MAXVALUE
/MINVALUE
の最大桁数です。
SHARD
句のデフォルト設定はNOEXTEND
です。NOEXTEND
が設定されていると、生成される順序値の幅は最大でも順序内の数字の最大数(MAXVALUE
/MINVALUE
)です。この設定は、固定幅の列を移入するために順序が使用される、既存のアプリケーションとの統合に役立ちます。SHARD NOEXTEND
を指定した順序でNEXTVAL
を呼び出すと、生成された値に順序のMAXVALUE
/MINVALUE
よりも多くの桁数の表現が必要な場合は、ユーザー・エラーがスローされます。
SCALE
句もSHARD
句で指定されている場合、順序によって、グローバルに一意である複数のインスタンスおよびセッションに対してシャード内でスケーラブルな値が生成されます。EXTEND
をSHARD
キーワードとSCALE
キーワードの両方で指定する場合、生成された順序値はすべての長さ(x+y+z)になります。xは先頭に付加されるサイズ4のSHARD
オフセットの長さ、yはスケーラブルなオフセットの長さ(デフォルトは6)、zは順序MAXVALUE
/MINVALUE
の最大桁数です。
ノート:
SHARD
句を使用する場合は、順序にORDER
を指定しないでください。SHARD
を使用すると、グローバルに順序付けされていない値が生成されます。ORDER
が必要な場合は、各ノードでローカルに順序を作成します。
SHARD
キーワードは、CACHE
およびNOCACHE
モードの操作と組み合せて使用できます。