2014-09-22 54 views
1

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

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

感谢 伊万耿

回答

1

ColumnFamily的用法是什么?由于所有的列都必须属于一个CF,而维基建议只定义CF,这使我对这个定义感到困惑?

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

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

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

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

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

+0

谢谢Venkat,我会研究过滤器。 HBase中表格设计最佳实践的任何参考?由于我在创建表格时仍然用RDBMS的方式思考:( – 2014-09-23 01:42:45

+0

我认为这是最好的入门指南:http://hbase.apache.org/book/schema.html – Venkat 2014-09-23 01:44:57

0

的ColumnFamily用于组织你的列(其中组),并添加一些灵活性,你可以在你想要一个列族随时随地,而不影响实际数据添加新列。 HBase以NoSQL为导向,但我一直在使用Phoenix(HBase的SQL皮肤),以便在HBase数据上应用SQL查询。使用Phoenix,你可以使用WHERE子句创建SQL查询,并且性能很不错,请看看HERE。否则,您可以创建一个复合键来对数据进行排序,但这取决于您的数据以及您将如何处理它...