ワイドカラムストア
Wide-Column Store
列(カラム)を基本単位とし、ネストしたマップでデータを表すNoSQL。超大規模・高可用に強く、巨大なデータセット向き。Bigtable / HBase / Cassandra が代表。
データモデルを噛み砕く
名前からは想像しづらいですが、ワイドカラムストアの抽象は**入れ子になったマップ(辞書)**です。公式の表記:
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 を持つのが競合解決の鍵。
図を描画中...