hbase 设计连接长键值对与多列

hbase design concat long key-value pairs vs many columns

请帮助我了解在 HBase 中存储信息的最佳方式。 基本上,我有一个像 hashed_uid+date+session_id 这样的行键,带有持续时间、日期、时间、位置、深度等指标。 我读了很多我有点困惑的材料。人们建议使用更少的列族以获得更好的性能,因此我面临三个选择:

  1. 让每个指标排成一行,如 rowkey_key cf1->alias1:value

  2. 有很多像rowkey cf1->key1:val1, cf1->key2:val2 ...

  3. 这样的列
  4. 将所有键值对编码成一个大字符串,如rowkey cf1->"k1:v1,k2:v2,k3:v3..."

提前谢谢你。我不知道该选择哪个。我的 HBase 设计目标是为用户分析输出的增量窗口功能做准备,例如过去 60 天的百分位数、参与度和统计摘要。最有可能的是,我会为此使用配置单元。

您可能对列族和列命名的相似性感到困惑。这些概念在 HBase 中是不同的东西。列族由多个列组成。这种设计是为了在只需要读取某类列时提高访问数据的速度。例如,您有原始数据和处理过的数据。如果处理后的数据存储在分离的列族中,则读取处理后的数据将不会涉及原始数据。您可以部分地让每行键有任意数量的列;存储在一个区域,不超过10GB。设计取决于你什么:

  • 当您需要存储大量数据时,第一个变体没有其他选择 每个单行键的数据,不能存储在一个区域中。多于 10GB。
  • 当您每个
    只需要获取几个指标时,第二个很好 每行键单次读取。
  • 最后一个版本适合你
    始终获取每行键的单次读取的所有指标。