我想知道HBase是使用基于列的存储还是基于行的存储?
如果有人能澄清我的困惑,我们将不胜感激.
乔治,提前谢谢
Ian*_*ley 21
乔治,这是我在HBaseCon 2012上了解HBase模式的演讲:
简而言之,HBase中的每一行实际上都是一个键/值映射,您可以在其中包含任意数量的列(键),每个列都有一个值.(并且,从技术上讲,每个都可以有多个具有不同时间戳的值).
此外,"列族"允许您在同一行中,在不同的物理(磁盘上)文件中托管多个键/值映射.这有助于在您拥有通常与其他集不相交的值集合的情况下进行优化(因此您可以减少从磁盘读取的内容).权衡的是,当然,如果将列分成两个列系列,则读取连续的所有值会更有效,因为所需的磁盘访问次数是2倍.
与更标准的"面向列的"数据库不同,我从来没有听说有人为每个逻辑列创建一个具有列族的HBase表.与列族相关的开销,一般建议通常不超过3或4.列族是"设计时"信息,这意味着您必须在创建(或更改)表时指定它们.
一般来说,我发现列族是一种高级设计选项,只有在深入了解HBase的体系结构后才能使用它,并且可以证明它是一种净效益.
总的来说,虽然HBase可以采用"以列为导向"的方式,但它不是HBase中的默认设置模式,也不是最常见的设计模式.最好将其视为具有键/值映射的行存储.