Hbase 时间序列数据格式:使用复合键与使用带时间戳的版本控制

Hbase time-series data format: Using composite key vs. Using versioning with timestamp

我喜欢存储 1000 万个 LAN 设备的字节计数器日志。 每个设备每 15 分钟报告一次字节计数器值 (96 samples/day),每个数据样本有 500 列。每个设备都由其设备序列号 dev_sn 标识。

一天结束时,我将处理所有设备的数据(计算每个设备的总字节数)并将它们存储为 HIVE 数据格式。

原始数据如下:(例如设备 sn1sn2sn3 报告值 t1t2,和 t3)

方法一:同时使用dev_sntimestamp作为复合row-key

方法二:使用dev_sn作为row-key,将每条数据存储为已有值的版本更新

要找到总字节数,

我认为方法 2 是更好的解决方案,因为它创建的行键数量更少,但不确定这是否真的是更好的方法。一些建议真的很有帮助。

这是主观的,但我总是选择复合行键而不是版本控制,原因如下:

  1. 您可以在每台设备上无限存储 "versions"。对于版本控制,此 属性 是有限的(在配置中设置)。
  2. 使用 HBase 命令从特定 timestamps/time 范围检索条目要容易得多。前缀扫描比 API.
  3. 版本更容易使用
  4. 您没有理由想要减少行键的数量 - HBase 专门设计用于存储大量的行键。
  5. 如果您需要删除上周二的数据怎么办?版本控制很困难,使用复合键只需一小段代码。

顺便说一句,请务必预先拆分您的区域服务器,以便 dev_sn 值均匀分布。