OLTPとOLAP
OLTPとOLAPとは
データベースの使われ方は、大きく2つのタイプに分かれます。
- OLTP(Online Transaction Processing / オンライン取引処理)— 注文登録や残高更新など、日々の業務そのものを処理する使い方
- OLAP(Online Analytical Processing / オンライン分析処理)— 「先月の売上を店舗別・商品別に集計する」など、大量データを分析する使い方
同じ「データベース」でも、求められる性能がまったく違うため、設計も置き場所も分けるのが定石です。
2つの違い
| OLTP | OLAP | |
|---|---|---|
| 目的 | 業務データの登録・更新 | 集計・分析・レポート |
| 1回の処理 | 少ない行を高速に読み書き | 大量の行を読んで集計 |
| 代表的な操作 | INSERT / UPDATE / 1件検索 | SUM・GROUP BY・期間比較 |
| 同時実行数 | 多い(利用者全員) | 少ない(分析担当者・ダッシュボード) |
| データの鮮度 | 常に最新 | 数時間〜1日前でも許容されることが多い |
| 重視するもの | 応答速度と整合性 | 走査(スキャン)性能 |
OLTP では [[トランザクションとACID]] による整合性が最優先で、[[データベースインデックス]] を使って「1件をすばやく引く」ことに最適化します。OLAP では逆に、何百万行もまとめて読んで合計を出す力が問われます。
なぜ分けるのか
OLTP 用のデータベースで重い集計クエリを流すと、業務システム全体が遅くなります。「月次集計を実行したら注文画面が固まった」は典型的な事故です。
そこで、業務用の [[リレーショナルデータベース]] とは別に分析用の置き場所として [[データウェアハウス]] を用意し、[[データパイプライン・ETL]] で定期的にデータを写します。分析はそちらで行うことで、業務システムへの影響を切り離せます。
行指向と列指向
内部のデータの持ち方にも違いがあります。
- 行指向(row-oriented)— 1行分をまとめて保存。1件の読み書きが速く、OLTP 向き
- 列指向(columnar)— 列ごとにまとめて保存。「売上金額の列だけ全部読む」が速く、OLAP 向き
分析用のデータウェアハウス製品の多くが列指向を採用しているのは、集計で使う列だけを読めば済むからです。
初学者向けポイント
- まず「業務を回すのが OLTP、振り返るのが OLAP」と覚える
- 本番の業務データベースに重い集計 SQL を直接投げない — 分析用のコピー先を使うのが基本マナー
- 小規模なうちは同じデータベースで兼ねることもあるが、データ量と利用者が増えると分離が必要になる
関連技術とのつながり
- [[データウェアハウス]] — OLAP 用途のためにデータを集約する専用の置き場所
- [[データパイプライン・ETL]] — OLTP のデータを分析用に運ぶ仕組み
- [[リレーショナルデータベース]] — OLTP の中心を担う存在
- [[トランザクションとACID]] — OLTP で整合性を守るための基盤
- [[データベースインデックス]] — OLTP の高速な1件検索を支える仕組み
- [[実行計画とクエリチューニング]] — その集計SQLが重いかどうかを判定する手順
Q: OLTPの説明として正しいのはどれ?
- [x] 注文登録や残高更新など日々の業務データを登録・更新する使い方
- [ ] 数年分のデータを集計してレポートを作る使い方
- [ ] データを圧縮して長期保管する使い方
解説: OLTP はオンライン取引処理の略で、業務そのものを回す少量データの高速な読み書きを指します。
Q: OLAPに向いているとされるデータの持ち方はどれ?
- [ ] 行指向
- [x] 列指向
- [ ] 画像形式
解説: 集計では特定の列だけを大量に読むため、列ごとにまとめて保存する列指向が有利です。
Q: 本番の業務データベースで重い集計クエリを直接実行すると起きうる問題はどれ?
- [ ] データが自動的に暗号化される
- [x] 業務システム全体の応答が遅くなる
- [ ] インデックスが自動で作成される
解説: OLTP 用のデータベースに OLAP 的な重い処理を流すと業務処理を圧迫するため、分析用の置き場所へ分離します。