在 Jim R. Wilson 的博客文章了解 HBase 和 BigTable 中,可以阅读一篇非常容易理解的关于HBase数据模型的解释。另一个很好的解释可以在 Amandeep Khurana 的 基本模式设计简介中找到。

阅读不同的观点可能有助于深入了解 HBase 架构设计。链接的文章与本节中的信息具有相同的基础。

以下示例是 BigTable 论文第 2 页上的一个略微修改的形式。有一个名为webtable的表包含两行(com.cnn.wwwcom.example.www)和三个列族,名为contentsanchorpeople。在此示例中,对于第一行(com.cnn.www),anchor包含两列(anchor:cssnsi.comanchor:my.look.ca),contents包含一列(contents:html)。此示例包含具有行键com.cnn.www的行的 5 个版本,以及具有行键com.example.www的行的一个版本。 contents:html列限定符包含给定网站的整个 HTML。 anchor列族的限定符每个都包含指向该行所代表的站点的外部站点的链接,以及它在其链接的anchor中使用的文本。 people列系列表示与该站点关联的人员。

列名

按照惯例,列名由其列族前缀和限定符组成。例如,列 contents:html 由列族contentshtml限定符组成。冒号字符(:)从列族限定符中分隔列族。

表 6. Table webtable

行键 时间戳 ColumnFamily contents ColumnFamily anchor ColumnFamily people
“com.cnn.www” T9 anchor:cnnsi.com = "CNN"
"com.cnn.www" T8 anchor:my.look.ca = "CNN.com"
"com.cnn.www" T6 contents:html = "<html>…"
"com.cnn.www" T5 contents:html = "<html>…"
"com.cnn.www" T3 contents:html = "<html>…"
“com.example.www” t5 contents:html = "<html>…" people:author = "John Doe"

此表中看起来为空的单元格在 HBase 中不占用空间,或实际上不存在。这就是 HBase“稀疏”的原因。表格视图不是查看 HBase 中数据的唯一方法,甚至也不是最准确的方法。以下表示与多维映射相同的信息。这只是一个出于演示目的的模型,可能并不完全准确。

{
  "com.cnn.www": {
    contents: {
      t6: contents:html: "<html>..."
      t5: contents:html: "<html>..."
      t3: contents:html: "<html>..."
    }
    anchor: {
      t9: anchor:cnnsi.com = "CNN"
      t8: anchor:my.look.ca = "CNN.com"
    }
    people: {}
  }
  "com.example.www": {
    contents: {
      t5: contents:html: "<html>..."
    }
    anchor: {}
    people: {
      t5: people:author: "John Doe"
    }
  }
}