hbase与关系型数据库的区别

面试题:

关系型数据库也能实现这种功能,为什么要用hbase。

Hbase不光有水平切割,还有他的工作机制,他有基于内存的写缓存和读缓存。

写满之后就是溢写,就要清洗,将s=4的写进来,读缓存,没有溢写,是基于内存I/O

满足条件会归并为一个文件。

关系型数据库与hbase的区别:

Hbase对硬件有要求,内存是个好东西,到那时代价太高。

面向列式存储:

Hbase,Cassandra,bigtable

他们的理念都来自于Google的bigtable,因此这三者的数据模型非常类似,唯一不同的就是Cassandra具有Super cloumn family的概念,而Hbase目前我没发现。

在Hbase里面有以下两个主要的概念,Row key,Column Family,我们首先来看看Column family,Column family中文又名“列族”,Column family是在系统启动之前预先定义好的,每一个Column Family都可以根据“限定符”有多个column.下面我们来举个例子就会非常的清晰了。

假如系统中有一个User表,如果按照传统的RDBMS的话,User表中的列是固定的,比如schema 定义了name,age,sex等属性,User的属性是不能动态增加的。但是如果采用列存储系统,比如Hbase,那么我们可以定义User表,然后定义info 列族,User的数据可以分为:info:name = zhangsan,info:age=30,info:sex=male等,如果后来你又想增加另外的属性,这样很方便只需要info:newProperty就可以了。

Hbase不支持条件查询以及Order by等查询,因此Row key的设计就要根据你系统的查询需求来设计了额

设计Startrowkey,endrowkey

三 Hbase的优缺点 
1 列的可以动态增加,并且列为空就不存储数据,节省存储空间.
2 Hbase自动切分数据,使得数据存储自动具有水平scalability.
3 Hbase可以提供高并发读写操作的支持
Hbase的缺点:
1不能支持条件查询,只支持按照Row key来查询.

2 暂时不能支持Master server的故障切换,当Master宕机后,整个存储系统就会挂掉.

 四.补充

1.数据类型,HBase只有简单的字符类型,所有的类型都是交由用户自己处理,它只保存字符串。而关系数据库有丰富的类型和存储方式。
2.数据操作:HBase只有很简单的插入、查询、删除、清空等操作,表和表之间是分离的,没有复杂的表和表之间的关系,而传统数据库通常有各式各样的函数和连接操作。  
3.存储模式:HBase是基于列存储的,每个列族都由几个文件保存,不同的列族的文件时分离的。而传统的关系型数据库是基于表格结构和行模式保存的 
4.数据维护,HBase的更新操作不应该叫更新,它实际上是插入了新的数据,而传统数据库是替换修改
5.可伸缩性,Hbase这类分布式数据库就是为了这个目的而开发出来的,所以它能够轻松增加或减少硬件的数量,并且对错误的兼容性比较高。而传统数据库通常需要增加中间层才能实现类似的功能

我们会看到
1为rowkey,插入数据’www.aboutyun.com‘,
2为列族下面列的名字user_Name
3我们并没有在设计的添加这个列族,所以这个是系统自带的,这个是记录的操作时间,以时间戳的形式放到hbase里面。
4是我们插入的user_Name的值

插入数据的时候:1为rowkey;2为user_namre;3为系统自己分配的时间戳;4为我们插入的username的值。

再次查询结果:

  1. hbase(main):016:0> scan 'blog_user'
  2. ROW                             COLUMN+CELL                                                                             
  3. www.aboutyun.com               column=userInfo:user_Name, timestamp=1400663775901, value=aboutyun                      
  4. www.aboutyun.com               column=userInfo:user_Password, timestamp=1400665203430, value=aboutyun                  
  5. 1 row(s) in 0.0390 seconds

1.删除列
这里面的删除,没有删除

delete 'blog_user','www.aboutyun.com','userInfo:user_Password'
从上面我们看出列被删除了
2.删除记录:

  1. deleteall 'blog_user','www.aboutyun.com'

复制代码

总结
对于传统数据库,增加列对于一个项目来讲,改变是非常大的。但是对于nosql,插入列和删除列,跟传统数据库里面的增加记录和删除记录类似

猜你喜欢

转载自blog.csdn.net/wyqwilliam/article/details/81070447