HBase表设计

时间:2014-09-22 07:03:57

标签: hbase

我对HBase很新鲜,最近我们计划使用HBase存储&查询数据。但是当我尝试创建一些演示表时遇到了几个问题:

  1. ColumnFamily的用途是什么?因为所有列都必须属于一个CF而wiki建议只定义CF,所以我在定义它时会让我困惑吗?
  2. 似乎我们只能通过行键查询数据(比如RDBMS中的主键),但是如果我们不知道行键值,我们如何查询其他参数?
  3. 如果通过非行键列进行查询,性能是否会受到影响?
  4. 由于 Ivan Geng

2 个答案:

答案 0 :(得分:1)

  

ColumnFamily的用途是什么?由于所有列都必须属于一个CF而且wiki建议只定义CF,因此我对此进行定义会让我感到困惑吗?

ColumnFamily可用于组织数据。但它不止于此。在物理上,所有列族成员都存储在文件系统中。由于调谐和存储规范是在列族级别完成的,因此建议所有列族成员具有相同的通用访问模式和大小特征。

  

似乎我们只能通过行键查询数据(比如RDBMS中的主键),但是如果我们不知道行键值,我们如何查询其他参数?

取决于您的方案。有各种过滤器可用。请参阅:Filters in HBase 您可以将RowKey视为内置索引过滤器。如果您对任何其他列应用过滤器,则它不会被编入索引,因此性能与基于RowKey的GET无关。

  

如果通过非行键列进行查询,性能是否会受到影响?

如上所述,在其他列上使用Filters查询效率要低得多。

答案 1 :(得分:0)

ColumnFamily用于组织列(对它们进行分组)并添加一些灵活性,因为您可以随时在列族中添加新列而不影响实际数据。 HBase是面向NoSQL的,但我一直在使用Phoenix,一个用于HBase的SQL皮肤,以便对HBase数据应用SQL查询。使用Phoenix,您可以使用WHERE子句创建SQL查询,并且性能非常好看HERE。否则,您可以创建一个复合键来对数据进行排序,但这取决于您的数据以及您将要用它做什么......