12

可能有很多类似的问题,但他们没有回答我的情况(至少我无法理解这一点)。

  • 可以说,我在 HBase 中有一个包含 4 个列族的表。主要原因是每个列族都有不同的 VERSIONS 属性(非常不同)。

  • 所有族的所有列都不是存储大数据(例如全文),而是平均1KB(长的标识符,一些短字符串,整数等)

  • 我需要以多种方式访问​​数据:按列族扫描和获取,按版本(特定版本或范围)获取给定行的所有单元格,最后但并非最不重要:获取给定行的所有列的最新版本.

那么,在这种情况下,拥有 4 个列族的缺点是什么?读取效率是否较低,因为它们在不同的存储文件上操作(如果行不在内存中)?

4

4 回答 4

13

HBase 中的列族数量是有限制的。每个列族有一个 MemStore(它是一个写入缓存,用于在将新数据写入 Hfile 之前存储新数据),当一个已满时,它们都会刷新。

添加的列族越多,创建的 MemStore 就越多,并且 Memstore 刷新会更频繁。它会降低性能。

于 2016-04-20T19:53:36.480 回答
10

列族背后的想法很棒——不幸的是,当前的 HBase 实现不能很好地处理很多列族。基本上,如果您有完全不同的访问模式,您应该尝试坚持使用一个并添加第二个。另请参阅HBase 手册

您可以做的是将您不同的“家庭”保留为具有不同前缀的列。HBase 是稀疏的,因此不会占用更多空间,如果需要,您仍然可以在扫描时获得一个带有 columnPrefix 过滤器的“家庭”

于 2012-10-08T07:27:22.737 回答
7

根据 Apache HBase wiki Hbase 将面临超过 2 或 3 个列族的性能问题。

于 2012-10-08T05:48:49.343 回答
1

当 MemStore 积累了足够的数据时,整个排序集被写入 HDFS 中的新 HFile。HBase 每个列族使用多个 HFile,其中包含实际的单元格或 KeyValue 实例。这些文件随着时间的推移而创建,因为在 MemStore 中排序的 KeyValue 编辑作为文件刷新到磁盘。

请注意,这是 HBase 中列族数量受到限制的原因之一。每个 CF 有一个 MemStore;当一个满了,他们都冲水。它还保存最后写入的序列号,以便系统知道到目前为止保存的内容。添加的列族越多,创建的 MemStore 就越多,并且 Memstore 刷新会更频繁。

于 2019-02-19T08:59:58.117 回答