Cloud Service
Oracle Globally Distributed Database
1つの論理 DB を複数のシャードへ水平分割し、地理分散と直線的なスケールアウト・高可用性を実現する分散 Oracle Database。AWS の Aurora Global / DynamoDB Global に近い。
- 1.シャーディングでデータを複数 DB に水平分割する分散 Oracle Database。
- 2.シャードキー設計で分散先が決まり、スケールとデータ所在地を制御。
- 3.Aurora Global や DynamoDB グローバルテーブルに近い立ち位置。
解決する課題
- 1台の DB に収まらない巨大なデータ量・スループットを、サーバー増設で直線的にスケールアウトしたい
- 単一 DB を単一障害点(SPOF)にしたくない。一部の障害が全体停止につながらない構成が欲しい
- 各国のデータを指定したリージョンに置き続けたい(データ所在地・レジデンシ要件への対応)
- ユーザーに近い場所へデータを置き、地理的に分散したアクセスのレイテンシを下げたい
主要概念と用語
- シャーディング(Sharding): 1つの論理テーブルを行単位で複数の物理 DB に分割し、各 DB が互いに独立して動く水平分割方式。各 DB はデータの一部だけを持つ
- シャード(Shard): 分割されたデータの一部を保持する独立した Oracle Database 1台。スケールアウトは「シャードを足す」ことで行う
- シャードキー(Sharding Key): 行をどのシャードへ置くかを決める列。設計の最重要要素で、DynamoDB のパーティションキーに相当
- シャーディング方式: キーをハッシュして均等分散するシステム管理シャーディング(一貫性ハッシュ)、値の範囲やリストで割り当てるユーザー定義シャーディング、両者を組み合わせるコンポジットがある
- シャードカタログ(Shard Catalog): シャード構成やルーティング情報、横断クエリの調整を担う管理用 DB
- シャードディレクター(Shard Director / GSM): 接続要求のシャードキーを見て適切なシャードへ振り分けるルーター
- チャンク(Chunk): シャード内の再配置単位。リシャーディング時はチャンク単位でデータが移動する
- レプリケーション: 各シャードを Data Guard や **Raft(RAFT レプリケーション)**で複製し、シャード単位の高可用性を確保する
- 重複テーブル(Duplicated Table): 全シャードに複製して持つ参照系の小さな表。シャード表との結合をローカルで完結させる
仕様・制限・クォータ
- データモデルはリレーショナル。シャード表にはシャードキーを含む設計が前提で、シャードキーは原則として更新しない(更新するとシャード間移動が必要になる)
- クエリには 2 種類ある。シャードキーを指定して1シャードに直接ルーティングされる単一シャードクエリと、複数シャードへまたがるクロスシャードクエリ。後者はカタログ経由で集約され、コストが高い
- 一意キー / 外部キーはシャードキーを含む形でないと全シャードでの保証が難しく、設計上の制約となる
- 各シャードは独立した Oracle Database なので、シャード単体の容量・性能上限は通常の Oracle DB に準じる。全体容量はシャード数に比例して伸びる
- リシャーディング(シャード追加・分割)はチャンク移動として行われ、オンラインで実行できるが移動中は I/O 負荷がかかる
- OCI 上の構成数・シェイプ・リージョン展開には**サービス上限(クォータ)**があり、引き上げ申請ができる
内部の仕組み
Oracle Globally Distributed Database は、アプリから見て1つの論理 DB に見える集合を、内部的には複数の独立した Oracle Database(シャード)へ水平分割して構成します。行をどのシャードへ置くかはシャードキーで決まります。システム管理シャーディングではシャードキーを一貫性ハッシュで分散させ、データを均等に配置します。ユーザー定義シャーディングでは「日本のデータは東京リージョンのシャードへ」のように、値の範囲やリストで明示的に配置先を指定でき、データ所在地要件に応える設計ができます。
接続はシャードディレクター(GSM)が受け、リクエストに含まれるシャードキーから該当シャードへ直接ルーティングします。これにより単一シャードクエリはカタログを経由せず、1台の DB に対する通常クエリと同等の効率で処理されます。複数シャードにまたがるクエリはシャードカタログが各シャードへ配り、結果を集約します。
各シャードは独立して動くため、1シャードの障害は他シャードに波及しません。さらに各シャードを Data Guard または Raft レプリケーションで複製しておくことで、シャード単位のフェイルオーバーが可能になり、全体の可用性を高めます。スケールアウトは**シャードを追加し、チャンクを再配置(リシャーディング)**することで行い、容量とスループットを足し算で増やせます。
従来の「1台を大きくする(スケールアップ)」発想ではなく、シャードを足して横に広げる(スケールアウト)発想に切り替えます。鍵はシャードキー設計で、アクセスが特定シャードに偏るとホットシャードとなり全体性能を引き出せません。早い段階でアクセスパターンとキーを決めることが重要です。
設計パターン / ベストプラクティス
- アクセスパターンからシャードキーを決める: 最も頻繁な検索条件をシャードキーに選び、単一シャードクエリで完結させる。横断クエリを最小化するのが性能の要
- データを均等に分散する: 偏りやすい値(特定テナント・特定地域への集中)はホットシャードを生む。ハッシュ分散や複合キーで散らす
- データ所在地要件にはユーザー定義シャーディング: リージョンごとにシャードを割り当て、国・地域単位でデータを物理的に固定する
- 参照系の小表は重複テーブルに: マスタやコードテーブルは全シャードに複製しておくと、シャード表との結合がローカルで済みクロスシャードを避けられる
- シャードキーは不変に保つ: シャードキーの値を更新するとシャード間でデータ移動が発生する。キーは生成時に確定し以後変えない設計にする
- シャードごとに HA を組む: 各シャードを Data Guard / Raft で複製し、シャード単位の障害でも縮退運転を続けられるようにする
運用・監視
- OCI Monitoring と Oracle 標準の管理ツールで、各シャードの CPU・I/O・接続数・レプリケーション遅延・チャンク分布を監視する
- **シャード間のデータ偏り(スキュー)**を定期的に確認し、偏りが出たらリシャーディングでチャンクを再配置する
- リシャーディング(シャード追加・分割)はオンラインで実行可能だが I/O 負荷がかかるため、低負荷の時間帯に計画する
- バックアップ・パッチはシャードごとに行う。各シャードは独立 DB なので、ローリングで順次適用すれば全体停止を避けられる
- フェイルオーバーはシャード単位。レプリカ構成(Data Guard / Raft)の健全性と遅延を継続監視し、切り替え可能な状態を保つ
コスト
課金は基本的に各シャード(独立した DB インスタンス)の計算・ストレージの合計に、シャードカタログやシャードディレクターといった管理コンポーネントの分が加わります。シャードを足すほど容量と費用が比例して増える構造です。
| コスト要素 | 内容 | 最適化のコツ |
|---|---|---|
| シャード(DB インスタンス) | シャード数 × 計算・ストレージ | 必要なシャード数から始め、成長に応じて追加する |
| レプリカ | 各シャードの複製分(Data Guard / Raft) | 可用性要件に応じて複製数を決め過剰冗長を避ける |
| 管理コンポーネント | シャードカタログ / シャードディレクターの稼働分 | 用途に見合うシェイプを選ぶ |
| データ転送 | リージョン間レプリケーション・横断クエリの通信 | 単一シャードクエリ中心の設計で横断通信を抑える |
セキュリティ
- 保存データは既定で暗号化。鍵は Oracle 管理鍵、または **OCI Vault(KMS)**の顧客管理鍵(CMK)を選択できる
- 各シャード・カタログはプライベートサブネットに配置し、**セキュリティリスト / NSG(ネットワークセキュリティグループ)**で接続元を最小化する
- 操作権限は OCI IAM ポリシーでコンパートメント単位に最小化し、DB 内ユーザー権限と組み合わせて管理する
- 通信は TLS で暗号化する。アプリの DB 資格情報はコードに直書きせず OCI Vault のシークレットに保管する
- ユーザー定義シャーディングを使えば、データを特定リージョンに固定してレジデンシ要件を満たせる
シャードキーを指定しないクエリは全シャードへ広がるクロスシャードクエリとなり、レイテンシとコストが跳ね上がります。OLTP の主要パスは必ずシャードキーを伴う単一シャードクエリになるよう設計し、横断的な集計はバッチや分析基盤側に寄せてください。
Well-Architected の観点
- 信頼性(Reliability): シャードが独立しているため単一障害点を排除できる。各シャードを Data Guard / Raft で複製すればシャード単位でフェイルオーバーでき、一部障害でも縮退して稼働を続けられる
- パフォーマンス効率(Performance): シャードを足すだけで直線的にスケールアウトでき、書き込みも分散できる。単一シャードクエリは 1 台の DB と同等の効率で応答する。ホットシャードを避けるキー設計が性能を左右する
試験で問われるポイント
- シャーディング=水平分割。1つの論理 DB を複数の独立した Oracle Database(シャード)に分け、スケールアウトする方式である
- シャードキーが配置先を決める。設計の最重要要素で、DynamoDB のパーティションキーに相当する
- 方式の使い分け: 均等分散したいなら一貫性ハッシュのシステム管理シャーディング、データ所在地を制御したいならユーザー定義シャーディング
- 単一シャードクエリは速く、クロスシャードクエリは高コスト。シャードキーを伴うアクセスに寄せる
- シャードディレクター(GSM)がルーティング、シャードカタログが構成管理と横断クエリ集約を担う
- シャード単位で HA(Data Guard / Raft)。シャードの独立性により障害が全体に波及しない
- AWS では水平スケールの Aurora / DynamoDB グローバルテーブルが近い対応サービスとして問われやすい
関連サービス・比較
| 観点 | Oracle Globally Distributed Database | AWS の相当サービス |
|---|---|---|
| 位置づけ | シャーディングで水平分割する分散 Oracle Database | Aurora Global Database / DynamoDB グローバルテーブル |
| データモデル | リレーショナル(Oracle Database) | Aurora はリレーショナル / DynamoDB は NoSQL |
| 分散の仕組み | シャードキーで行を独立シャードへ水平分割 | DynamoDB はパーティションキーで分散 / Aurora は主にリードスケール |
| スケール方向 | シャード追加で書き込みも含めスケールアウト | DynamoDB は自動分散 / Aurora は基本リードレプリカ |
| データ所在地 | ユーザー定義シャーディングでリージョン固定が可能 | リージョン選択・グローバルテーブルで対応 |
| 可用性 | シャード単位で Data Guard / Raft 複製 | マルチ AZ・複数リージョンレプリケーション |
| 権限付与 | OCI IAM + DB ユーザー権限 | IAM ロール |
ハンズオン / CLI例
# 分散データベース(シャード構成)を作成する例
# システム管理シャーディング + 指定シャード数でスケールアウト構成を組む
oci distributed-db sharded-database create \
--compartment-id "$COMPARTMENT_OCID" \
--display-name app-gdd \
--db-deployment-type DEDICATED \
--sharding-method SYSTEM \
--shard-count 3 \
--replication-method RAFT \
--wait-for-state ACTIVE
# 作成した分散データベースの一覧を確認
oci distributed-db sharded-database list \
--compartment-id "$COMPARTMENT_OCID" \
--output table
# 個別の分散データベースの構成(シャード配置・状態)を取得
oci distributed-db sharded-database get \
--sharded-database-id "$SHARDED_DB_OCID"
OCI Service
Oracle Globally Distributed Databaseを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
データベース
比較で見る軸
クラウド: OCI / カテゴリ: データベース / 難易度: intermediate
導入後に効く点
シャードキー設計で分散先が決まり、スケールとデータ所在地を制御。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- OCI
- カテゴリ
- データベース
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- reliability / performance
判断チェックリスト
- 自社の用途が「データベース / reliability」に近いか確認する。
- 強みである「シャーディングでデータを複数 DB に水平分割する分散 Oracle Database。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。