OLTPとOLAP

OLTPとOLAPとは

データベースの使われ方は、大きく2つのタイプに分かれます。

  • OLTP(Online Transaction Processing / オンライン取引処理)— 注文登録や残高更新など、日々の業務そのものを処理する使い方
  • OLAP(Online Analytical Processing / オンライン分析処理)— 「先月の売上を店舗別・商品別に集計する」など、大量データを分析する使い方

同じ「データベース」でも、求められる性能がまったく違うため、設計も置き場所も分けるのが定石です。

2つの違い

OLTPOLAP
目的業務データの登録・更新集計・分析・レポート
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 的な重い処理を流すと業務処理を圧迫するため、分析用の置き場所へ分離します。