SDN
← 概念一覧へ
データベース

フェデレーション(機能別分割)

Federation (Functional Partitioning)

1つの巨大DBを、機能(役割)ごとに別々のDBへ分割する手法。例: ユーザー用DB、商品用DB、フォーラム用DB。各DBが小さくなり、読み書きとレプリ遅延が減る。

キーポイント
  • 機能ごとにDBを分ける(forums / users / products など)。functional partitioning とも呼ぶ。
  • 各DBが小さくなるので、読み書きトラフィックとレプリケーション遅延が減る。
  • 中央マスターがないので、各DBへ並行して書き込める。キャッシュの局所性も向上。
  • 短所: 1つのテーブル/機能が極端に巨大だと効果が薄い。DBをまたぐJOINが難しくなる。アプリにDB選択ロジックが必要。
トレードオフ

各DBが小さくなり書き込みも並行化できる反面、機能をまたぐデータ(例: ユーザーDBと商品DBを結合した分析)を扱うのが難しくなる。DB間JOINができないのでアプリ側で頑張る必要がある。また、どのDBに行くかを判断するロジックも要る。1つの機能だけが巨大化している場合は、Federationでは分割できずSharding等が必要。

たとえ話: 部署ごとにファイルキャビネットを分ける

会社の書類を全部1つの巨大キャビネット(=1つのDB)に詰め込むと、誰かが開けるたびに混雑します。そこで人事の書類は人事のキャビネット、経理は経理のキャビネット…と機能ごとに分けます。

すると、人事と経理は別々のキャビネットを同時に使えて競合しません。各キャビネットは中身が減って探すのも速い。これがFederation(機能別分割)です。

図を描画中...

なぜ速くなるのか

  • 各DBのデータ量が減る → インデックスが小さくなり検索が速い。
  • 書き込みが分散 → ユーザー更新と商品更新が別DBで並行に走り、競合しない。
  • 中央マスターがない → ボトルネックが消える。
  • キャッシュの局所性 → 機能ごとにアクセスが集中するのでキャッシュが効きやすい。

Sharding との違い(混同注意)

ここは超重要な区別です。

FederationSharding
分け方機能(テーブルの種類)で分ける同じテーブルを行で分ける
usersテーブルとproductsテーブルを別DBに1つのusersテーブルを『A〜M』『N〜Z』で別DBに
効く相手機能が複数あって偏っていない1つのテーブルが巨大すぎる

Federationは『テーブルの種類』で縦に切り、Shardingは『同じテーブルの行』で横に切る、と覚えると整理できます。

つまずきポイント

  • 1つの機能(例: usersテーブル)だけが巨大化している場合、Federationでは分割できない。そういうときはSharding。
  • DBをまたぐJOIN(例: ユーザーと商品を結合)ができなくなる。アプリ側で2回問い合わせて結合する等の工夫が必要。

📊 図解

図解: 1つの巨大DBを機能別に分割

1つの巨大DBを users / products / forums のように機能(テーブルの種類)で縦に分割する。各DBが小さくなり、書き込みも分散して競合しにくくなる。

図を描画中...

関連する概念

この概念で腕試し

関連する 5 問のクイズに挑戦できます。

クイズを解く