BigTable 最基本的思想是把所有的数据都存入一张表。
-
大表的思想有什么问题?
引起数据的冗余。
-
大表的思想有什么优点?
通过牺牲空间,换取了时间,提高了性能。
HBase 就是 BigTable 这种思想的一种实现。
对比 MySql 和 HBase 数据库
MySql
如果要存储学生信息和学生成绩信息,则至少要创建两张表:student 表,grade 表(实际上是会有三张表的,第三张表用来存储学生和成绩的对应关系,因为它们之间是多对多的关系,这里省略)。
HBase
HBase 如果要存储学生和他对应的成绩信息,只需要一张 student 表。
-
rowkey 表示行键,类似 MySql 中的主键,行键不能为空,不同于 MySql 的是,行键可以重复,相同的行键表示同一条记录。
-
第一条语句表示创建了一个 student 表,创建了两个列族 info,grade。(HBase 在创建表的时候不直接指明列,而是创建列族 column family,在列族中包含列)
ps:在创建 HBase 的表的时候,只需要指明列族即可,不要指明具体的列,在插入数据的时候列会动态创建。
-
第三条语句表示向 student 表中添加了一条记录,该记录的行键为 s001,会在 info 列族上动态生成一个 name 列,该列的值为 Tom。
其余的几条 put 语句同理,如果已经存在了该列则不会再创建列,直接插入值。
-
查询这张 student 表中的所有记录的语句为:
scan 'student'
,会返回两条记录。
MySql 和 HBase 数据库的区别
-
MySql 是面向行的数据库,新增,修改,删除操作效率高。
-
HBase 是面向列的数据库,查询的效率高。
-
MySql 满足数据库的三大范式,数据冗余度低。
-
HBase 不遵循数据库的三大范式,数据冗余度高。
总结:BigTable 的思想,利于海量数据的检索,在大数据时代可以显著提高数据的查询效率,但是对数据的新增,修改,删除是不利的。