gpt4 book ai didi

hadoop - 使用HBase存储时序数据

转载 作者:可可西里 更新时间:2023-11-01 14:09:48 29 4
gpt4 key购买 nike

我们正在尝试使用HBase 来存储时间序列数据。我们目前拥有的模型将时间序列存储为单元格中的版本。这意味着该单元最终可能会存储数百万个版本,并且此时间序列上的查询将使用 HBase 中的 Get 类中可用的 setTimeRange 方法检索一系列版本。

例如

{
"row1" : {
"columnFamily1" : {
"column1" : {
1 : "1",
2 : "2"
},
"column2" : {
1 : "1"
}
}
}
}

这是在 HBase 中存储时序数据的合理模型吗?

在多列(是否可以跨列查询)或行中存储数据的替代模型更合适?

最佳答案

我认为您不应该在此处使用版本控制来存储时间序列。不是因为它行不通,而是因为它不是为特定用例设计的,还有其他方法。


我建议您将时间序列存储为时间步长作为列限定符,值将是数据本身。像这样的东西:

{
"row1" : {
"columnFamily1" : {
"col1-000001" : "1"
"col1-000002" : "2"
"col1-000003" : "91"
"col2-000001" : "31"
}
}
}
}

这里的一件好事是 HBase 按排序顺序存储列限定符,因此在读取时间序列时,您应该按顺序看到项目。


另一个现实的选择是将记录的标识符作为行键的第一部分,然后在行键中也有时间步长。像这样的东西:

{
"fooseries-00001" : {
"columnFamily1" : {
"val" : "1"
}
}
}
"fooseries-00002" : {
"columnFamily1" : {
"val" : "2"
}
}
}

}

它有一个很好的特性,就是可以很容易地在特定系列中进行范围扫描。例如,提取 fooseries 的步骤 104 到 199 将非常容易实现并且非常高效。

这个的缺点是删除整个系列将需要更多的管理和同步。另一个缺点是 MapReduce 分析将很难对这些数据进行任何类型的分析。使用上述方法,整个时间序列将传递给一个 map() 调用,而在这里,将针对每一帧调用 map()

关于hadoop - 使用HBase存储时序数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4126259/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com