您的位置:首页 > 其它

三、 数据模型概念

2015-08-27 11:03 337 查看
1 逻辑模型

HBase 中最基本的单位是列,一列或者多列构成了行,行有行键(Rowkey),并且是唯一的。
HBase 中的一个表有若干行,每行有很多列,列中的值有多个版本,每个版本的值称为一个单元格,每个单元存储的是不同时刻该列的值。

HBase 可以理解为 Map 这种结构的无限嵌套版本。

2 物理模型

虽然在逻辑模型中,表可以被看成一个稀疏的行的集合。但在物理上,表示按列族分开存储的。

HBase 的列是按列族分组的,HFile是面向列的,存放行的不同列的物理文件,一个列族的数据存放在多个 HFile 中,最重要的是一个列族的数据会被同一个Regioin管理,物理上存放在一起。

Region 是管理 HFile 的一种机制。

HBase 的表被设计成可以不禁用表而随时加入新的列,因此可以将新列直接加入一个列族而无需声明。

3 数据模型的重要概念


在Hbase中数据以表的形式存储。表名作为HDFS存储路径的一部分来使用,因此必须要符合文件名规范,所以构成表名的字符是有限制的。可以直接查看底层存储系统,在HDFS中可以看到每个表的表名都作为独立的目录结构,在某些情况下,用户可能需要查看这部分信息。

因为一个列族将会单独产生一个HFile, 所以多列族其实是不可取的。 因为每次存/删数据时候 需要刷新两个HFile 远不如将列族定义在不同的表中。 尽可能靠相关联的列来扩大HBase表中的列。展现其性能。因此HBase中的表远远少于RDBMS的表。

HBase创建表只需要指定 表名 和 至少一个列族。列族影响标的物理存储结构, 创建表后列族还可以更改,但是比较麻烦。
HBase的表没有列定义,没有类型,这就是 HBase 被称为无模式数据库的原因。
访问 HBase 不需要用户名和密码,没有 Schema。将hbase-site.xml 配置文件复制一份到自己的工程中,HBaseAPI会读取配置文件完成对 HBase 的连接。 创建连接是一项非常消耗资源的工作,HBase为我们提供一个连接池,可以更好的管理资源重用。

行键
行键,即 Rowkey。 行键是按字典排序由低到高存储在表中的,以一个空的数组来标识表空间的起始或结尾。
行键排序规则如下图, 数据按照二进制字节从左至右逐一对比形成最终的次序。



在 HBase 中行键是唯一的索引,不过在新版本的 HBase 中考虑了对辅助索引的支持。
为了高效检索数据,应该仔细设计 Rowkey 以获得最高的查询性能: 首先 Rowkey 被冗余存储,所以长度不宜过长,过长的 Rowkey 将会占用大量的空间同事会降低检索效率;其次 Rowkey 应该是分布均匀,这样不会产生热点现象; 最后是 Rowkey 唯一原则,必须在设计上保证其唯一性。

列族
HBase 中的列族是一些列的集合。一个列族成员都有相同的 前缀 : 限定符 组成。 前缀(列族名必须由可打印的字符, 限定符则可以乱搞。可以由任意字节数组组成。)
修改列族时候需要先停用表。应该讲经常一起查询的列放在一个列族中,合理划分列族将减少查询时加载到缓存的数据。

单元格
HBase 中的单元格由行键、列族、列、时间戳唯一确定。单元格的内容是不可分割的字节数组。每个单元格都保存着一份数据的多个版本,不同时间版本的数据按照时间倒序排序,最新时间的数据排在最前面,时间戳是 64 位的整数, 可以由客户端在写入数据时赋值, 也可以由 RegionServer 自动赋值。

rocky_24

来自为知笔记(Wiz)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: