多个时间戳作为列名:时间序列数据设计,用于使用BigData进行快速数据检索

时间:2016-12-08 08:51:21

标签: database-design hbase time-series bigdata database

 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 感兴趣的结构。我知道使用singlecolumnnamesinglecolumnvalue过滤器的Hbase查询对于较少的no是有效的。列过滤器。 但我有兴趣获得特定ID的上午10点到上午11点数据的时间范围查询。

让我知道如何实现这一目标。或者是否有更好的方法来实现与开源大数据堆栈中的其他技术类似。

由于

1 个答案:

答案 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设计,并且根据使用替代品和类似用例的经验,我可以保证它是最好的之一。