すべてのプロダクト
Search
ドキュメントセンター

PolarDB:概要

最終更新日:May 29, 2024

このトピックでは、シーケンスに関連する概念を紹介します。 このトピックでは、サポートされるシーケンスの種類についても説明します。

分散型リレーショナルデータベースサービス (PolarDB-X 1.0) によって提供されるシーケンスは、グローバルに一意の数値を生成します。 DRDSシーケンス値は、署名付き64ビット整数を格納するMySQL BIGINTデータ型です。 DRDSシーケンスという用語は、以下の説明ではシーケンスと呼ばれる。 シーケンスは、主キー列の値や一意のインデックス列の値など、グローバルに一意で連続的に増分する数値を生成するためによく使用されます。

用語

次の用語を理解したら、ビジネスに適したシーケンスタイプを選択できます。

  • 連続: 連続するシーケンスの現在の値がnの場合、次の値はn + 1でなければなりません。 次の値がn + 1でない場合、シーケンスは非連続シーケンスである。
  • 単調増加: 単調増加シーケンスの現在の値がnである場合、次の値はnより大きい数でなければなりません。
  • シングルポイント: シングルポイント障害 (SPOF) リスクが存在します。
  • マクロレベルで単調増加し、ミクロレベルで単調増加します。たとえば、シーケンスの値は1、3、2、4、5、7、6、8、... このようなシーケンスは、マクロレベルでは単調増加し、ミクロレベルでは単調増加しない。
  • ユニット化機能: ユニット化機能は、複数のインスタンスまたは複数のデータベース間で一意の数値シーケンスを生成するのに役立ちます。

Usage

PolarDB-X 1.0シーケンスは、次の2つのタイプに分類されます。

  • 明示的なシーケンス: DDL構文を使用して、明示的なシーケンスを作成および維持します。 明示的なシーケンスは独立して使用することができる。 たとえば、明示的なシーケンスを直接変更してクエリすることができます。 select seq.nextvalを使用して、明示的な順序で値を取得できます。 seqは、シーケンスの名前を指定します。
  • 暗黙的なシーケンス: 主キー列にAUTO_INCREMENT属性を指定すると、暗黙的なシーケンスを使用して主キー値を自動的に生成できます。 PolarDB-X 1.0は自動的にシーケンスを維持します。

サポートされているシーケンスのタイプと機能

PolarDB − X 1.0は、以下の4種類のシーケンスをサポートする。

タイプ (略語)世界的にユニーク連続単調に増加単調に増加する同じセッション非シングルポイントデータ型可読性ユニット化機能
グループシーケンス (Group)任意任意すべての整数データ型高い任意
単位グループシーケンス (group)任意任意すべての整数データ型高い
時間ベースのシーケンス (Time)任意マクロレベルで単調に増加し、ミクロレベルで単調に増加するBIGINTのみ低い任意
シンプルシーケンス (Simple)任意すべての整数データ型高い任意

グループシーケンス (Group、デフォルトのシーケンスタイプ)

グループシーケンスは、自然な数値を提供するグローバルに一意のシーケンスです。 グループシーケンス内の値は、連続的または単調に増加する必要はない。 シーケンスタイプを指定しない場合、デフォルトでPolarDB-X 1.0はグループシーケンスタイプを使用します。

実装メカニズム: DRDSは複数のノードを使用してシーケンス値を生成します。 マルチノードモデルは高可用性を保証します。 システムは、一度にデータベースから値のセグメントを取り出す。 ネットワーク切断などのシナリオでは、セグメント内のすべての値が使用されるわけではありません。 したがって、シーケンス値は不連続である。

  • 利点: グループシーケンスはグローバルに一意であり、SPOFを防ぎます。 グループシーケンスは優れたパフォーマンスを提供します。
  • デメリット: グループシーケンスに不連続な値が含まれ、指定された開始値から開始できない場合があります。 グループシーケンスの値は循環的ではありません。

単位グループシーケンス (group)

ユニットグループシーケンスは、グループシーケンスの能力を拡張する。 ユニットグループシーケンスにはユニット化機能があり、複数のインスタンスまたは複数のデータベース間で一意の値を提供できます。 単位グループシーケンスの値は、連続または単調増加でなくてもよい。 1つのユニットのみがユニットグループシーケンスのために構成される場合、ユニットグループシーケンスは共通グループシーケンスと等価である。

  • 利点: ユニットグループシーケンスには、グループシーケンスのすべての利点があり、ユニット化機能があります。
  • 短所: ユニットグループシーケンスには不連続な値が含まれ、指定された開始値から開始できない場合があります。 単位グループシーケンスの値は周期的ではありません。

ユニットグループシーケンスの仕組みは、グループシーケンスの仕組みと同じです。 拡張パラメーターを使用して、ユニットインデックスとユニット数をカスタマイズできます。

  • ユニットの数は、ユニットグループシーケンスに割り当てられたグローバル一意シーケンス空間を決定する。
  • ユニットインデックスは、ユニットを識別する。 各ユニットは、グローバルユニーク配列空間のサブセットを占める。
  • ユニットインデックスを複数指定すると、複数のユニットが指定されます。 異なるユニットのシーケンスサブセットは重複しない。 これは、DRDSが異なるユニットに対して同じシーケンス値を生成しないことを意味する。
  • 同じシーケンス空間に属するすべてのユニットグループシーケンスに対して、同じユニット数と異なるユニットインデックスを指定する必要があります。
