列指向ストア

データを列 (カラム) 単位で保存し、分析クエリの集計を高速化するストレージ形式

データベースデータ分析

列指向ストアとは

列指向ストア (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)

詳しくは関連書籍を参照。

関連用語