🌲
OLTP と OLAP
OLTP と OLAP を理解する:
IPAのDBスペシャリスト試験は「DBスペシャリスト」という名前はついているものの、実際にはかなりOLAPよりもOLTP寄りの内容になっています。このことはあまり参考書などでは強調されていないので、分析寄りの業務をしている人はDBスペシャリスト試験の問題を見ると戸惑うこともあるかもしれません。(少なくとも自分は戸惑いました😓)
この記事では、OLTPとOLAPの違いについてまとめたいと思います。
1. 目的とユースケースの違い
項目 | OLTP(Online Transaction Processing) | OLAP(Online Analytical Processing) |
---|---|---|
主目的 | 登録・更新・検索などの業務処理 | 分析・集計・可視化 |
ユーザー | 業務システム / API / エンドユーザ | アナリスト / 経営層 / BIツール |
アクセス単位 | 1件〜数件 | 数万〜数億件 |
例:
- 銀行の入出金処理 → OLTP
- 売上データの月次集計 → OLAP
2. データ構造・正規化思想の違い
OLTPは第3正規形が前提。データ重複を排除し、整合性を保ちやすくします。
customers
├─ customer_id (PK)
├─ name
└─ prefecture_id (FK)
prefectures
├─ prefecture_id (PK)
└─ prefecture_name
OLAPでは JOINコスト削減や集計速度のために非正規化が許容されます。
sales_fact
├─ sale_id
├─ customer_name ← 重複OK
├─ prefecture_name ← 正規化解除
├─ product_name
├─ sale_date
└─ amount
3. クエリ特性の違い
観点 | OLTP | OLAP |
---|---|---|
SQL | INSERT / UPDATE / DELETE / SELECT | SELECT中心 |
WHERE句 | PK・狭い条件 | 範囲・集計 |
JOIN | 少ない | 多め(または非正規化で回避) |
GROUP BY | 基本使わない | 多用する |
実行時間 | ミリ秒〜秒 | 秒〜分〜時間 |
4. トランザクションと分離レベル
OLTPはACID前提、同時実行性・整合性・ロックが重要になります。
例:READ COMMITTED / REPEATABLE READ / SERIALIZABLE
一方、OLAPは基本「読み取り専用(スナップショット)」。
- 同時実行は少数
- ロールバックなし
- 長めのSELECT前提
5. ストレージ構造とI/O設計
項目 | OLTP | OLAP |
---|---|---|
形式 | 行指向(Row Store) | 列指向(Column Store)が多い |
I/O | ランダムアクセス多め | シーケンシャル/スキャン |
キャッシュ戦略 | 小さい行を頻繁に更新 | 大量データのバルク読み取り |
6. 履歴・時系列データの扱い
OLTP:最新状態を保持
OLAP:過去の履歴・時系列データを蓄積
例:
OLTP → 顧客マスタの「現在の住所」
OLAP → 「2022年時点の住所」で分析
Append型のデータモデルを使うケースも多いです。
7. システム構成とプロダクト例
種別 | プラットフォーム例 |
---|---|
OLTP | Cloud SQL, Aurora, AlloyDB, Oracle, PostgreSQL, MySQL |
OLAP | BigQuery, Redshift, Snowflake, Synapse, Teradata |
Discussion