分享

HBase的数据模型是什么样的?

hbase里其实也是建一个一个的表
表里有很多行的数据,但是其实这个表说白了就是一个逻辑模型,物理上根本没那么简单的,一个表的数据当然是拆为很多region分散在不同的机器上的,要是表里数据太多了,region数量还会变多,这样你加更多机器,region可以自动迁移到不同的机器上去
每一行都有一个rowkey,还有很多列,表里的数据行都是按照rowkey排序的,大致可以把rowkey理解为mysql里的主键id,在hbase里每一行数据都有一个rowkey行键来唯一的标识一行数据
所以一般设计rowkey是一门讲究活,后续我们在讲解如何设计rowkey的,因为一般要把同一类数据的rowkey设计的相似一些,比如说用户id=1的订单,就应该叫做order_1_xx之类的,这样一个用户的订单就会在排序之后靠近在一起
例如订单的rowkey:order_userId_orderId
rowkey                 列
order_1_110         xxx
order_1_111         xxx
order_2_256         xxx

每一行数据都有一些列族,就是column family,每个列族都包含一些列,每个列族都有一系列的存储属性,比如说是否把列族里的列值缓存在内存里,列族里的数据如何进行压缩,类似这种
一个表里有固定的一些列族,每一行都有这些列族,当然有可能你一行数据在某个列族里没存什么东西,是有可能的;也有可能一行数据在某个列里面没存数据
然后就是列,每个列就是一个列族+分号+列限定符(column qualifier),比如说列族是order,列可能就是order:base,或者是order:detail
每个表的列族是固定的(建表时就指定了),但是每一行数据有哪些列是不固定的,插入数据的时候可以动态可以给这行数据设定多个列,每个列都是属于一个列族,就是一个列族+分号+列限定符的形式,就可以确定一个列
时间戳,timestamp,每一行的每个列的值写入的时候就会有一个时间戳,时间戳就代表了这一行这个列的某个版本的值,当然这个timestamp你也可以自己插入的时候指定一个timestamp也是ok的
Hbase默认查询展示的最新时间戳的数据
单元格,也就是cell,其实就是一行的某个列族下的某个列(由列限定符来确定)的某个timestamp版本对应的值,说白了就这么个东西,在hbase里,每一行的每个列的值,是有多个版本的,每个版本都是一个cell,其实就是rowkey+列族+列+时间戳
rowkey                 order:base            order:detail           order:extent
order_1_110         xxx                       xxx
order_1_111         x1(t1); x2(t2)         xxx                       xxx
比如,rowkey=order_1_111 ,column family= order,column=base,timestamp=t1的数据为x1。

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条