精华内容
下载资源
问答
  • 存储列存储优缺点
    万次阅读
    2019-05-16 11:46:29
    行存储列存储
    优点写入效率高,保证数据完整性读取效率高,没有冗余
    缺点数据有冗余现象,计算速度慢写入次数多,速度慢,消耗cpu
    使用场景关注整张表内容,或者需要经常更新数据、需要经常读取整行数据、不需要聚集运算,或者快速查询需求、数据表本身数据行并不多经常关注一张表某几列而非整表数据的时候、基于一列或比较少的列计算的时候、数据表拥有非常多的列的时候、数据表有非常多行数据并且需要聚集运算的时候、数据表列里有非常多的重复数据,有利于高度压缩

    行存储的写入是一次性完成,消耗的时间比列存储少, 并且能够保证数据的完整性,缺点是数据读取过程中会产生冗余数据,
    如果只有少量数据,此影响可以忽略;数量大可能会影响到数据的处理效率。
    列存储在写入效率、保证数据完整性上都不如行存储,它的优势是在读取过程不会产生冗余数据,这对数据完整性要求不高的大数据处理领域,比如互联网,犹为重要。

    更多相关内容
  • 参考文章:行式存储和列式存储优缺点和paruqet文件结构 一、列式存储和行式存储的比较 列式存储和行式存储是针对数据在存储介质中的排序形式而言的,假设存在一张table,那么: 行式存储:依次连续存储第1、2、3...

    参考文章:行式存储和列式存储优缺点和paruqet文件结构

    优缺点分析

    列存储优点:

    • 单列数据保存在一起,不同列分开存储,导致存下同样一个表需要更多的Block文件,看起来是更复杂了,但是基于列和列分开存储,这种形式天生就适合分布式的存储,并能完全利用并发写入和并发读取的能力
    • 同一列存放在一起,数据类型相同,则更好的进行压缩
    • 同一列存放在一起,则排序更加方便,基于排序方便,where某一列会更加快

    行存储优点:

    • 更容易实现事务性、一致性控制。

    应用场景:

    • 关系型数据库基本都是行存储,Mysql、Oracle等,因其更强调一致性和事务性
    • NoSQL多数为列存储,因为高效、吞吐量高,但事务、一致性较弱(也有做到事务性比较强的,但实现更加复杂,需要更多东西来配合)

    总结:

    • 行: 一致性、事务更加容易实现
    • 列:吞吐量高、性能强,一致性、事务性较弱

    一、列式存储和行式存储的比较

    列式存储和行式存储是针对数据在存储介质中的排序形式而言的,假设存在一张table,那么:

    • 行式存储:依次连续存储第1、2、3...行的数据到存储介质中;
    • 列式存储:依次连续存储第1、2、3...列的数据到存储介质中。

    图1-1所示为行式存储和列式存储的示意图,一张table包含5个字段(列)即rowid、date/time、customer name以及quantity,共7行,图中的红色箭头表示存储顺序。

    标图1-1. 行式存储和列式存储区别题

     

    二、行式存储和列式存储的优缺点和适用场景

    存储形式的差异决定了适用场景的不同:

    • 行式存储适合”针对行”的查询
      比如(mysql)select * from table_name limit 1,因为只会读取图1-1中的“row-based store 第1个绿色部分的数据”(只有指定的行“1 845 2 3 1”才会被读取),而select rowid from table_name则需要读取row-based store所有绿色部分的数据(虽然目的仅是要查询1个字段);此外还适用于insert/update操作比较多的场景,因为只需要更改部分数据块即可。
    • 列式存储适合“针对列”的查询
      比如select rowid from table_name,因为只会读取图1-1中的“column-based store 第1个绿色部分的数据”(查询时只有涉及到的字段会被读取),而select * from table_name limit 1则需要读取column-based stores所有绿色部分的数据(虽然目的就是要查询第1行的数据);但是不适用于insert/update操作比较多的场景,比如当插入1个row时,由于列式存储导致同一个row的数据被分散在多个数据块中,因此需要去遍历所有数据块的数据此外由于同一个字段连续存储(同一列的内容有很多值是重复的,可以压缩),因此更加便于编码压缩。
    存储类别适用于不适用于
    row-based针对行的查询,
    insert/update操作
    针对列的查询
    column-based针对列的查询,
    编码压缩减小存储空间占用
    针对行的查询,
    insert/update操作

    综合来看,列式存储比较适合大数据量(压缩比高)、分析型操作(针对少数几列);不适合频率较高的删除(全列检索)、更新(重新压缩)操作。

    列式存储基于字典表的编码压缩

    图2-1所示为列式存储中将某张table基于字典表进行编码压缩的示例,图中左边为源表,假设该table中的customers和material字段的取值均只有右上表所示的5种,那么当源表的行数很大时,customers和material字段就会存在大量重复的取值,为了节省存储空间对这两个字段进行编码,即使用一个字典表(右上图)记录该两个字段的distinct取值,又下表则用右上表字段取值对应的index(整数1、2、3、4、5)来代替原来的string,由于string占用的存储空间比这几个index占用的存储空间大多了,因此可以较大程度上压缩占用的存储空间。

    图2-1. 列式存储基于字典表压缩数据标题

    三、parquet文件结构

    基于列式存储的两个典型实现是:hbase和parquet,其中:

    • hbase可以看成是一个基于列式存储的非关系型数据库NoSQL;
    • parquet是基于列式存储定义的一种文件格式。

    parquet的文件结构如图3-1所示:

     

    图3-1. parquet文件结构一览图标题

     

    从图中可以看出,1个parquet文件由header(1个)、block(可以多个)、footer(1个)组成,分别负责:

    • header:只包含一个4个byte的数字PAR1,用来识别整个Parquet文件格式。文件中所有的metadata都存在于footer中;
    • block:存储数据;
    • footer:包含block中的metadata比如版本信息、schema信息等,footer中最后2个字段分别是1个4个byte长度的footer的metadata、同header中一样的PAR1。

    图3-2所示为parquet文件中,block、rowgroup、columnchunk以及page的关系:

    标图3-2. parquet中rowgroup、block、columnchunk以及page的关系题

     

    简而言之:

    • 1个block就是指1个rowgroup;
    • 1个columnchunk对应1个字段;
      1个columnchunk中可能存在多个page(page默认大小为1M)。

    因此如果将一个parquet文件类比成一张大excel 表,那么:

    • header就相当于excel表的后缀名;
    • block就相当于excel表中的某些数据行(如果行数太多导致需要的byte数超过了block size那就需要多个block);
    • footer就相当于excel表的页脚记录了字段数、行数、各block占用的存储空间等元数据)。
    展开全文
  • 行列存储的区别和优缺点

    千次阅读 2021-05-27 16:26:42
    存储列存储 由上图可以看到,在列存储中,某一个字段的所有值都是连在一起的。在行存储中,每一行的所有字段的值是...列存储缺点: 缺乏数据完整性保证,读取数据没有冗余 针对某几个字段的读取效率较高 ...

    行存储和列存储

    在这里插入图片描述
    由上图可以看到,在列存储中,某一个字段的所有值都是连在一起的。在行存储中,每一行的所有字段的值是连在一起的。

    因此行列存储的优势就很容易区分出来了:

    行存储的优点:

    • 行记录的更新和插入比较方便,写入效率高

    行存储的缺点:

    • 数据读取有冗余,如果只查某几个字段,需要进行大量的数据筛除

    列存储的优点:

    • 读取数据没有冗余,适合定长度的大数据计算

    列存储的缺点:

    • 缺乏数据完整性保证,读取数据没有冗余
    • 针对某几个字段的读取效率较高
    展开全文
  • 行式存储和列式存储的比较

    千次阅读 2018-03-04 21:15:37
    行式存储的优点: 同一行数据存放在同一个block块里面,select * from table_name;数据能直接获取出来;  INSERT/UPDATE比较方便 行式存储的缺点: ...不同类型数据存放在同一个block块里面,压缩...列式存储

    行式存储的优点:

    同一行数据存放在同一个block块里面,select * from table_name;数据能直接获取出来;

     INSERT/UPDATE比较方便

    行式存储的缺点:

    不同类型数据存放在同一个block块里面,压缩性能不好;

    select id,name from table_name;这种类型的列查询,所有数据都要读取,而不能跳过。


    列式存储的优点:

    同类型数据存放在同一个block块里面,压缩性能好;

    任何列都能作为索引。

    列式存储的缺点:

    select * from table_name;这类全表查询,需要数据重组;

    INSERT/UPDATE比较麻烦。


    create table page_views_orc_zlib
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
    STORED AS ORC 
    TBLPROPERTIES("orc.compress"="ZLIB")
    as select * from page_views;
    #默认是zlib,写不写都一样

    create table page_views_orc_snappy
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
    STORED AS ORC 
    TBLPROPERTIES("orc.compress"="SNAPPY")
    as select * from page_views;



    create table page_views_parquet
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
    STORED AS PARQUET 
    as select * from page_views;


    set parquet.compression=gzip;
    create table page_views_parquet_gzip
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
    STORED AS PARQUET 
    as select * from page_views;


    【来自@若泽大数据】

    展开全文
  • 存储列存储优缺点

    千次阅读 2019-10-11 17:17:31
    按行存储:数据按行存储在底层文件系统中,通常,每一行会被分配固定...按列存储 :数据以列为单位,存储在底层文件系统中 优点:有利于面向单列数据的读取/统计等操作 缺点:整行读取时,可能需要多次I/O操作 ...
  • 文章目录存储方式对比优缺点对比简单对比行式存储行式存储的优点行式存储的缺点列式存储列式存储的优点列式存储的缺点适用场景对比参考 存储方式对比 行式存储就是每一行的所有数据存在一个block中,各个block之间...
  • 早的商业列式数据库是在1995年发布的Sybase IQ,但是一直到1999年左右才慢慢稳定到能够投入生产环境。现在的大多数分析型数据库都是在2003-2005年从Postgresql 分支出来的。其中尤其是Vertica 为代表的列数据库已经...
  • ORC、Parquet等列式存储的优点前言Parquet:ORC: 前言 ORC和Parquet都是高性能的存储方式,这两种存储格式总会带来存储和性能上的提升。 Parquet: 1)Parquet支持嵌套的数据模型,类似于Protocol Buffers,每...
  • 行式存储: 优点:数据被保存在一起了,insert和update更加容易 缺点:选择(selection)时即时只涉及某几列,所有数据也都会被读取 列式存储: 优点:查询时只有涉及到的列会被读取;...列式存储和行式存
  • 行式存储可以看成是一个行的集合,其中每一行都要求对齐,哪怕某个字段为空(下图中的左半部分),而列式存储则可以看成一个列的集合(下图中的右半部分)。列式存储的优点很明显,主要有以下 4 点: 查询时可以只...
  • 列式存储与行式存储

    2019-12-10 00:08:38
    列式存储与行式存储区别   目前大数据存储有两种方案可供选择:行存储(Row-Based)和列存储(Column-Based)。大数据时代大部分的查询模式决定了列式存储优于行式存储。两者的区别在于如何组织表: Ø Row-based ...
  • 最近看到一篇很好资料,里面三言两语配上几个图就把列式存储(Column-based Storage)讲明白了,牛啊!最喜欢的就是这种浅显易懂就把背景知识讲得明明白白,而不是长篇大论的讲概念。1 为什么要按列存储列式存储...
  • 列式存储和行式存储的区别

    万次阅读 多人点赞 2016-06-28 20:50:28
    列式存储(Columnar or column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是如何组织表(翻译不好,直接抄原文了): Ø Row-based storage stores atable in a ...
  • 几张图看懂列式存储

    2020-12-21 22:47:09
    1 为什么要按列存储列式存储(Columnar or column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是如何组织表(翻译不好,直接抄原文了):Ø Row-based storage stores a...
  • 版权声明:本文为博主原创文章,遵循 ...版权协议,转载请附上原文出处链接和本声明。...列式存储的话,比如你比较关注的都是某几列的内容,或者有频繁聚集需要的,通过聚集之后进行数据分析的表。
  • 6.列式存储缺点 6.1筛选条件限制 如果查询中有筛选条件,这样列式存储未必就能发挥相应的优势,而且相对资源消耗可能会比行式存储更高。 6.2不支持 GBK 字符集 而且在 DB2 中,列式存储只支持数据库 UTF-8 并且国家...
  • 列式存储 ORC VS Parquet关于列式数据库的一些说明列式存储格式的适用场景行列存储的优缺点ORC VS Parquet二者的文件结构图选择哪一种列式存储较好欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于...
  • 1 ,Q2 数据提取 : 看看前 20 条,数据对不对 shell : spark-submit --master yarn --deploy-mode client --num-executors 5 --executor-cores 4 --executor-memory 6144m --class ...
  • 列式存储和行式存储有什么区别?

    万次阅读 多人点赞 2021-04-15 21:00:52
    写在前面 本文隶属于专栏《100个问题搞定大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区...列式存储: 1. 数据是按列存储的,每一列单独存放 2. 只访问查询涉及的列大量降低系统IO 3.
  • 前言 Hive支持的存储数的格式主要有:TEXTFILE 、SEQUENCEFILE、ORC、PARQUET。 行与列存储的特点 ...每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。 Hive文件存储格式以及
  • 几张图搞懂列式存储

    2019-01-18 22:35:00
    列式存储(Columnar or column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是如何组织表。 Row-based storage stores a table in a sequence of rows. Column-ba...
  • 作者介绍傅宇,阿里巴巴分布式数据库(DRDS)团队高级开发工程师,专注大数据与分布式系统。个人博客 https://ericfu.me/列式存储(Column-oriented Stor...
  • 行式存储和列式存储

    千次阅读 2019-06-21 14:50:31
    存储列存储 概述 目前大数据存储有两种方案可供选择:行存储(Row-Based)和列存储(Column-Based)。业界对两种存储方案有很多争持,集中焦点是:谁能够更有效地处理海量数据,且兼顾安全、可靠、完整性。从...
  • Clickhouse的前世今生和优缺点

    千次阅读 2020-03-08 21:42:52
    数据的磁盘存储 许多的列式数据库(如 SAP HANA, Google PowerDrill)只能在内存中工作,这种方式会造成比实际更多的设备预算。ClickHouse被设计用于工作在传统磁盘上的系统,它提供每GB更低的存储成本,但如果有可以...
  • 为什么这么设计(Why’s THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实...
  • 列式存储(Columnar or column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是如何组织表(翻译不好,直接抄原文了): Ø Row-based storage stores atable in a ...
  • 列式存储和行式存储

    2019-01-15 10:59:37
    终于明白了什么是列式存储,什么是行式存储。这跟数据在存储介质中的存储结构有关, 列式存储是指,一列中的数据在存储介质中是连续存储的;行式存储是指一行中的数据在存储介质 中是连续存储的。简单的说,你可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,325
精华内容 10,930
关键字:

列式存储的优缺点