在 Jim R. Wilson 的博客文章了解 HBase 和 BigTable 中,可以阅读一篇非常容易理解的关于HBase数据模型的解释。另一个很好的解释可以在 Amandeep Khurana 的 基本模式设计简介中找到。
阅读不同的观点可能有助于深入了解 HBase 架构设计。链接的文章与本节中的信息具有相同的基础。
以下示例是 BigTable 论文第 2 页上的一个略微修改的形式。有一个名为webtable
的表包含两行(com.cnn.www
和com.example.www
)和三个列族,名为contents
,anchor
和people
。在此示例中,对于第一行(com.cnn.www
),anchor
包含两列(anchor:cssnsi.com
,anchor:my.look.ca
),contents
包含一列(contents:html
)。此示例包含具有行键com.cnn.www
的行的 5 个版本,以及具有行键com.example.www
的行的一个版本。 contents:html
列限定符包含给定网站的整个 HTML。 anchor
列族的限定符每个都包含指向该行所代表的站点的外部站点的链接,以及它在其链接的anchor
中使用的文本。 people
列系列表示与该站点关联的人员。
列名
按照惯例,列名由其列族前缀和限定符组成。例如,列 contents:html 由列族
contents
和html
限定符组成。冒号字符(:
)从列族限定符中分隔列族。
表 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"
}
}
}