<< 如何理解Hadoop-Hbase原理与应用小结 - leonarding技术博客 - ITPUB个人空间 - powered by X-Space | 首页 | Ken Wu's Blog » HBase二级索引与Join >>

HBase存储时间相关多列数据的两种方案 - 大圆那些事 - 博客园

多行单列

表结构设计

Row Key:用户标识ID + (Long.MAX_VALUE - timestamp)

Column Family:’cf’

Column Qualifier:’’

Value:宝贝、URL等

其中,使用(Long.MAX_VALUE – timestamp)作为Row Key的后半部分是为了便于获取最近插入的数据,一个用户标识ID下的数据存储在多个Row Key下,每个Row Key下仅有一个Column Qualifier,表示该用户的一次时间相关的访问数据(访问宝贝、URL等)。

查询方式

1)查询某个特定timestamp下的记录,则使用用户标识ID + (Long.MAX_VALUE - timestamp)进行Get查找;

2)查询某个用户标识ID下所有的记录,则通过Scan.setStartRow(uid)和Scan.setStopRow(uid+1)进行Scan查找;

3)查询某个用户标识ID下最近时间内的N条记录,则通过Scan.setStartRow(uid)和Scan.setStopRow(uid+1)进行Scan查找,但是为了只获取N条记录,可以设置Scan.setCaching(N)优化查询,同时做一次ResultScanner.next(N)得到结果。

单行多列

表结构设计

Row Key:用户标识ID

Column Family:’cf’

Column Qualifier:(Long.MAX_VALUE - timestamp)

Value:宝贝、URL等

其中,使用(Long.MAX_VALUE – timestamp)作为Column Qualifier是为了便于获取最近插入的数据,一个用户标识ID下的数据存储在一个Row Key下,每个Row Key下会有多个Column Qualifier,表示该用户的所有时间相关的访问数据(访问宝贝、URL等)。

查询方式

1)查询某个特定timestamp下的记录,则使用用户标识ID进行Get查找,同时通过Get.addColumn(‘cf’, (Long.MAX_VALUE – timestamp))方法限定要查询的Column Qualifier;

2)查询某个用户标识ID下所有的记录,则直接使用用户标识ID进行Get查找,通过Get.addFamily(‘cf’)方法添加整个Column Family;

3)查询某个用户标识ID下最近时间内的N条记录,则直接使用用户标识ID进行Get查找,通过Get.addFamily(‘cf’)方法添加整个Column Family,通过ColumnCountGetFilter(int N)限制最多要查询返回N条记录。

阅读全文……

标签 : , ,



发表评论 发送引用通报