一、行式数据库和列式数据库的对比

1、存储比较

行式数据库存储在hdfs上式按行进行存储的,一个block存储一或多行数据。而列式数据库在hdfs上则是按照列进行存储,一个block可能有一列或多列数据。

2、压缩比较

对于行式数据库,必然按行压缩,当一行中有多个字段,各个字段对应的数据类型可能不一致,压缩性能压缩比就比较差。

对于列式数据库,必然按列压缩,每一列对应的是相同数据类型的数据,故列式数据库的压缩性能要强于行式数据库。

3、查询比较

假设执行的查询操作是:select id,name from table_emp;

对于行式数据库,它要遍历一整张表将每一行中的id,name字段拼接再展现出来,这样需要查询的数据量就比较大,效率低。

对于列式数据库,它只需找到对应的id,name字段的列展现出来即可,需要查询的数据量小,效率高。

假设执行的查询操作是:select *  from table_emp;

对于这种查询整个表全部信息的操作,由于列式数据库需要将分散的行进行重新组合,行式数据库效率就高于列式数据库。

但是,在大数据领域,进行全表查询的场景少之又少,进而我们使用较多的还是列式数据库及列式储存。

二、stored as file_format 详解

1、建一张表时,可以使用“stored as file_format”来指定该表数据的存储格式,hive中,表的默认存储格式为TextFile。

CREATE TABLE tt (
id int,
name string
) ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";

CREATE TABLE tt2 (
id int,
name string
) ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t" STORED AS TEXTFILE;

CREATE TABLE tt3 (
id int,
name string
) ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
STORED AS 
INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';

#以上三种方式存储的格式都是TEXTFILE。

2、TEXTFILE、SEQUENCEFILE、RCFILE、ORC等四种储存格式及它们对于hive在存储数据和查询数据时性能的优劣比较

file_format:

  | SEQUENCEFILE

  | TEXTFILE    -- (Default, depending on hive.default.fileformat configuration)

  | RCFILE      -- (Note: Available in Hive 0.6.0 and later)

  | ORC         -- (Note: Available in Hive 0.11.0 and later)

  | PARQUET     -- (Note: Available in Hive 0.13.0 and later)

  | AVRO        -- (Note: Available in Hive 0.14.0 and later)

  | INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname

TEXTFILE: 只是hive中表数据默认的存储格式,它将所有类型的数据都存储为String类型,不便于数据的解析,但它却比较通用。不具备随机读写的能力。支持压缩。

SEQUENCEFILE: 这种储存格式比TEXTFILE格式多了头部、标识、信息长度等信息,这些信息使得其具备随机读写的能力。支持压缩,但压缩的是value。(存储相同的数据,SEQUENCEFILE比TEXTFILE略大)

RCFILE(Record Columnar File): 现在水平上划分为很多个Row Group,每个Row Group默认大小4MB,Row Group内部再按列存储信息。由facebook开源,比标准行式存储节约10%的空间。

ORC: 优化过后的RCFile,现在水平上划分为多个Stripes,再在Stripe中按列存储。每个Stripe由一个Index Data、一个Row Data、一个Stripe Footer组成。每个Stripes的大小为250MB,每个Index Data记录的是整型数据最大值最小值、字符串数据前后缀信息,每个列的位置等等诸如此类的信息。这就使得查询十分得高效,默认每一万行数据建立一个Index Data。ORC存储大小为TEXTFILE的40%左右,使用压缩则可以进一步将这个数字降到10%~20%。

ORC这种文件格式可以作用于表或者表的分区,可以通过以下几种方式进行指定:

  • CREATE TABLE ... STORED AS ORC

  • ALTER TABLE ... [PARTITION partition_spec] SET FILEFORMAT ORC

  • SET hive.default.fileformat=Orc

  • The parameters are all placed in the TBLPROPERTIES (see Create Table). They are:

    Key

    Default

    Notes

    orc.compress

    ZLIB

    high level compression (one of NONE, ZLIB, SNAPPY)

    orc.compress.size

    262,144

    number of bytes in each compression chunk

    orc.stripe.size

    67,108,864

    number of bytes in each stripe

    orc.row.index.stride

    10,000

    number of rows between index entries (must be >= 1000)

    orc.create.index

    true

    whether to create row indexes

    orc.bloom.filter.columns "" comma separated list of column names for which bloom filter should be created
    orc.bloom.filter.fpp 0.05 false positive probability for bloom filter (must >0.0 and <1.0)

示例:创建带压缩的ORC存储表

create table Addresses (name string,street string,city string,state string,zip int
) stored as orc tblproperties ("orc.compress"="NONE");

PARQUET: 存储大小为TEXTFILE的60%~70%,压缩后在20%~30%之间。

