Hive基础之Hive与关系型数据库的比较

Hive与关系型数据库的比较
 
    使用Hive的CTL(命令行接口)时,你会感觉它很像是在操作关系型数据库,但是实际上,Hive和关系型数据库有很大的不同。
       1)Hive和关系型数据库存储文件的系统不同。
          Hive使用HDFS(hadoop的分布式文件系统),关系型数据库则是服务器本地的文件系统;


       2)Hive使用的计算模型是MapReduce,而关系型数据库则是自己设计的计算模型。


       3)Hive是为海量数据做数据挖掘设计的,实时性差;而关系型数据库是为实时查询的业务进行设计的。


       4)Hive很容易扩展自己的存储能力和计算能力,这个是继承hadoop的,而关系型数据库在这方面相对较差。(世界上最大的 Hadoop 集群在 Yahoo!, 2009 年的规模在4000 台节点左右)。而数据库由于 ACID 语义的严格限制,扩展行非常有限。目前最先进的并行数据库 Oracle 在理论上的扩展能力也只有 100 台左右。


       5)Hive中不支持对某个具体行的操作,对数据的操作只支持覆盖原数据和追加数据;Hive也不支持事务和索引。


       6)Hive在加载数据时候和关系数据库不同。
          Hive在加载数据时候不会对数据进行检查,也不会更改被加载的数据文件,而检查数据格式的操作是在查询操作时候执行,这种模式叫“读时模式”。在实际应用中,写时模式在加载数据时候会对列进行索引,对数据进行压缩,因此加载数据的速度很慢,但是当数据加载好了,我们去查询数据的时候,速度很快。
          关系数据库里,表的加载模式是在数据加载时候强制确定的(表的加载模式是指数据库存储数据的文件格式),如果加载数据时候发现加载的数据不符合模式,关系数据库则会拒绝加载数据,这个就叫“写时模式”,写时模式会在数据加载时候对数据模式进行检查校验的操作。
          当我们的数据是非结构化,存储模式也是未知时候,关系数据操作这种场景就麻烦多了,这时候hive就会发挥它的优势。


       7)执行延迟。
          Hive 在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。另外一个导致 Hive 执行延迟高的因素是 MapReduce 框架。由于MapReduce 本身具有较高的延迟,因此在利用 MapReduce 执行 Hive 查询时,也会有较高的延迟。相对的,数据库的执行延迟较低。当然,这个低是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive 的并行计算显然能体现出优势。

posted on 2014-04-11 18:13  知行旅人  阅读(2412)  评论(0编辑  收藏  举报