HBase的数据模型是什么样的?
hbase里其实也是建一个一个的表 表里有很多行的数据,但是其实这个表说白了就是一个逻辑模型,物理上根本没那么简单的,一个表的数据当然是拆为很多region分散在不同的机器上的,要是表里数据太多了,region数量还会变多,这样你加更多机器,region可以自动迁移到不同的机器上去 每一行都有一个rowkey,还有很多列,表里的数据行都是按照rowkey排序的,大致可以把rowkey理解为mysql里的主键id,在hbase里每一行数据都有一个rowkey行键来唯一的标识一行数据 所以一般设计rowkey是一门讲究活,后续我们在讲解如何设计rowkey的,因为一般要把同一类数据的rowkey设计的相似一些,比如说用户id=1的订单,就应该叫做order_1_xx之类的,这样一个用户的订单就会在排序之后靠近在一起例如订单的rowkey:order_userId_orderIdrowkey 列order_1_110 xxxorder_1_111 xxxorder_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:extentorder_1_110 xxx xxxorder_1_111 x1(t1); x2(t2) xxx xxx比如,rowkey=order_1_111 ,column family= order,column=base,timestamp=t1的数据为x1。
页:
[1]