您可以创建该类型的复合键<timestamp><id>,然后hbase中的所有条目将按时间戳排序.然后,您可以创建一个扫描程序,该扫描程序从范围的开头开始,并在范围的结尾处结束.
您可能面临的一个问题是,如果您的插入率很高,那么您将拥有一台服务器作为所有新条目的热点.一种方法是反转键并确保第一部分是随机的:<sha1 of ID><timestamp>.这具有在整个集群上分配写入的优点,但缺点是需要读取整个表以获得特定范围.
如果您使用第一种方法<timestamp><id>,那么您的地图作业可能无法将工作分成任意数量的块.表分割工作的默认方式是在区域上.如果时间片足够小,则可以使用单个区域为数据提供服务,而不会在查询中获得任何并行性.您可能有一个自定义表拆分,它可以跨越多个映射器而不是区域来并行查询,但您仍然可以从一个区域读取所有数据,这也可能对并行性有缺点.
如何设置表格取决于您的预计使用情况和读/写比例,以及您需要的性能有多高.
如果您在时间戳中附加一个id以确保唯一性,那么您仍然可以让扫描程序返回具有给定时间戳的所有事件.HBase根据字节表示法对字符串进行排序.因此,如果您的密钥是<timestamp>:<id>,您可以将扫描仪设置为从行开始<timestamp>并停止行<timestamp+1>以获取该时间戳的所有事件