多时间戳作为列名:使用bigdata进行快速数据检索的timeseries数据设计

ztigrdn8  于 2021-06-10  发布在  Hbase
关注(0)|答案(1)|浏览(234)
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感兴趣的。我知道hbase查询使用 singlecolumnname 或者 singlecolumnvalue 过滤器对于较少的列过滤器有效。但我有兴趣得到一个时间范围的查询,比如上午10点到上午11点的数据。
让我知道如何做到这一点。或者在开源大数据栈中有没有更好的方法来实现与其他技术类似的功能。
谢谢

1l5u6lss

1l5u6lss1#

hbase可以在更少的列族和任意数量的列进行查找的情况下运行良好。如果架构设计良好,您还可以非常高效地执行范围扫描,而不需要过滤器,从而导致效率低下。
如果要查询特定的id,最好将其设为rowkey。但是按照您的建议使用列并不是一个好主意,因为不可能基于范围获取列。
但是在这种情况下,你可以采用以下方法,
rowkey(timestamp和id)column1(计数器,非常适合于高度并发的数据聚合)column2。。。。。。。。

10.1ID1(as byte array)     1000 100...
10.1ID2                    100  1000..
10.2ID1                    10   100...
10.2ID2                    5    20....

现在,如果您想在特定的时间范围内(比如10-11)进行扫描,那么您可以对所有id使用部分开始行键(10.0)和部分结束行键(10.9)进行扫描。对于一个特定的id(比如id1),可以使用start rowkey作为10.0id1,end作为10.9id1。
如果您想扫描一系列的id,那么最好使用as rowkey。
如果要过滤扫描结果,请保留较少的列。同样,对于较少的行数(因为扫描是有意的),保持时间戳为小时,天,月,以适合您的要求。
对于扫描,最好将数据均匀地分布在集群节点上,这样扫描速度更快,因为它们将在区域上并行执行。请参阅hbase预裂密钥策略
hbase在良好的模式和行键设计下工作得非常好,从使用替代方案和类似用例的经验来看,我可以保证它是最好的。

相关问题