SDN
← 概念一覧へ
データベース

ワイドカラムストア

Wide-Column Store

列(カラム)を基本単位とし、ネストしたマップでデータを表すNoSQL。超大規模・高可用に強く、巨大なデータセット向き。Bigtable / HBase / Cassandra が代表。

キーポイント
  • 抽象モデルはネストしたマップ: ColumnFamily<RowKey, Columns<ColKey, Value, Timestamp>>。
  • 基本単位はcolumn(name と value のペット)。column family(≒テーブル)で束ねる。
  • 各値にtimestampを持ち、バージョン管理や競合解決に使う。
  • 代表: Bigtable(元祖, Google)→ HBase(Hadoop上)、Cassandra(Facebook発)。
  • 向き: 超大規模データ、高可用・高スケールが必要なケース。
トレードオフ

超大規模データを高可用・高スループットで扱えるのが最大の強みで、書き込みにも強い。一方、データモデル(ネストしたマップ)が直感的でなく学習コストが高い。クエリパターンを事前に想定してテーブル設計する必要があり、後から自由な検索を足しづらい。RDBMS的な柔軟なアドホッククエリには向かない。

データモデルを噛み砕く

名前からは想像しづらいですが、ワイドカラムストアの抽象は**入れ子になったマップ(辞書)**です。公式の表記:

ColumnFamily<RowKey, Columns<ColKey, Value, Timestamp>>

これを日本語で読み下すと:

  • ColumnFamily = テーブルのようなまとまり。
  • RowKey = 行を特定するキー(ユーザーIDなど)。
  • その下に Columns = 列の集まり。各列は ColKey(列名)→ Value(値)+ Timestamp(いつ書かれたか)

つまり『行キーで行を引き、その中に列名→値のマップがある』という二段構えのマップです。

図を描画中...

なぜ各値にtimestampがあるのか

ワイドカラムストアは超大規模分散が前提。複数ノードで同じデータを書くと競合が起きえます。各値に**いつ書かれたか(timestamp)**を持たせることで、『新しい方を採用』といったバージョン管理・競合解決ができます。

系譜

  • Bigtable(Google)= 元祖。論文がこの分野を切り拓いた。
  • HBase = Bigtableの思想をHadoopエコシステム上で実装。
  • Cassandra(Facebook発)= 高可用・分散に特化。多数のノードで巨大データを扱う。

何に使うか

超大規模(ペタバイト級)のデータを、多数のノードで高可用に扱いたいケース。ログの集約、時系列データ、メッセージ履歴など、書き込みが大量で、データが膨大な用途。

つまずきポイント

  • データモデルがRDBMSと全く違うので最初は戸惑う。『行キーの中に列名→値のマップが入っている』と捉える。
  • クエリパターンを先に決めてからテーブルを設計する文化。RDBMSのように『とりあえず正規化して後から自由に検索』はできない。アクセスパターンに合わせて非正規化的に設計する。

📊 図解

図解: ColumnFamily / RowKey / Columns の構造

ColumnFamily(テーブル相当)を RowKey で引き、その下に ColKey(列名)→ Value + Timestamp のマップが入る二段構え。各値が timestamp を持つのが競合解決の鍵。

図を描画中...

関連する概念

この概念で腕試し

関連する 2 問のクイズに挑戦できます。

クイズを解く