Cells ADR 008: クラスター全体で一意なデータベースシーケンス
コンテキスト
クラスター全体でシーケンスが重複しない一意性を持つことは、Cell 間での Organization 移動のために必要です。 この点は core-platform-section/-/epics/3 でも強調されており、 異なる解決策が https://gitlab.com/gitlab-org/core-platform-section/data-stores/-/issues/102 で議論されました。
決定事項
すべての Cell は作成時に bigint の ID を使用します。プロビジョニング時に、各 Cell は Topology Service から使用するシーケンスの範囲を割り当てられます。
Topology Service はこちらで説明されているロジックを使用してシーケンス範囲を計算し、既存および新規作成されるすべてのシーケンス ID に対して minval、maxval を設定します。
- データベースが読み込まれると、
gitlab:db:alter_cell_sequences_rangeが呼び出されてシーケンス範囲を変更します。 - 上記の rake タスクは内部的に EVENT TRIGGER alter_new_sequences_range を登録し、新しい ID に対して正しいシーケンス範囲を設定します。
代替案
この問題に対して検討された各種解決策を以下に示します。
- 解決策 1: シーケンスを要求するグローバルサービス
- 解決策 2: すべての int ID を bigint に変換して一意な ID を生成
- 解決策 3: 複合主キー [(既存 PK), 元の Cell ID] を使用
- 解決策 4: Cell のみで bigint ID を使用
- 解決策 5: 論理レプリケーションを使用
最終更新 July 30, 2026: Merge pull request #483 from kyama0/translation/batch-2026-07-29-1 (
c955a93f)