Hbase 时间序列数据格式:使用复合键与使用带时间戳的版本控制
Hbase time-series data format: Using composite key vs. Using versioning with timestamp
我喜欢存储 1000 万个 LAN 设备的字节计数器日志。
每个设备每 15 分钟报告一次字节计数器值 (96 samples/day),每个数据样本有 500 列。每个设备都由其设备序列号 dev_sn
标识。
一天结束时,我将处理所有设备的数据(计算每个设备的总字节数)并将它们存储为 HIVE 数据格式。
原始数据如下:(例如设备 sn1
、sn2
和 sn3
报告值 t1
、t2
,和 t3
)
方法一:同时使用dev_sn
和timestamp
作为复合row-key
。
方法二:使用dev_sn
作为row-key
,将每条数据存储为已有值的版本更新
要找到总字节数,
- 方法一:按
sn1
搜索组合键,按时间排序,对数据进行处理
- 方法二:通过
sn1
搜索拉取所有版本并处理数据
我认为方法 2 是更好的解决方案,因为它创建的行键数量更少,但不确定这是否真的是更好的方法。一些建议真的很有帮助。
这是主观的,但我总是选择复合行键而不是版本控制,原因如下:
- 您可以在每台设备上无限存储 "versions"。对于版本控制,此 属性 是有限的(在配置中设置)。
- 使用 HBase 命令从特定 timestamps/time 范围检索条目要容易得多。前缀扫描比 API.
版本更容易使用
- 您没有理由想要减少行键的数量 - HBase 专门设计用于存储大量的行键。
- 如果您需要删除上周二的数据怎么办?版本控制很困难,使用复合键只需一小段代码。
顺便说一句,请务必预先拆分您的区域服务器,以便 dev_sn
值均匀分布。
我喜欢存储 1000 万个 LAN 设备的字节计数器日志。
每个设备每 15 分钟报告一次字节计数器值 (96 samples/day),每个数据样本有 500 列。每个设备都由其设备序列号 dev_sn
标识。
一天结束时,我将处理所有设备的数据(计算每个设备的总字节数)并将它们存储为 HIVE 数据格式。
原始数据如下:(例如设备 sn1
、sn2
和 sn3
报告值 t1
、t2
,和 t3
)
方法一:同时使用dev_sn
和timestamp
作为复合row-key
。
方法二:使用dev_sn
作为row-key
,将每条数据存储为已有值的版本更新
要找到总字节数,
- 方法一:按
sn1
搜索组合键,按时间排序,对数据进行处理 - 方法二:通过
sn1
搜索拉取所有版本并处理数据
我认为方法 2 是更好的解决方案,因为它创建的行键数量更少,但不确定这是否真的是更好的方法。一些建议真的很有帮助。
这是主观的,但我总是选择复合行键而不是版本控制,原因如下:
- 您可以在每台设备上无限存储 "versions"。对于版本控制,此 属性 是有限的(在配置中设置)。
- 使用 HBase 命令从特定 timestamps/time 范围检索条目要容易得多。前缀扫描比 API. 版本更容易使用
- 您没有理由想要减少行键的数量 - HBase 专门设计用于存储大量的行键。
- 如果您需要删除上周二的数据怎么办?版本控制很困难,使用复合键只需一小段代码。
顺便说一句,请务必预先拆分您的区域服务器,以便 dev_sn
值均匀分布。