列指向ストア
データを列 (カラム) 単位で保存し、分析クエリの集計を高速化するストレージ形式
データベースデータ分析
列指向ストアとは
列指向ストア (Column Store) は、データを行ではなく列 (カラム) 単位で保存するストレージ形式である。分析クエリ (SUM, AVG, COUNT) で必要な列だけを読み込むため、行指向より高速。Redshift、BigQuery、Parquet が列指向。詳細は「Redshift」を参照。
行指向 vs 列指向
行指向 (RDS):
Row 1: [id=1, name="Alice", age=30, city="Tokyo"]
Row 2: [id=2, name="Bob", age=25, city="Osaka"]
→ 1 行の全カラムを取得するのが高速
列指向 (Redshift):
id: [1, 2, 3, ...]
name: ["Alice", "Bob", ...]
age: [30, 25, ...]
→ 特定カラムの集計が高速、圧縮効率が高い
| 観点 | 行指向 | 列指向 |
|---|---|---|
| 得意 | 1 行の取得・更新 (OLTP) | 列の集計 (OLAP) |
| 苦手 | 大量データの集計 | 1 行の取得 |
| 圧縮 | 中程度 | 高い (同じ型のデータが連続) |
| I/O | 不要な列も読む | 必要な列だけ読む |
| 例 | PostgreSQL, MySQL | Redshift, Parquet |
Parquet ファイル形式
S3 上の Parquet ファイル:
orders.parquet
├── Column: order_id [1, 2, 3, ...]
├── Column: amount [1000, 2000, 500, ...]
└── Column: date [2026-01, 2026-01, 2026-02, ...]
Athena で S3 上の Parquet ファイルを直接クエリできる。CSV より 10〜100 倍高速。
-- Parquet: amount 列だけ読み込み (高速)
SELECT SUM(amount) FROM orders WHERE date = '2026-03';
-- CSV: 全列を読み込み (遅い)
SELECT SUM(amount) FROM orders_csv WHERE date = '2026-03';
AWS での列指向ストア
| サービス | 用途 |
|---|---|
| Redshift | マネージド DWH (列指向) |
| Athena + Parquet | S3 上の列指向ファイルをクエリ |
| Glue | CSV → Parquet への変換 |
いつ列指向を使うか
| ケース | 推奨 |
|---|---|
| 集計クエリ (SUM, AVG) | 列指向 (Redshift, Parquet) |
| 1 行の CRUD | 行指向 (RDS, DynamoDB) |
| ログ分析 | 列指向 (Parquet + Athena) |
| トランザクション | 行指向 (RDS) |
詳しくは関連書籍を参照。