作为Nosql数据库的一员,HBase查询只能通过其rowkey来查询(rowkey用来表示唯一一行记录),HBase中的数据是按照rowkey的ASCII字典顺序进行全局排序的。HBase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这个三个维度可以对HBase中的数据进行快速定位。
HBase中rowkey可以唯一标识一行记录,在HBase查询的时候,有以下几种方式:
- 通过get方式(org.apache.hadoop.hbase.client.Get),指定rowkey获取唯一一条记录
- 通过scan方式(org.apache.hadoop.hbase.client.Scan),设置startRow和stopRow参数进行范围匹配
- 全表扫描,即直接扫描整张表中所有行记录
get:
按照RowKey获取唯一一条记录。get的方法处理分两种:设置了ClosestRowBefore和没有设置ClosestRowBefore的RowLock。主要用来保证行的事务性,即每个get是以一个row来标记的。
scan:
按照指定的条件获取一批记录。实现条件查询功能使用的就是scan方式,scan在使用时有以下几点值得注意:
- scan可以通过setCach与setBatch方法提高速度(以空间换时间)
- scan可以通过setStartRow与setEndRow来限定范围。范围越小,性能越高。通过巧妙的RowKey设计使我们批量获取记录集合中的元素挨在一起(应该在同一个Region下),可以在遍历结果时获得很好的性能
- scan可以通过setFilter方法添加过滤器,这也是分页、多条件查询的基础
补充:Hbase列族怎么创建比较好
一个列族在数据底层是一个文件,所以将经常一起查询的列放到一个列族中,列族尽量少,减少文件的寻

本文介绍了HBase中RowKey的设计原则,包括唯一性、排序、散列和长度原则,并详细讨论了数据倾斜问题,提出了预分区和RowKey设计实战策略,如反转、加盐和Hash散列来解决热点问题。此外,还分享了实际应用场景中的RowKey设计方案。
最低0.47元/天 解锁文章
655

被折叠的 条评论
为什么被折叠?



