はじめに
データベースには OLTP(Online Transaction Processing)と OLAP(Online Analytical Processing)という 2 種類の処理方式があります。どちらも大量のデータを保存・処理するためのシステムですが、得意とする領域が異なります。
従来は OLTP がデータベースの主流でしたが、AI の台頭によりデータ分析の需要が増え、OLAP への関心も高まっています。
この記事では OLTP と OLAP の違いについて解説していこうと思います。
本文
OLTP とは
OLTP(Online Transaction Processing)は、トランザクション処理を行うためのデータベース処理方式です。銀行の振込、EC サイトの注文、在庫管理など、リアルタイムで発生するトランザクションを処理することに特化しています。
代表的な OLTP データベースには MySQL、PostgreSQL、Oracle Database などがあります。
トランザクション
トランザクションとは、データベースに対する一連の操作をひとまとまりにしたものです。
例えば銀行の振込処理では以下の操作が 1 つのトランザクションとして扱われます。
- 送金元の口座から金額を引く
- 送金先の口座に金額を足す
この 2 つの操作は「すべて成功する」か「すべて失敗する」かのどちらかでなければなりません。片方だけ成功してしまうと、お金が消えたり増えたりしてしまいます。このような性質を ACID 特性と呼びます。
- Atomicity(原子性): トランザクションは全て成功するか、全て失敗するか
- Consistency(一貫性): データの整合性が常に保たれる
- Isolation(独立性): 複数のトランザクションが互いに干渉しない
- Durability(永続性): 完了したトランザクションの結果は永続的に保存される
OLAP とは
OLAP(Online Analytical Processing)は、大量のデータを分析するためのデータベース処理方式です。売上の傾向分析、ユーザー行動の集計、レポート作成などに活用されます。
代表的な OLAP データベースには Amazon Redshift、Google BigQuery、ClickHouse などがあります。
データの格納例
OLTP と OLAP ではデータの格納方式が異なります。以下の注文データを例に比較してみましょう。
| order_id | customer_id | product_id | quantity | price | order_date |
|---|---|---|---|---|---|
| 1 | 101 | A001 | 2 | 1000 | 2024-12-01 |
| 2 | 102 | B002 | 1 | 2500 | 2024-12-01 |
| 3 | 101 | A003 | 3 | 800 | 2024-12-02 |
OLTP
OLTP では行指向でデータを格納します。1 つのレコード(行)のデータが連続してディスクに保存されます。
[1, 101, A001, 2, 1000, 2024-12-01] [2, 102, B002, 1, 2500, 2024-12-01] [3, 101, A003, 3, 800, 2024-12-02]
この方式は「特定の注文の全情報を取得する」といった処理に適しています。
OLAP
OLAP では列指向でデータを格納します。同じカラムのデータが連続してディスクに保存されます。
order_id: [1, 2, 3]
customer_id: [101, 102, 101]
product_id: [A001, B002, A003]
quantity: [2, 1, 3]
price: [1000, 2500, 800]
order_date: [2024-12-01, 2024-12-01, 2024-12-02]
この方式には「特定のカラムをまとめて取得する」処理に適しています。
例えば、「price の合計」を計算する際、price カラムだけを読めばよいのです。
まとめ
- OLTP はトランザクション処理向けであり、短時間・高頻度の読み書きに最適化され、行指向でデータを格納
- OLAP は分析処理向けであり、大量データの集計・分析に最適化され、列指向でデータを格納
- 用途に応じて適切なデータベースを選択することが重要