Hive与传统数据库的区别
来源:互联网 发布:windows 共享内存 编辑:程序博客网 时间:2024/05/29 03:34
Hive在很多方面和传统数据库类似(例如支持SQL接口),但是其底层对HDFS金额MapReduce的依赖意味着它的体系结构有 别于传统数据库,而这些区别又影响着Hive所支持的特性,进而影响着Hive的使用。
读时模式VS写时模式
在传统数据库里,表的模式是在数据加载时强制确定的。如果在加载时发现数据不符合模式,则被拒绝加载数据。因为数据是在写入数据库是对照模式进行检查,因此这一设计有时被称为“写时模式”(schema on write)。
在另外一方面,Hive对数据的验证并在不加载数据时进行,而在查询时进行。这称为“读时模式”(schema on read)。
用户需要在这两种方法之间权衡。读时模式可以使得数据加载非常迅速。这是因为它不需要读取数据,进行“解析”,再进行序列化以数据库内部格式存入磁盘。数据加载仅仅是文件的复制和移动。这一方法也更为灵活:试想,针对不同的分析任务,同一个数据可能会有两个模式。Hive使用‘’外部表’时,这种情况是可能发生的。
写时模式有利于提升查询性能。因为数据库可以对列进行索引,并对数据进行压缩。但是作为权衡,此时加载数据会花更多时间。此外没在很多加载时模式未知的情况下,因为查询尚未确定,因此不能决定使用何种索引。这些情况真是Hive“长袖善舞”的地方!
更新、事务和索引
更新、事务和索引都是传统数据库最重要的特性,但是,直到最近,Hive也没有考虑支持这些特性,因为Hive被设计为用MapReduce操作HDFS数据。在这样的环境下,“全表扫描”是常态操作,而表更新则是通过把数据表换后放入新表实现的。对于大规模数据集上的运行的仓库应用,这一方式很见效。
Hive不支持更新(或删除),但是支持INSERT INTO ,所以可以向现有的表中增加新的行。
在0.7.0发布的版本中,Hive引入索引,以在某些情况下加快查询的速度。对于SELECT * FROM t WHERE x=a在这样的查询中,因为只需要扫描表文件的一部分,因此可以利用在列x上的索引。目前索引分成两类:紧凑索引和位图索引。(索引的实现被设计为可插拔的,所以为了其他的目的而设计的索引实现会陆续出现)。
紧凑索引存储每个值的HDFS块号,而不是存储文件内偏移量。因此存储不会占用太多的磁盘空间,且对于值被聚簇存储于相近行的情况,索引任然有效。位图索引使用压缩的的位集合来高效存储具有某个特殊值的行。这种索引一般适合于具有较少取值可能的列。
- Hive与传统数据库的区别
- Hive与传统的数据库
- Hive与传统数据库对比
- Hive与传统数据库比较
- Hive与传统数据库对比
- Hbase与传统数据库的区别
- Hbase与传统数据库的区别
- Hive与关系数据库的区别
- Hive是什么,Hive与关系型数据库的区别
- Hive简介、什么是Hive、为什么使用Hive、Hive的特点、Hive架构图、Hive基本组成、Hive与Hadoop的关系、Hive与传统数据库对比、Hive数据存储(来自学习资料)
- 图解Nosql(hbase)与传统数据库的区别
- Hbase总结(四)- Hbase与传统数据库的区别
- Hbase总结(四)- Hbase与传统数据库的区别
- Hbase总结(四)- Hbase与传统数据库的区别
- Nosql(hbase)与传统数据库的区别
- Hbase总结(四)- Hbase与传统数据库的区别
- Hbase总结(四)- Hbase与传统数据库的区别
- 图解Nosql(HBase)与传统数据库的区别
- Jenkins上,xcpretty编译报错:invalid byte sequence in US-ASCII (ArgumentError)
- 文件操作(1)
- vim常用使用命令
- CentOS7搭建rabbitmq集群
- ssh整合git的相关的图解步骤
- Hive与传统数据库的区别
- 5.16学习总结
- 欢迎使用CSDN-markdown编辑器
- java设计原则——高内聚低耦合
- 打印以下图案 (1)用字符数组方法; (2)用 string 方法。
- @property属性关键字详解
- I/O流(2)
- 发现一个很好用的 SVG 在线编辑器-Method Draw
- B-树和B+树的应用(数据搜索和数据库索引)