【からむふぁみりー】

カラムファミリー とは?

公開:
💡 関連する引き出しを同じ棚にまとめた整理術
📌 このページのポイント
カラムファミリーの構造 行キー user:001 user:002 user:003 基本情報ファミリー name email age 田中 tanaka@ 32 鈴木 suzuki@ 28 佐藤 sato@ 45 アクティビティファミリー last_login purchase score 07-20 3件 88 07-19 71 07-18 12件 95 物理的にまとめて格納 物理的にまとめて格納
関連するカラムをファミリー単位でまとめて格納するWide-Column型DBの構造
ひよこ ひよこ
ペンギン先生、カラムファミリーって普通のテーブルの列と何が違うの?
ペンギン先生 ペンギン先生
通常のRDBのテーブルは行単位でデータを管理するけど、カラムファミリーは「関連する列をまとめた束」を物理的に近くに格納する仕組みだよ。
ひよこ ひよこ
列をグループにまとめると何がうれしいの?
ペンギン先生 ペンギン先生
例えばユーザー情報を管理するとき「基本情報ファミリー(名前・メール・年齢)」と「アクティビティファミリー(ログイン日時・購入履歴)」に分けるとしよう。「基本情報だけ取りたい」ときは基本情報ファミリーだけ読めばよくて、アクティビティのデータは一切読まなくて済むんだ。
ひよこ ひよこ
アクセスするデータの量を絞れるから速くなるんだね!
ペンギン先生 ペンギン先生
そうだよ。HBaseやCassandraではカラムファミリーが設計の核になっていてね。同じファミリー内のカラムはディスク上で物理的に隣り合って置かれるから、I/Oが効率よくなるんだ。
ひよこ ひよこ
スキーマの設計でどんなことに気をつけるの?
ペンギン先生 ペンギン先生
「一緒にアクセスすることが多い列を同じファミリーにまとめる」のが基本の考え方だよ。Cassandraではさらに「どんなクエリを投げるか」を先に決めてからテーブル設計をするクエリドリブン設計が推奨されているんだ。RDBのように後からJOINで柔軟に取得するのが難しいからね。
ひよこ ひよこ
使い方によって設計が全然変わってくるんだね!
ペンギン先生 ペンギン先生
そうなんだ。Bigtableを祖先として、HBase・Cassandraと発展してきたWide-Column型DBの真髄はまさにそこでね。大量データを高速に読み書きするために、「どんなアクセスパターンか」を設計の出発点にするのが大切だよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「カラムファミリー」って出てきたら「関連するカラムをまとめた列のグループ」と思えればだいたいOK!
📖 おまけ:英語の意味
「Column Family」 = カラムファミリー
💬 関連するカラム(列)を「家族(family)」のようにグループ化して管理するから、この名前が付いたよ
← 用語集にもどる