HBase table design



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

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

谢谢Ivan耿

ColumnFamily有什么用途?由于所有列都必须属于一个CF,而wiki建议只定义CF,这让我在定义这一点上感到困惑?

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

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

这取决于你的情景。有各种可用的过滤器。请参阅:HBase中的过滤器您可以将RowKey视为内置的Indexed筛选器。如果在任何其他列上应用筛选器,则不会对其进行索引,因此性能与基于RowKey的GET相去甚远。

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

如上所述,在其他列上使用过滤器进行查询的效率要低得多。

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

最新更新