精华内容
下载资源
问答
  • 行存储列存储优缺点

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

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

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

    千次阅读 2019-10-11 17:17:31
    行存储:数据按行存储在底层文件系统中,通常,每一会被分配固定的空间 优点:有利于增加、修改整行记录等操作,有利于整行数据的读取操作 缺点:单列查询时,会读取一些不必要的数据 按列存储 :数据以列为...
    • 按行存储:数据按行存储在底层文件系统中,通常,每一行会被分配固定的空间

      • 优点:有利于增加、修改整行记录等操作,有利于整行数据的读取操作
      • 缺点:单列查询时,会读取一些不必要的数据
    • 按列存储 :数据以列为单位,存储在底层文件系统中

      • 优点:有利于面向单列数据的读取/统计等操作
      • 缺点:整行读取时,可能需要多次I/O操作
    展开全文
  • 参考文章:存储存储优缺点和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占用的存储空间等元数据)。
    展开全文
  • 数据库:行存储列存储 利弊分析

    千次阅读 2017-06-27 19:27:55
    可以看一下文章中的概念,后面的结论部分可能存在一些问题,这里只是转载,如果有问题还请读者到原文回复~敬请谅解目前大数据存储有两种方案可供选择:行存储列存储。业界对两种存储方案有很多争持,集中焦点是:谁...

    文章来源:(http://www.infoq.com/cn/articles/bigdata-store-choose)

    PS:可以看一下文章中的概念,后面的结论部分可能存在一些问题,这里只是转载,如果有问题还请读者到原文回复~敬请谅解

    目前大数据存储有两种方案可供选择:行存储和列存储。业界对两种存储方案有很多争持,集中焦点是:谁能够更有效地处理海量数据,且兼顾安全、可靠、完整性。从目前发展情况看,关系数据库已经不适应这种巨大的存储量和计算要求,基本是淘汰出局。在已知的几种大数据处理软件中,HadoopHbase采用列存储,MongoDB是文档型的行存储,Lexst是二进制型的行存储。在这里,我不讨论这些软件的技术和优缺点,只围绕机械磁盘的物理特质,分析行存储和列存储的存储特点,以及由此产生的一些问题和解决办法。

    一.结构布局

    行存储数据排列


    列存储数据排列


    表格的灰色背景部分表示行列结构,白色背景部分表示数据的物理分布,两种存储的数据都是从上至下,从左向右的排列。行是列的组合,行存储以一行记录为单位,列存储以列数据集合单位,或称列族(column family)。行存储的读写过程是一致的,都是从第一列开始,到最后一列结束。列存储的读取是列数据集中的一段或者全部数据,写入时,一行记录被拆分为多列,每一列数据追加到对应列的末尾处。

    二. 对比

    从上面表格可以看出,行存储的写入是一次完成。如果这种写入建立在操作系统的文件系统上,可以保证写入过程的成功或者失败,数据的完整性因此可以确定。列存储由于需要把一行记录拆分成单列保存,写入次数明显比行存储多,再加上磁头需要在盘片上移动和定位花费的时间,实际时间消耗会更大。所以,行存储在写入上占有很大的优势。

    还有数据修改,这实际也是一次写入过程。不同的是,数据修改是对磁盘上的记录做删除标记。行存储是在指定位置写入一次,列存储是将磁盘定位到多个列上分别写入,这个过程仍是行存储的列数倍。所以,数据修改也是以行存储占优。 数据读取时,行存储通常将一行数据完全读出,如果只需要其中几列数据的情况,就会存在冗余列,出于缩短处理时间的考量,消除冗余列的过程通常是在内存中进行的。列存储每次读取的数据是集合的一段或者全部,如果读取多列时,就需要移动磁头,再次定位到下一列的位置继续读取。 再谈两种存储的数据分布。由于列存储的每一列数据类型是同质的,不存在二义性问题。比如说某列数据类型为整型(int),那么它的数据集合一定是整型数据。这种情况使数据解析变得十分容易。相比之下,行存储则要复杂得多,因为在一行记录中保存了多种类型的数据,数据解析需要在多种数据类型之间频繁转换,这个操作很消耗CPU,增加了解析的时间。所以,列存储的解析过程更有利于分析大数据。

    三. 优化

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

    改进集中在两方面:行存储读取过程中避免产生冗余数据,列存储提高读写效率。

    如何改进它们的缺点,并保证优点呢?

    行存储的改进:减少冗余数据首先是用户在定义数据时避免冗余列的产生;其次是优化数据存储记录结构,保证从磁盘读出的数据进入内存后,能够被快速分解,消除冗余列。要知道,目前市场上即使最低端CPU和内存的速度也比机械磁盘快上100-1000倍。如果用上高端的硬件配置,这个处理过程还要更快。

    列存储的两点改进:1.在计算机上安装多块硬盘,以多线程并行的方式读写它们。多块硬盘并行工作可以减少磁盘读写竞用,这种方式对提高处理效率优势十分明显。缺点是需要更多的硬盘,这会增加投入成本,在大规模数据处理应用中是不小的数目,运营商需要认真考虑这个问题。2.对写过程中的数据完整性问题,可考虑在写入过程中加入类似关系数据库的“回滚”机制,当某一列发生写入失败时,此前写入的数据全部失效,同时加入散列码校验,进一步保证数据完整性。

    这两种存储方案还有一个共同改进的地方:频繁的小量的数据写入对磁盘影响很大,更好的解决办法是将数据在内存中暂时保存并整理,达到一定数量后,一次性写入磁盘,这样消耗时间更少一些。目前机械磁盘的写入速度在20M-50M/秒之间,能够以批量的方式写入磁盘,效果也是不错的。

    四. 总结

    两种存储格式各自的特性都决定了它们不可能是完美的解决方案。 如果首要考虑是数据的完整性和可靠性,那么行存储是不二选择,列存储只有在增加磁盘并改进软件设计后才能接近这样的目标。如果以保存数据为主,行存储的写入性能比列存储高很多。在需要频繁读取单列集合数据的应用中,列存储是最合适的。如果每次读取多列,两个方案可酌情选择:采用行存储时,设计中应考虑减少或避免冗余列;若采用列存储方案,为保证读写入效率,每列数据尽可能分别保存到不同的磁盘上,多个线程并行读写各自的数据,这样避免了磁盘竞用的同时也提高了处理效率。 无论选择哪种方案,将同内容数据聚凑在一起都是必须的,这是减少磁头在磁盘上的移动,提高数据读取时间的有效办法。


    展开全文
  • 行存储 VS 列存储

    万次阅读 多人点赞 2018-07-06 12:56:03
    概述目前大数据存储有两种方案可供选择:行存储(Row-Based)和列存储(Column-Based)。业界对两种存储方案有很多争持,集中焦点是:谁能够更有效地处理海量数据,且兼顾安全、可靠、完整性。从目前发展情况看,关系...
  • 行存储列存储 由上图可以看到,在列存储中,某一个字段的所有值都是连在一起的。在行存储中,每一的所有字段的值是连在一起的。 因此行列存储的优势就很容易区分出来了: 行存储的优点: 记录的更新和插入...
  • 存储过程的优缺点

    千次阅读 2019-05-20 16:21:33
    在维护公司的几年前的一个项目,虽说不上是历史悠久,但也有些年头了,采用三层架构,加上存储过程的这么一个老的架构,本来这个架构也...可以说被存储过程伤的很深啊,所以今天就来总结下存储过程的优缺点。  ...
  • 顺序存储结构和链式存储结构的优缺点比较

    万次阅读 多人点赞 2018-10-09 17:45:34
    优缺点 顺序存储时,相邻数据元素的存放地址也相邻(逻辑与物理统一);要求内存中可用存储单元的地址必须是连续的。 优点:存储密度大(=1),存储空间利用率高。 缺点:插入或删除元素时不方便。 链式存储...
  • SQL存储过程的优缺点

    千次阅读 2018-07-28 17:17:22
    存储过程是由一些SQL语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序调用,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它,也可以从另一个过程或...
  • 分布式存储与传统存储对比优缺点

    千次阅读 2020-07-24 16:55:45
    传统的存储以EMC,HDS,NetApp为代表,产品方案以SAN和NAS应用为主。典型的SAN应当属于关系型数据库,数据以块数据为主,所谓结构化数据;而NAS以文件数据为主,可以认为是非结构化数据。期间,也有所谓融合存储或者...
  • 目前大数据存储有两种方案可供选择:行存储列存储。业界对两种存储方案有很多争持,集中焦点是:谁能够更有效地处理海量数据,且兼顾安全、可靠、完整性。从目前发展情况看,关系数据库已经不适应这种巨大的存储量...
  • 顺序存储和链式存储优缺点

    万次阅读 2018-08-28 11:43:14
    顺序存储 a相邻数据元素的存放地址也相邻(逻辑与物理统一),b,要求内存中可用的春初单元的地址必须是连续的。 优点:存储密度大=1,存储空间利用概率高。 缺点:插入或删除元素时不...缺点存储密度小&lt...
  • 存储过程及游标的优缺点

    千次阅读 2018-11-23 17:18:57
    前言:相信很多小伙伴在学习阶段肯定使用过存储过程及...存储过程的优缺点 优点  1. 运行速度:对于很简单的sql,存储过程没有什么优势。对于复杂的业务逻辑,因为在存储过程创建的时候,数据库已经对其进行了一...
  • 顺序存储和链式存储各自的优缺点及其比较 顺序存储: 顺序存储的优点: 1、逻辑结构与物理结构是统一的,其中的元素都是顺序存储的; 2、方法简单,好理解,各种语言中都有数组,易实现; 3、不用为结点...
  • 数据库使用存储过程的优缺点

    千次阅读 2019-12-22 19:02:53
    做后台系统服务器开发,使用数据库,会使用存储过程吗?
  • 存储存储的比较

    千次阅读 2018-03-04 21:15:37
    存储的优点: 同一数据存放在同一个block块里面,select * from table_name;数据能直接获取出来;  INSERT/UPDATE比较方便 存储缺点: ...不同类型数据存放在同一个block块里面,压缩...存储
  • 转自:https://blog.csdn.net/youzhouliu/article/details/676328821 为什么要按列存储列存储(Columnar or column-based)是相对于传统关系型数据库的存储(Row-basedstorage)来说的。简单来说两者的区别就是...
  • 存储(Columnar or column-based)是相对于传统关系型数据库的存储(Row-basedstorage)来说的。简单来说两者的区别就是如何组织表(翻译不好,直接抄原文了): Ø Row-based storage stores atable in a ...
  • Table of Contents 存储数据库 Examples of Column StoreDBMSs Hbase Table Row Column Column Family ...存储数据库 ...式数据库是以相关存储架构进行数据存储的数据库,主要...
  • 顺序表和链表存储优缺点

    万次阅读 2015-08-07 11:31:06
    顺序表和链表存储优缺点 1.顺序表存储  原理:顺序表存储是将数据元素放到一块连续的内存存储空间,存取效率高,速度快。但是不可以动态增加长度  优点:存取速度高效,通过下标来直接存储  缺点:1.插入和...
  • 存储存储的比较: 存储(Columnar or column-based)是相对于传统关系型数据库的存储(Row-basedstorage)来说的。简单来说两者的区别就是如何组织表: Ø Row-based storage stores atable in...
  • 常见的存储结构及其优缺点

    千次阅读 2020-03-24 01:29:47
    逻辑关系映射到物理存储的映射方式有4种:顺序、链式、索引、哈希,相应地就产生了四种存储结构:顺序存储结构、链式存储结构、索引存储结构、哈希存储结构。 顺序存储 特点:存储空间的地址连续,数据元素依次存放...
  • 线性表顺序存储结构的优缺点

    千次阅读 2014-07-21 23:07:10
    优点:1、无须为表示表中元素之间的... 缺点:1、插入和删除操作需要移动大量的元素。  2、当线性表长度变化较大时,难以确定存储空间的容量。  3、造成存储空间的“碎片”。   ==============================
  • 存储存储的区别

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

    万次阅读 2018-09-07 14:15:27
    两者特点: 顺序表的特点是逻辑上相邻的数据元素,物理存储位置也相邻,并且,顺序表的存储空间需要预先...缺点:  (1)在顺序表中做插入、删除操作时,平均移动表中的一半元素,因此对n较大的顺序表效率低。 ...
  • 顺序存储结构和链式存储结构的优缺点

    万次阅读 多人点赞 2017-10-08 09:21:35
    顺序存储结构和链式存储结构的优缺点 数据在计算机内有链式和顺序两种存储方式,在存储空间使用的灵活性上, 链式存储比顺序存储要高。 (一)顺序存储结构和链式存储结构的优缺点比较,以及使用情况。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 553,690
精华内容 221,476
关键字:

行存储列存储优缺点