最近做到一份大数据平台相关的笔试题,问答题第一题就是简述HIVE与RDBMS关系数据库的区别,虽然自己这两种技术都摸过、使用过(HIVE只是了解过,主要使用的是阿里云的odps,rdbms的话主要是mysql),
但是突然问我这样一个问题,我还从来没认真总结过,自我感觉答得不算好,回来百度了网上的资料,在这里就简单总结下。
1、hive存储的数据量比较大,适合海量数据,适合存储轨迹类历史数据,适合用来做离线分析、数据挖掘运算,
事务性较差,实时性较差
rdbms一般数据量相对来说不会太大,适合事务性计算,实时性较好,更加接近上层业务
2、hive的计算引擎是hadoop的mapreduce,存储是hadoop的hdfs文件系统,
rdbms的引擎由数据库自己设计实现例如mysql的innoDB,存储用的是数据库服务器本地的文件系统
3、hive由于基于hadoop所以存储和计算的扩展能力都很好,
rdbms在这方面比较弱,比如orcale的分表和扩容就很头疼
4、hive表格没有主键、没有索引、不支持对具体某一行的操作,适合对批量数据的操作,不支持对数据的update操作,
更新的话一般是先删除表然后重新落数据
rdbms事务性强,有主键、索引,支持对具体某一行的增删改查等操作
5、hive的SQL为HQL,与标准的RDBMS的SQL存在有不少的区别,相对来说功能有限
rdbms的SQL为标准SQL,功能较为强大。
6、(原文https://www.cnblogs.com/sharpxiajun/archive/2013/06/02/3114180.html中摘录,感谢原作者)
Hive在加载数据时候和rdbms关系数据库不同,hive在加载数据时候不会对数据进行检查,也不会更改被加载的数据文件,
而检查数据格式的操作是在查询操作时候执行,这种模式叫“读时模式”。在实际应用中,写时模式在加载数据时候会对列进行
索引,对数据进行压缩,因此加载数据的速度很慢,但是当数据加载好了,我们去查询数据的时候,速度很快。但是当我们的
数据是非结构化,存储模式也是未知时候,关系数据操作这种场景就麻烦多了,这时候hive就会发挥它的优势。
rdbms里,表的加载模式是在数据加载时候强制确定的(表的加载模式是指数据库存储数据的文件格式),如果加载数据
时候发现加载的数据不符合模式,关系数据库则会拒绝加载数据,这个就叫“写时模式”,写时模式会在数据加载时候对数据模
式进行检查校验的操作。
------------------------------------------------------------------------------------------------------------------------------------
最后做下总结,HIVE是数据仓库适合存储历史的海量的数据,适合做批量和海量复杂运算,事务性差,运算时间长。
RDBMS是数据库,存储数据量偏小一些,事务性强,适合做OLTP和OLAP业务,运算时间短。