ジョージ、HBaseCon2012のHBaseスキーマの理解について私が行ったプレゼンテーションは次のとおりです。
http://www.cloudera.com/content/cloudera/en/resources/library/hbasecon/video-hbasecon-2012-hbasecon-2012.html
つまり、HBaseの各行は実際にはキー/値マップであり、それぞれに値を持つ任意の数の列(キー)を持つことができます。(そして、技術的には、それぞれが異なるタイムスタンプを持つ複数の値を持つことができます)。
さらに、「列ファミリ」を使用すると、同じ行の異なる物理(ディスク上の)ファイルで複数のキー/値マップをホストできます。これは、通常は他のセットから切り離してアクセスされる値のセットがある状況で最適化するのに役立ちます(したがって、ディスクから読み取るものが少なくなります)。トレードオフは、もちろん、列を2つの列ファミリーに分割する場合、必要なディスクアクセスの数が2倍になるため、行のすべての値を読み取る方が手間がかかることです。
より標準的な「列指向」データベースとは異なり、すべての論理列に列ファミリーを持つHBaseテーブルを作成している人のことは聞いたことがありません。列ファミリーに関連するオーバーヘッドがあり、一般的なアドバイスは、通常、3つまたは4つ以下にすることです。列ファミリーは「設計時」の情報です。つまり、テーブルを作成(または変更)するときに列ファミリーを指定する必要があります。
一般に、列ファミリーは、HBaseのアーキテクチャーを深く理解し、それが正味のメリットになることを示すことができた場合にのみ使用する高度な設計オプションであると思います。
したがって、全体として、HBaseが「列指向」の方法で動作できることは事実ですが、これはHBaseのデフォルトでも最も一般的なデザインパターンでもありません。キー/値マップを備えた行ストアと考える方がよいでしょう。