説明
DRDSの次のバージョンは、ユニットグループシーケンスを提供します。
  • V5.2: V5.2.7-1606682以降。 DRDS V5.2.7-1606682は2018年4月27日にリリースされました。
  • V5.3: V5.3.3-1670435以降。 DRDS V5.3.3-1670435は2018年8月15日にリリースされました。

時間ベースのシーケンス (Time)

時間ベースのシーケンス値は、タイムスタンプ、ノードID、およびシリアル番号で構成されます。 このようなシーケンスは、グローバルに一意であり、マクロレベルで自動インクリメンタルです。 時間ベースのシーケンスの値が更新されると、システムはデータベースから値を取得しません。 また、シーケンス値は、関連するデータベースに永続データとして格納されません。 シーケンス名とタイプのみがデータベースに保存されます。 時間ベースのシーケンスは優れたパフォーマンスを提供します。 例えば、時間ベースのシーケンスの値は、776668092129345536、776668098018148352、776668111578333184、776668114812141568…

  • 利点: 時間ベースのシーケンスはグローバルにユニークで、優れたパフォーマンスを提供します。
  • 短所: 時間ベースのシーケンスの値は不連続です。 START WITH、INCREMENT BY、MAXVALUE、およびCYCLEまたはNOCYCLEパラメータは、時間ベースのシーケンスに対して無効である。
説明
  • テーブルの自動インクリメント列に時間ベースのシーケンスを使用する場合、自動インクリメント列はBIGINT型でなければなりません。
  • DRDSの次のバージョンは、時間ベースのシーケンスを提供します。
    • V5.2: V5.2.8-15432885以降。 DRDS V5.2.8-15432885は2018年12月27日にリリースされました。
    • V5.3: V5.3.6-15439241以降。 DRDS V5.3.6-15439241は2018年12月29日にリリースされました。
シンプルシーケンス (Simple)

単純なシーケンスのみが、INCREMENT BY、MAXVALUE、およびCYCLEまたはNOCYCLEパラメータをサポートします。

  • 利点: 単純なシーケンス値は、グローバルに一意で、連続し、単調に増加します。 単純なシーケンスは複数の特徴を提供する。 例えば、単純なシーケンスは最大値を有することができ、単純なシーケンスの値は周期的であることができる。
  • 短所: 単純なシーケンスでは、SPOF、パフォーマンスの低下、ボトルネックが発生しやすくなります。 簡単なシーケンスは慎重に使用してください。

単純なシーケンスが値を生成するたびに、システムはその値を永続的なデータとして関連するデータベースに格納します。

シナリオ

4つのタイプのシーケンスはグローバルに一意であり、主キー列と一意のインデックス列に使用できます。

  • ほとんどのシナリオでは、グループシーケンスを使用することを推奨します。
  • 複数のインスタンスまたは複数のデータベース間でグローバルに一意なシーケンス値が必要な場合は、ユニットグループシーケンスを使用できます。
  • 場合によっては、トレンド全体のマクロレベルでのみシーケンス値を自動インクリメンタルにする必要があります。 値は、マイクロレベルでは必ずしも自動増分ではない。 また、データベースの割り当てメカニズムを使用してシーケンス値を割り当てたくない場合もあります。 このようなシナリオでは、時間ベースのシーケンスを使用できます。
  • 連続するシーケンス値の要件が高いサービスには、単純なシーケンスのみを使用します。 単純なシーケンスの低パフォーマンスを理解していることを確認してください。

たとえば、100000から始まり、ステップサイズが1のシーケンスを作成できます。

  • 単純なシーケンスは、100000、100001、100002、100003、100004、... 、200000、200001、200002、200003... などのグローバルに一意で連続的で単調に増加する値を生成します。 単純シーケンス値は、永続的に格納される。 SPOFでサービスが再開された後でも、値はブレークポイントから連続的に生成されます。 ただし、単純なシーケンスは、値が生成されるたびにシステムが値を永続的に格納するため、パフォーマンスが低くなります。
  • グループシーケンスまたはユニットグループシーケンスは、200001、200002、200003、200004、100001、100002、100003... などの値を生成することができる。
説明
  • グループシーケンスの開始値は、start WITHによって指定された値と必ずしも同じではありません。 グループシーケンスは、常に指定された開始値より大きい値から開始します。 この例では、指定された開始値は100000ですが、グループシーケンスの実際の開始値は200001です。
  • グループシーケンスはグローバルに一意の値を提供し、不連続な値を含むことがあります。 たとえば、接続が閉じられているときにノードに障害が発生したり、セグメント内の値の一部のみが使用されたりすると、シーケンスには連続しない値が含まれます。 この例では、値は不連続である。 200004と100001の間の値がありません。
  • 同じグローバル一意シーケンスに属するユニットグループシーケンスには、同じユニット数と異なるユニットインデックスを指定する必要があります。 これにより、シーケンス値が複数のインスタンスまたは複数のデータベース間で一意になります。