如何跳过Hbase Scan中的行?

时间:2014-01-14 13:03:00

标签: hadoop hbase

我正在实施一个简单的分页,例如转到第1页,第2页,第3页等等。

在HBase Book中我读到有一个PageFilter,它有一个构造函数,其中一个参数指示要返回的行数,但问题是如何去,例如,第5页直接跳过pageSize * currentPageNumber行? HBase书中给出的示例看起来像序列分页,即您可以直接转到第5页。

有没有办法在HBase中跳过行?

提前致谢。

1 个答案:

答案 0 :(得分:3)

PageFilter不提供任何偏移功能,它就像一个限制子句,当你有足够的数据时停止扫描操作。

重要的是要说HBase不知道表有多少行,你必须扫描整个表才能得到这个数。除此之外,仅此一项就不可能对数据进行分页(因为您不知道总页数或每行的偏移量)。不要把它视为一个缺点,因为当你写大量数据时,这会产生巨大的影响。

话虽如此,数百万(或数十亿)行的分页没有意义。您应该以一种始终提供起点(rowkey)的方式设计表,这样您的扫描操作就可以从那里开始读取。你不需要知道整个行键,包括start&停止行只能是一个前缀(即:如果您的数据按8字节长的时间戳自然排序,您可以使用它来快进前几个小时,几天,几个月......)。

如果你不能提供任何起点(甚至部分起点),一个非常简单的解决方案可以为你工作就是批量检索记录(即:1000个项目的批量,足够50页,可以很容易处理客户端)。然后,当您到达批处理的最后一页时,只需使用最后一项的rowkey作为下一次扫描操作的开始,该操作应检索另一批1000行,依此类推....唯一的缺点是直接浏览更高页面会很昂贵,因为您需要先加载以前的批次。