【问题标题】:HBase table designHBase 表设计
【发布时间】:2014-09-22 07:03:57
【问题描述】:

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

  1. ColumnFamily 有什么用?由于所有列都必须属于一个 CF,而 wiki 建议只定义 CF,所以定义这个让我感到困惑?
  2. 好像只能通过row key查询数据(就像RDBMS中的Primary key一样),但是如果不知道row key的值,如何通过其他参数查询呢?
  3. 如果通过非行键列查询,会不会影响性能?

谢谢 伊万·耿

【问题讨论】:

    标签: hbase


    【解决方案1】:

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

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

    好像只能通过row key查询数据(比如RDBMS中的Primary key),但是如果不知道row key的值,怎么能通过其他参数查询呢?

    取决于您的情况。有各种可用的过滤器。请参考:Filters in HBase 您可以将 RowKey 视为内置的索引过滤器。如果您在任何其他列上应用过滤器,则它不会被索引,因此性能远不及基于 RowKey 的 GET。

    如果通过非行键列查询,会不会影响性能?

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

    【讨论】:

    • 谢谢 Venkat,我会研究过滤器。 HBase 中表设计最佳实践的任何参考?正如我在创建表时仍在以 RDBMS 方式思考的那样:(
    • 我认为这是最好的入门指南:hbase.apache.org/book/schema.html
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多