Upgrade to Pro — share decks privately, control downloads, hide ads and more …

太りすぎコアモデルのダイエット作戦(減量編) / railstokyo-03-lmi

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

太りすぎコアモデルのダイエット作戦(減量編) / railstokyo-03-lmi

リンクアンドモチベーション登壇資料(2026/02/19)

#railstokyo_meetup #リンモチ

===========================================
【イベント情報】
■イベントページ
https://railstokyo.connpass.com/event/378921/
【株式会社リンクアンドモチベーション】
■お問合せ先
 [email protected]
■テックブログ
 https://link-and-motivation.hatenablog.com/
■開発組織の公式X
 https://x.com/LinkandM_dev
=============================================

More Decks by リンクアンドモチベーション

Transcript

  1. 会社紹介 創業年月日 | 2000年4月7日 上場市場 | 東京証券取引所 プライム市場 従業員数 |

    約1,500名(グループ全体) 売上 | 374億(グループ全体)※2024年12月期 事業内容 | 組織改善クラウドの開発・提供 © Link and Motivation Group 3
  2. ゴール: テーブルの垂直分割 Before App read / write results 集計軸 +

    結果 After App 結果 集計軸 results (結果) segments (集計軸) 前回「決意編」でコアテーブル分割を決意 results (集計軸+結果) → results (結果) + segments (集計軸) に分離したい © Link and Motivation Group 4
  3. テーブル分割の一般的な手順の例 直列でやるとこうなる: 1. 新テーブルを作成 2. 計画停止(メンテナンスモード) 3. 既存データを新テーブルへ一括コピー 4. アプリコードの参照先・書き込み先を一括変更してデプロイ

    5. メンテナンス解除 6. 旧テーブルから移行済みカラムを削除 → すべて直列。前のステップが終わらないと次に進めない。 © Link and Motivation Group 5
  4. 解決策: 論理VIEWを挟む VIEW = 仮想テーブル(元テーブルへのSELECTに名前をつけたもの) データ移動なしで新テーブル名を使い始められる 計画停止 → 不要(全工程を無停止で実施) クリティカルパス

    → 解消(VIEW作成後すぐコード変更開始) ビッグバン → 回避(PR単位で段階リリース可能) 切り戻し → 簡単(RENAME TABLEで入替/戻し) © Link and Motivation Group 8
  5. VIEWを使った移行の全体像 1. 論理VIEW segments を作成 ・分割元の results から集計軸に関わるカラムに絞ったVIEWを作成 2. データの参照先を

    segments (VIEW)に変更 3. データの移行( tmp_segments テーブルを作成) a. 新規データを tmp_segments にも反映(frontfill) b. 既存データの移行(backfill) 4. データ監視 — tmp_segments と results の集計軸カラムの完全一致を確認 5. テーブルSWAP — RENAME TABLE で VIEW TABLE を入替 6. お掃除 — 旧VIEW削除 / 旧カラム削除 / sync解除 → 2と3を並行して複数人で進められる © Link and Motivation Group 9
  6. SWAP前後のデータフロー Before SWAP App read (集計軸) segments (VIEW) 参照 results

    App write results sync tmp_segments (TABLE) RENAME TABLE で⼊れ替え segments (VIEW) ↔ tmp_segments (TABLE) After SWAP App read (集計軸) segments (TABLE に昇格) App write results sync アプリコードの変更なし © Link and Motivation Group 10
  7. VIEWで実現②: 並行で進められた VIEWがあるから、参照変更とデータ移行を並行して進められた 時間 データ参照先の変更 複数⼈ + AI で並⾏実施 書き込み先の変更(frontfill)

    1⼈で実装 既存データの移⾏(backfill) 別の1⼈が担当 並 ⾏ データ移行がクリティカルパスから外れた © Link and Motivation Group 13