行式数据和列式数据对比 存储压缩性能相关推荐

  1. 行式数据库与列式数据库的对比

    导语:随着大数据的发展,现在出现的列式存储和列式数据库.它与传统的行式数据库有很大区别的. 正文: 行式数据库是按照行存储的,行式数据库擅长随机读操作不适合用于大数据.像SQL server,Orac ...

  2. 行式数据库 VS 列式数据库

    行式数据库 VS 列式数据库 一   基本概念 1  行式数据库    http://zhusihu.blog.163.com/blog/static/178880235201102381753490 ...

  3. 行式数据库与列式数据库

    开发用了很久的Vertica,知道它是"列式数据库"但一直没有去研究过列式数据库的一些特性,现在来总结一下. 列式数据库是以列相关存储架构进行数据存储的数据库,主要适合于批量数据处 ...

  4. 行式数据库和列式数据库

    导语:随着大数据的发展,现在出现的列式存储和列式数据库.它与传统的行式数据库有很大区别的. 正文: 行式数据库是按照行存储的,行式数据库擅长随机读操作不适合用于大数据.像SQL server,Orac ...

  5. 大数据的列式存储格式:Parquet

    之前简单介绍了一下列式存储: 和谐号为啥快?因为铁轨是列式存储!  今天介绍一种大数据时代有名的列式存储文件格式:Parquet,被广泛用于 Spark.Hadoop 数据存储.Parquet 的中文 ...

  6. 行式数据库和列式数据库区别

    行式数据库: 1.数据是按行存储的 2.没有建立索引的查询将消耗很大的io 3.建立索引和视图需要花费一定的物理空间和时间资源 4.面对大量的查询,复杂的查询,数据库必须被大量膨胀才能满足性能需求 列 ...

  7. 三维数组中以行优先和以列优先处于相同存储位置的判别

    #include<iostream> using namespace std; //n*m*p的三维数组创建函数 void Biuld(int n, int m, int p) {int ...

  8. mysql 1265错误_mysql – 错误1265.尝试从txt文件加载数据时,列的数据被截断

    我在 mysql表中有表 表看起来像 create table Pickup ( PickupID int not null, ClientID int not null, PickupDate da ...

  9. 【云计算与大数据技术】分布式数据库NoSQL中KV、列式、图、文档数据库的讲解(图文解释 超详细)

    一.NoSQL数据库概述 NoSQL泛指非关系型数据库,相对于传统关系型数据库,NoSQL有着更复杂的分类,包括KV数据库,文档数据库,列式数据库以及图数据库等等,这些类型的数据库能够更好的适应复杂类 ...

最新文章

  1. php 反序列化漏洞简介
  2. linux 查看进程id对应的路径,Linux中怎么通过PID号找到对应的进程名及所在目录方法...
  3. java swt最小化到托盘_SWT 中实现最小化到托盘图标,并只能通过托盘的弹出菜单关闭程序...
  4. 如何设置ftp服务器上传文件夹至不同路径,设置ftp服务器上传文件夹
  5. 面对 MySQL 查询索引失效,程序员的六大优化技巧!
  6. 获取类型的完全限定名
  7. 盛夏光年 - 江湖一剑客
  8. 高仿微信表情控件 -- LQREmojiLibrary
  9. navicat win32注册机下载 | 绿色版
  10. 创蓝253短信平台代码实现
  11. 金山系不惧微软,前有WPS力扛Office,后有eversheet接力再战
  12. 数据服务门槛再提升,这个“TOP1玩家”凭何再度领军?
  13. I9 9900K线程_i9 10900K比9900K性能提升了多少?i9-10900K和i9-9900K对比评测
  14. 时尚集团副总裁西单解密《时尚江湖》
  15. 人工智能图片无损放大工具_借助这款最新AI图片无损放大工具,我把老板的头放大了4倍!【杰视帮】...
  16. 游戏建模师真的比公务员,事业编制单位还要“香”吗?
  17. java final修饰符_浅谈JAVA中的final修饰符
  18. PS学习笔记day2
  19. 你好啊!这是今天人工智能精选要闻〔12.15〕
  20. Linux神器——gdb

热门文章

  1. Imperva之SecureSphere打补丁
  2. python正负数取余说明
  3. 在Linux环境下怎么编译Android源码?
  4. 卡拉OK,想唱你就唱,想跳你就跳!
  5. 1065 单身狗(25 分)
  6. 出生证明电子版到哪里查看_注意注意,你家孩子的出生医学证明档案可电子查阅了...
  7. 物流人必备宝藏软件安利——Microcity
  8. 读取海康威视摄像头实时显示视频流
  9. nginx证书填写路径报错:SSL: error:0200107B:system library:fopen:Unknown error:fopen
  10. 小白学习Winform 遇到的问题总结