ID Timestamp1 Timestamp2 Timestamp3 Timestamp4 Timestamp5
101003978854 10.1 34.2 23.5 19.36 28.05
101003998120 21.19 15.09 13.24 21.86 10.34
109721347573 13.76 26.8 10.09 31.12 27.43
以上数据库结构是我对 Hbase 感兴趣的结构。我知道使用singlecolumnname
或singlecolumnvalue
过滤器的Hbase查询对于较少的no是有效的。列过滤器。
但我有兴趣获得特定ID的上午10点到上午11点数据的时间范围查询。
让我知道如何实现这一目标。或者是否有更好的方法来实现与开源大数据堆栈中的其他技术类似。
由于
答案 0 :(得分:0)
HBase可以用较少的no表现良好。列系列和任何没有。如果模式设计得很好,你也可以非常有效地进行范围扫描,而不需要过滤器,从而导致效率低下。
如果要查询特定ID,将其设为rowkey是个好主意。 但是按照您的建议使用列不是一个好主意,因为无法根据范围获取列。
但是在这种情况下,您可以采用以下方法,
rowKey(时间戳和ID)colum1(计数器,非常适合高度并发的数据聚合)column2 ........
10.1ID1(as byte array) 1000 100...
10.1ID2 100 1000..
10.2ID1 10 100...
10.2ID2 5 20....
现在,如果要扫描特定的时间范围(例如10-11),则可以使用部分启动rowkey(10.0)和部分结束rowkey(10.9)扫描所有ID。 对于一个特定的id(比如ID1),可以使用start rowkey作为10.0ID1,结束为10.9ID1。
如果您想扫描一系列ID,那么最好将其作为rowKey。
如果要过滤扫描结果,请保留较少的列。 也是为了少一点。行(如扫描所示),将时间戳保持为小时,天,月,以符合您的要求为准。
对于扫描,最好在群集节点之间均匀分布数据,以便扫描更快,因为它们将在区域上并行执行。请参阅Hbase presplit keys strategy
Hbase非常适合良好的架构和rowkey设计,并且根据使用替代品和类似用例的经验,我可以保证它是最好的之一。