HBase 的数据储存如下示例(官方文档例子):

表格中的空白单元不会占用物理存储空间,只是概念上存在
从 schema 的角度看,类似如下:
{
"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"
}
}
}
每一行中,列的组成都是灵活的,行与行之间并不需要遵循相同的列定义, 也就是HBase数据表 ”schema-less“ 的特点。

用来表示唯一一行记录的主键,HBase的数据是按照 RowKey 的字典顺序进行全局排序的,所有的查询都只能依赖于这一个排序维度。
通过下面一个例子来说明一下”字典排序“的原理:
RowKey {“abc”, “a”, “bdf”, “cdf”, “defg”} 按字典排序后的结果为 {“a”, “abc”, “bdf”, “cdf”, “defg”}
也就是说,当两个 RowKey 进行排序时,先对比两个 RowKey 的第一个字节,如果相同,则对比第二个字节,依此类推…如果在对比到第M个字节时,已经超出了其中一个 RowKey 的字节长度,那么,短的 RowKey 要被排在另外一个RowKey的前面;