データベースの非正規化

提供: MonoBook
2018年7月5日 (木) 03:38時点における119.244.204.191 (トーク)による版 (→‎非正規化)
ナビゲーションに移動 検索に移動

データベースの非正規化とは、データベースの教科書に載っている「データベースの正規化」とまったく逆のことを行うことで、超高負荷環境下での性能改善を試みる手法である。

概要

正規化

データの重複をなくし整合的にデータを取り扱えるようにデータベースを設計することを「データベースの正規化」と呼ぶ。 教科書に書いてある定番のウリ文句であり、情報系の学校では「データベースを設計するときは正規化しよう」「テーブルはJOINで結合して使おう」と習うことだろう。

メーカー 住所
A社 北海道
B社 青森県
商品ID 商品名
101 メロン
102 ハスカップ
103 りんご

非正規化

その逆に1つのテーブルに重複クソ食らえで全てを詰め込む手法を「データベースの非正規化」と呼ぶ。

メーカー 住所 商品名
A社 北海道 メロン
A社 北海道 ハスカップ
B社 青森県 りんご

こちらは主に膨大な量のレコードを扱うITドカタの現場で使われる教科書クソ食らえな必殺技である。 数億レコードを突破するようなテーブルがいくつも存在する現実的な環境下ではテーブルのJOINなどしたらシステムは窒息死するため、このようなデータベースの設計となる事が多い。

ただし非正規化は諸刃の剣であるということを忘れてはならない。途中での方針変換による採用は非常に危険である。

  1. 正規化した状態で設計・開発する
  2. サービス開始直後に過負荷でシステムダウン
  3. 非正規を試みる
  4. プログラム側の非正規化対応という魔改造でデスマーチに陥る

このような炎上するパターンの根底にあるのは「途中での仕様変更」であり、 見積もり段階でしっかりと想定データ量を算出して、必要に応じて最初から非正規化前提で設計および開発しているプロジェクトは成功することが多い。

関連項目

参考文献