HBase数据模型中的行键
HBase数据存储由一个或者多个表组成,该表由行键索引。
数据以列的排存储在行中,并且行可以具有多个版本。
默认情况下,使用时间戳实现行的数据版本控制。
|行钥匙|列族:{列限定符:版本:值} |
| --- - | --- |
| 00001 | customername:{'fn':
1383859182496:'约翰',
'ln':1383859182858:'史密斯',
'Mn':1383859183001:'蒂莫西' ,
'Mn':1383859182915:'t'}
1383859183030:'[email protected]',
'sa':1383859183073:'1 Hadoop Lane,NY
11111'} |
| 00002 | customername:{'fn':
1383859183103:'Jane',
'Ln':1383859183163:'Doe',
'SA':1383859185577:'7 HBase Ave,CA
22222'} |
为了说明,该表有两个简单的行键:00001和00002.行键实现为字节数组,并按字节词汇表排序,简单意味着行键被排序,byte按字节排序,byte左到右。
如果我们在设计行键时思考数值,则排序很简单。
给定两个键,如果键1中的索引1的字节小于键2中的索引1的字节,则行键1将始终存储在行键2之前,无论字节序列中的旁边是什么。
但是,通常使用可打印(ASCII)字符而不是HBase中的行键的数值,如果我们这样做,则需要了解Java语言代表使用Unicode标准的字符。
以下示例说明了基本拉丁语(ASCII)的这种设计考虑因素。
“RowA” precedes “RowA”Row-1” precedes “Row11″Row1” precedes “RowA”
你可能想知道为什么你会对行键的这种细节感到烦恼。
这种特别关注的原因是,适当的行关键设计对于实现HBase的良好性能至关重要 - 不这样做意味着我们不会实现HBase集群的全价值。
排序的行键可以更快地访问数据。