1. 数据库分类
- 关系型数据库 Mysql、Oracle
- 非关系型数据库 Redis、Mangdb、Hbase
- 面向主题的是数据仓库,面向事务的是数据库
2. Hbase基本概念
- Hbase是bigtable的开源java版本,是建立在hdfs之上。
- 提供高可靠性、高性能性、列存储、可伸缩、实时读写nosql的数据库系统
- 介于关系型数据库和非关系型数据库之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive来实现多表join等复杂操作)。
- 主要用来存储结构化和半结构化的松散数据。
- Hbase查询数据功能很简单,不支持join等复杂操作,不支持复杂的事务(行级的事务)
- Hbase中支持的数据类型:byte[]
- 与hadoop一样,hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,用来增加计算和存储能力。
- Hbase中的表特点:
- 大:一个表可以有上十亿行,上百万列。
- 面向列:面向列(族)的存储和权限控制,列(族)独立检索。
- 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
- 和行式数据库的区别
- 行式数据库在分析的时候,将id,name,age,sex,score;完整的信息读入内存,造成大量的内存和IO浪费。
- 列式数据库的思维是把行式数据库全部拆开,按照列的方式重新组合存储,一列所有的行的数据存放在一起。带来的好处就是,要分析男女就直接访问所有的男女信息,要分析销售额,就直接访问消费额相关的数据。
3. 行式存储和列式存储对比(通俗易懂讲解)
3.1 行列对比
- 行式存储倾向于结构固定,列式存储倾向于结构弱化。 (行式存储相当于套餐,即使一个人来了也给你上八菜一汤,造成浪费;列式存储相等于自助餐,按需自取,人少了也不浪费)
- 行式存储一行数据只需一份主键,列式存储一行数据需要多份主键。
- 行式存储存的都是业务数据,列式存储除了业务数据外,还要存储列名。
- 行式存储更像一个Java Bean,所有字段都提前定义好,且不能改变;列式存储更像一个Map,不提前定义,随意往里添加key/value。
3.2 Hbase中专业术语
- 单元格:
一个行键、列族、列修饰符、数据和时间戳组合起来叫做一个单元格(Cell)。 以下为一个单元格
- 行数据:
一个行键、一到多列(包括数据)组合起来叫做一行(Row)。下图中所有1001的数据合起来相当于Hbase中的一行,1002的相当于另一行
4. Hbase表结构
- 表(table):用于存储管理数据,具有稀疏的、面向列的特点。Hbase中得到每一张表,就是所谓的大表(Bigtable),可以有上亿行,上百万列。
- 行键(RowKey):类似于MySQL中的主键,Hbase根据行键来快速检索数据,一个行键对应一条记录。与MySQL主键不同的是,Hbase的行键是天然固有的,每一行数据存在行键。
- 列族(ColumnFamily):是列的集合,列族在表定义时需要指定,而列在插入数据时动态指定。列中的数据都是以二进制形式存在,没有数据类型。在物理存储结构上,每个表中的每个列族单独以一个文件存储。一个表可以有多个列簇。
列族是hbase创建表必备的,一张表必须有的是主键和列族
如果喜欢本文章,请用小手点个赞~