当我们说hbase是宽表时,本质上是在说
odps里的宽表,单纯说的是字段数多, hbase里的宽表有哪些外延ne?
阿里云的hbase (表格存储):
宽表模型的构成以及与关系模型的区别_表格存储-阿里云帮助中心
1. schema_free的概念.
和mysql, hive 都不一样, 可以动态的插入列名和value.
这样可用于中台/平台的存储.
但是这样子以后, 想进行汇聚的时候又比较麻烦了, group by 哪列, 你是不知道的.
rowKey | 总量 |
rowKey1 | 1 |
表1
表1 在mysql和hbase中都可以存在, 只不过一个是schema提前设计好,每个字段,类型是什么,提前设计好. 一个是动态插入的,存的是byte
2. 新增列类型 - 维度列
不变
3. 新增列类型 - 指标列
另外一方面, 限于rowKey的约束, 如果想对这个rowKey新增一个指标去记录, 就必须指明指标类型,例如 近3天上线时间. 关系型的思维方式是 增加一个指标type列, 然后设置枚举值, 相当于新建一个表
rowKey | 统计类型 | 值 |
rowKey1 | 总量 | 1 |
rowKey1 | 近3天上线时间 | 2分钟 |
表2
近3天上线时间. 但是宽表思维不是, 直接新增一列,列名就是枚举值"近3天上线时间"
rowKey | 总量 | 近3天上线时间 |
rowKey1 | 1 | 2分钟 |
表3
表2 的问题在于, 两行有同一个rowKey , 这个在hbase里是不允许的 .
hbase 无法默认生成一个id ( 这点和 es有本质的区别 ). 所以存储在hbase里的数据 同一个row 不能有 type的概念, 一旦有了type,就需要拼接到rowKey中去. 表3自然而然就产生了. 这种类型的表在mysql和hbase都能存在.
3. 分化 - 列数不定长, 不可收敛
作为中台, 统计类型是不可控的, 需要有扩展能力, hbase应用而生.
作为低代码平台, 字段的扩展也是不可控的, 需要动态扩展, 还需要有索引能力, es就应用而生,动态字段和索引
理论上mysql也可以,动态的查询schema,然后通过api实时的分析,动态新增字段. 应用层完成这些功能.
4. 统计
进行汇聚统计的时候, 也比较麻烦, 需要导入到odps中, 进行 列转行