精华内容
下载资源
问答
  • 行存储 VS 列存储

    万次阅读 多人点赞 2018-07-06 12:56:03
    概述目前大数据存储有两种方案可供选择:行存储(Row-Based)和列存储(Column-Based)。业界对两种存储方案有很多争持,集中焦点是:谁能够更有效地处理海量数据,且兼顾安全、可靠、完整性。从目前发展情况看,关系...


    概述

    目前大数据存储有两种方案可供选择:行存储(Row-Based)和列存储(Column-Based)。业界对两种存储方案有很多争持,集中焦点是:谁能够更有效地处理海量数据,且兼顾安全、可靠、完整性。从目前发展情况看,关系数据库已经不适应这种巨大的存储量和计算要求,基本是淘汰出局。在已知的几种大数据处理软件中,Hadoop的HBase采用列存储,MongoDB是文档型的行存储,Lexst是二进制型的行存储。

     

    什么是列存储?

    列式存储(column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是如何组织表:

    Ø  Row-based storage storesatable in a sequence of rows.

    Ø  Column-based storage storesatable in a sequence of columns.



    从上图可以很清楚地看到,行式存储下一张表的数据都是放在一起的,但列式存储下都被分开保存了。所以它们就有了如下这些优缺点对比:

     

    在数据写入上的对比

    1)行存储的写入是一次完成。如果这种写入建立在操作系统的文件系统上,可以保证写入过程的成功或者失败,数据的完整性因此可以确定。

    2)列存储由于需要把一行记录拆分成单列保存,写入次数明显比行存储多(意味着磁头调度次数多,而磁头调度是需要时间的,一般在1ms~10ms),再加上磁头需要在盘片上移动和定位花费的时间,实际时间消耗会更大。所以,行存储在写入上占有很大的优势。

    3)还有数据修改,这实际也是一次写入过程。不同的是,数据修改是对磁盘上的记录做删除标记。行存储是在指定位置写入一次,列存储是将磁盘定位到多个列上分别写入,这个过程仍是行存储的列数倍。所以,数据修改也是以行存储占优。

     

    在数据读取上的对比

    1)数据读取时,行存储通常将一行数据完全读出,如果只需要其中几列数据的情况,就会存在冗余列,出于缩短处理时间的考量,消除冗余列的过程通常是在内存中进行的。

    2)列存储每次读取的数据是集合的一段或者全部,不存在冗余性问题。

    3) 两种存储的数据分布。由于列存储的每一列数据类型是同质的,不存在二义性问题。比如说某列数据类型为整型(int),那么它的数据集合一定是整型数据。这种情况使数据解析变得十分容易。相比之下,行存储则要复杂得多,因为在一行记录中保存了多种类型的数据,数据解析需要在多种数据类型之间频繁转换,这个操作很消耗CPU,增加了解析的时间。所以,列存储的解析过程更有利于分析大数据

    4)从数据的压缩以及更性能的读取来对比

     


     

     

     

    优缺点

    显而易见,两种存储格式都有各自的优缺点:

    1)行存储的写入是一次性完成,消耗的时间比列存储少,并且能够保证数据的完整性,缺点是数据读取过程中会产生冗余数据,如果只有少量数据,此影响可以忽略;数量大可能会影响到数据的处理效率。

    2)列存储在写入效率、保证数据完整性上都不如行存储,它的优势是在读取过程,不会产生冗余数据,这对数据完整性要求不高的大数据处理领域,比如互联网,犹为重要。

     

    两种存储格式各自的特性都决定了它们的使用场景。

     

    列存储的适用场景

    1)一般来说,一个OLAP类型的查询可能需要访问几百万甚至几十亿个数据行,且该查询往往只关心少数几个数据列。例如,查询今年销量最高的前20个商品,这个查询只关心三个数据列:时间(date)、商品(item)以及销售量(sales amount)。商品的其他数据列,例如商品URL、商品描述、商品所属店铺,等等,对这个查询都是没有意义的。

     

    而列式数据库只需要读取存储着“时间、商品、销量”的数据列,而行式数据库需要读取所有的数据列。因此,列式数据库大大地提高了OLAP大数据量查询的效率

     

    OLTP    OnLine TransactionProcessor 在线联机事务处理系统(比如Mysql,Oracle等产品)

    OLAP    OnLine AnalaysierProcessor  在线联机分析处理系统(比如Hive  Hbase等)

     

    2)很多列式数据库还支持列族(column group,Bigtable系统中称为locality group),即将多个经常一起访问的数据列的各个值存放在一起。如果读取的数据列属于相同的列族,列式数据库可以从相同的地方一次性读取多个数据列的值,避免了多个数据列的合并。列族是一种行列混合存储模式,这种模式能够同时满足OLTP和OLAP的查询需求。

     

    3)此外,由于同一个数据列的数据重复度很高,因此,列式数据库压缩时有很大的优势。

    例如,Google Bigtable列式数据库对网页库压缩可以达到15倍以上的压缩率。另外,可以针对列式存储做专门的索引优化。比如,性别列只有两个值,“男”和“女”,可以对这一列建立位图索引:

    如下图所示

    “男”对应的位图为100101,表示第1、4、6行值为“男”

    “女”对应的位图为011010,表示第2、3、5行值为“女”

    如果需要查找男性或者女性的个数,只需要统计相应的位图中1出现的次数即可。另外,建立位图索引后0和1的重复度高,可以采用专门的编码方式对其进行压缩。

     

    当然,如果每次查询涉及的数据量较小或者大部分查询都需要整行的数据,列式数据库并不适用。

     

     

     

    最后总结如下

    传统行式数据库的特性如下:

    ①数据是按行存储的。

    ②没有索引的查询使用大量I/O。比如一般的数据库表都会建立索引,通过索引加快查询效率。

    ③建立索引和物化视图需要花费大量的时间和资源。

    ④面对查询需求,数据库必须被大量膨胀才能满足需求。

     

    列式数据库的特性如下:

    ①数据按列存储,即每一列单独存放。

    ②数据即索引。

    ③只访问查询涉及的列,可以大量降低系统I/O。

    ④每一列由一个线程来处理,即查询的并发处理性能高。

    ⑤数据类型一致,数据特征相似,可以高效压缩。比如有增量压缩、前缀压缩算法都是基于列存储的类型定制的,所以可以大幅度提高压缩比,有利于存储和网络输出数据带宽的消耗。


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

    千次阅读 2018-01-06 16:26:32
    传统的行式数据库将一个个完整的数据行存储在数据页中。这种方式在大数据量查询的时候会出现以下问题 1、在没有索引的情况下,会把一行全部查出来,查询会使用大量IO 2、虽然建立索引和物化视图可以可以快速...

    本文地址:http://www.cnblogs.com/qiaoyihang/p/6262806.html  

    传统的行式数据库将一个个完整的数据行存储在数据页中。这种方式在大数据量查询的时候会出现以下问题

    1、在没有索引的情况下,会把一行全部查出来,查询会使用大量IO
    2、虽然建立索引和物化视图可以可以快速定位列,但是也需要花费大量时间
     
    但是如果处理查询时需要用到大部分的数据列,这种方式在磁盘IO上是比较高效的。

    一般来说,OLTP(Online Transaction Processing,联机事务处理)应用适合采用这种方式。

      一个OLAP类型的查询可能需要访问几百万甚至几十亿个数据行,且该查询往往只关心少数几个数据列。例如,查询今年销量最高的前20个商品,这个查询只关心三个数据列:时间(date)、商品(item)以及销售量(sales amount)。商品的其他数据列,例如商品URL、商品描述、商品所属店铺,等等,对这个查询都是没有意义的。

      如下图,列式数据库是将同一个数据列的各个值存放在一起。插入某个数据行时,该行的各个数据列的值也会存放到不同的地方。上例中列式数据库只需要读取存储着“时间、商品、销量”的数据列,而行式数据库需要读取所有的数据列。因此,列式数据库大大地提高了OLAP大数据量查询的效率。当然,列式数据库不是万能的,每次读取某个数据行时,需要分别从不同的地方读取各个数据列的值,然后合并在一起形成数据行。因此,如果每次查询涉及的数据量较小或者大部分查询都需要整行的数据,列式数据库并不适用。

      

     

      很多列式数据库还支持列组(column group,Bigtable系统中称为locality group),即将多个经常一起访问的数据列的各个值存放在一起。如果读取的数据列属于相同的列组,列式数据库可以从相同的地方一次性读取多个数据列的值,避免了多个数据列的合并。列组是一种行列混合存储模式,这种模式能够同时满足OLTP和OLAP的查询需求。

      由于同一个数据列的数据重复度很高,因此,列式数据库压缩时有很大的优势。例如,Google Bigtable列式数据库对网页库压缩可以达到15倍以上的压缩率。另外,可以针对列式存储做专门的索引优化。比如,性别列只有两个值,“男”和“女”,可以对这一列建立位图索引:

      如下图所示,“男”对应的位图为100101,表示第1、4、6行值为“男”;“女”对应的位图为011010,表示第2、3、5行值为“女”。如果需要查找男性或者女性的个数,只需要统计相应的位图中1出现的次数即可。另外,建立位图索引后0和1的重复度高,可以采用专门的编码方式对其进行压缩。

      

     

     

    得出如下结论:

    列式存储: 每一列单独存放,数据即是索引。

    只访问涉及得列,如果我们想访问单独一列(比如NAME)会相当迅捷。

    一行数据包含一个列或者多个列,每个列一单独一个cell来存储数据。而行式存储,则是把一行数据作为一个整体来存储。

    在HANA的世界中,并不是只存在列式存储,行式存储也是存在的。那么读者不经要问

    什么时候应该使用行式存储?什么时候应该使用列式存储呢?

    如果你大部分时间都是关注整张表的内容,而不是单独某几列,并且所关注的内容是不需要通过任何聚集运算的,那么推荐使用行式存储。原因是重构每一行数据(即解压缩过程)对于HANA来说,是一个不小的负担。

    列式存储的话,比如你比较关注的都是某几列的内容,或者有频繁聚集需要的,通过聚集之后进行数据分析的表。

     

    详细归纳为如下:

    选择HANA列式存储

    基于一列或比较少的列计算的时候

    经常关注一张表某几列而非整表数据的时候

    数据表拥有非常多的列的时候

    数据表有非常多行数据并且需要聚集运算的时候

    数据表列里有非常多的重复数据,有利于高度压缩

    选择HANA行式存储

    关注整张表内容,或者需要经常更新数据

    需要经常读取整行数据

    不需要聚集运算,或者快速查询需求

    数据表本身数据行并不多

    数据表的列本身有太多唯一性的数据

     

    hbase 存储
    google bigtable 的开源实现
    hdfs 和hbase 的比较
    1、都有良好的容错性和扩展性
    2、hdfs适合批处理,但不支持随机查找,不适合增量数据,不支持数据更新
     
    hbase 是hdfs的很好补充
     
    hbase 表的特点
    1、大: 可存储数十亿行,百万列
    2、无模式:同一个表可以有不同的列
    3、稀疏:空列不占存储空间
    4、多版本:每个单元格有版本号
     
    如果按行存储:

     

    按列存储

     

    存储方式

    put 表名,rowkey,列族:列名 ,值

     

    逻辑视图:

     

    数据模型:

     

     

    hbase schema 可以有多个table
    每个表由多个column family 组成
    有 dynamic column 组成

     

    物理模型
    每个列族存储在hdfs上一个单独的文件
    rowkey 和 version 在每个列族都有一份
    控制不保存,占位符都没有有
     

     

     
     
     

     

    https://www.cnblogs.com/qiaoyihang/p/6262806.html




    展开全文
  • 列存储与行存储的区别

    千次阅读 2019-01-29 16:43:18
    行存储的写入是一次完成,数据的完整性因此可以确定。 列存储需要把一行记录拆分成单列保存,写入次数明显比行存储多。 行存储在写入上占有很大的优势 数据修改: 行存储是在指定位置写入一次,列存储是将磁盘定位...

    写入:
    行存储的写入是一次完成,数据的完整性因此可以确定。
    列存储需要把一行记录拆分成单列保存,写入次数明显比行存储多。
    行存储在写入上占有很大的优势

    数据修改:
    行存储是在指定位置写入一次,列存储是将磁盘定位到多个列上分别写入。
    行存储在数据修改也是占优的

    数据读取:
    行存储通常将一行数据完全读出,如果只需要其中几列数据,就会存在冗余列
    列存储每次读取的数据是集合中的一段或者全部。
    由于列储存的数据是同质的,这种情况使数据解析变得容易。行存储则复杂的多,因为在一行记录中保存了多种类型的数据,数据解析需要在多种数据类型之间频繁转换,这个操作很消耗cpu
    所以列存储的解析过程中更有利于分析大数据


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


    什么时候应该使用行式存储?什么时候应该使用列式存储呢?
    如果你大部分时间都是关注整张表的内容,而不是单独某几列,并且所关注的内容是不需要通过任何聚集运算的,那么推荐使用行式存储。原因是重构每一行数据(即解压缩过程)对于HANA来说,是一个不小的负担。
    列式存储的话,比如你比较关注的都是某几列的内容,或者有频繁聚集需要的,通过聚集之后进行数据分析的表。
    --------------------- 
    作者:vagabond6 
    来源:CSDN 
    原文:https://blog.csdn.net/vagabond6/article/details/79555282 
    版权声明:本文为博主原创文章,转载请附上博文链接!

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

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

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

      • 优点:有利于面向单列数据的读取/统计等操作
      • 缺点:整行读取时,可能需要多次I/O操作
    展开全文
  • 列式存储(Columnar or column-based)是相对于传统关系型数据库的存储(Row-basedstorage)来说的。简单来说两者的区别就是如何组织表(翻译不好,直接抄原文了): Ø Row-based storage stores atable in a ...
  • 数据库:行存储、列存储 利弊分析

    千次阅读 2017-06-27 19:27:55
    可以看一下文章中的概念,后面的结论部分可能存在一些问题,这里只是转载,如果有问题还请读者到原文回复~敬请谅解目前大数据存储有两种方案可供选择:行存储和列存储。业界对两种存储方案有很多争持,集中焦点是:谁...
  • 设有数组A[n,m],数组的每个元素长度为3字节,n的值为1~8,m的值为1~10,数组从内存收地址BA开始顺序存放,请分别用列存储方式和行存储方式求A[5,8]的存储首地址为多少? 解题说明: (1)为什么要引入以列序为...
  • 行存储和列存储的区别

    万次阅读 2017-03-28 10:51:51
    列存储不同于传统的关系型数据库,其数据在表中是按行存储的,列方式所带来的重要好处之一就是,由于查询中的选择规则是通过列来定义的,因此整个数据库是自动索引化的。按列存储每个字段的数据聚集存储,在查询只...
  • 行存储列存储优缺点

    千次阅读 2019-05-16 11:46:29
    行存储 列存储 优点 写入效率高,保证数据完整性 读取效率高,没有冗余 缺点 数据有冗余现象,计算速度慢 写入次数多,速度慢,小号cpu 使用场景 关注整张表内容,或者需要经常更新数据、...
  • Mysql 行存储的文件格式

    千次阅读 2019-04-16 15:10:00
    一、Mysql行存储的文件格式概述 InnoDB存储引擎有两种文件格式 Antelope:compact与redundant两种行记录格式 Barracuda:compress与dynamic两种行记录格式 查看表的行记录格式: show table status like '%sys_...
  • es索引优化(行存储、列存储、索引)

    千次阅读 2019-04-01 13:36:37
    es的底层存储使用lucene,主要包含行存储(storefiled),列存储(docvalues)和倒排索引(invertindex)。 大多数使用场景中,没有必要同时存储这三个部分,可以通过下面的参数来做适当调整 1 mapping type index ...
  • 转自:https://blog.csdn.net/youzhouliu/article/details/676328821 为什么要按列存储列式存储(Columnar or column-based)是相对于传统关系型数据库的存储(Row-basedstorage)来说的。简单来说两者的区别就是...
  • 一、定义存储把一中的数据值串在一起存储起来,然后再存储下一的数据,以此类推列式存储把一列中的数据值串在一起存储起来,然后再存储下一列的数据,以此类推二、例子1数据库以、列的二维表的形式表示...
  • 区别于传统数据库的行存储,HBASE是面向列进行存储,底层基于Key-Value结构存储 HBASE能够提供低延迟的数据查询能力,其原因是底层充分利用了缓存机制以及复杂的数据结构和算法来实现 二、HBASE的行存储和列存储...
  • Python中数组按行存储,与Matlab不同

    千次阅读 2018-01-02 19:44:57
    数组因为是线性结构,因此在内存中都是顺序存储的,但按行存储还是按列存储,不同语言有不同的规定。matlab是按列存储的,而C/C++和python是按行存储的 。
  • 数据库:行存储、列存储

    千次阅读 2014-03-21 22:22:03
    PS:可以看一下文章中的概念,后面的结论部分可能...目前大数据存储有两种方案可供选择:行存储和列存储。业界对两种存储方案有很多争持,集中焦点是:谁能够更有效地处理海量数据,且兼顾安全、可靠、完整性。从目前发
  • 列存储不同于传统的关系型数据库,其数据在表中是按行存储的,列方式所带来的重要好处之一就是,由于查询中的选择规则是通过列来定义的,因此整个数据库是自动索引化的。按列存储每个字段的数据聚集存储,在查询只...
  • 列存储、行存储

    万次阅读 2013-02-26 13:24:24
    Sybase在2004年左右就推出了列存储的Sybase IQ数据库系统,主要用于在线分析、数据挖掘等查询密集型应用。列存储,缩写为DSM,相对于NSM(N-ary storage model),其主要区别在于: DSM将所有记录中相同字段的数据...
  • NoSQL中的行存储与列存储

    千次阅读 2014-06-22 12:31:39
    在已知的几种大数据处理软件中,Hadoop的HBase采用列存储,MongoDB是文档型的行存储,Lexst是二进制型的行存储。在这里,我不讨论这些软件的技术和优缺点,只围绕机械磁盘的物理特质,分析行存储和列存储的存储特点...
  • 行存储和列存储--大数据应用选择

    千次阅读 2015-05-23 21:28:27
    目前大数据存储有两种方案可供选择:行存储和列存储。业界对两种存储方案有很多争持,集中焦点是:谁能够更有效地处理海量数据,且兼顾安全、可靠、完整性。从目前发展情况看,关系数据库已经不适应这种巨大的存储量...
  • 列式存储存储的理解详解

    千次阅读 2020-09-18 12:00:29
    列式存储存储的理解详解 一、列式存储存储 二、列式存储存储优比较理解 三、列式存储优势 四、小结 什么时候应该使用存储?什么时候应该使用列式存储呢? 叮嘟!这里是小啊呜的学习课程资料...
  • 参考文章:存储和列式存储优缺点和paruqet文件结构 一、列式存储存储的比较 列式存储存储是针对数据在存储介质中的排序形式而言的,假设存在一张table,那么: 存储:依次连续存储第1、2、3...
  • 数据库表按行存储和按列存储比较

    千次阅读 2013-10-05 15:34:49
    将表放入存储系统中有两种方法,而我们绝大部分是采用行存储的。行存储法是将各行放入连续的物理位置,这很像传统的记录和文件系统。然后由数据库引擎根据每个查询提取需要的列。列存储法是将数据按照列存储到数据库...
  • HANA数据库的行存储和列存储

    千次阅读 2013-08-06 10:51:08
    HANA数据库同时支持行存储和列存储。列存储读性能好,拥有较高的压缩比,一些特性如分区只适用于列存储。常用于批量更新的大数据量表。行存储更新插入性能好,常用于经常单独操作的小数据量表。 存储类型 ...
  •  目前大数据存储有两种方案可供选择:行存储和列存储。业界对两种存储方案有很多争持,集中焦点是:谁能够更有效地处理海量数据,且兼顾安全、可靠、完整性。从目前发展情况看,关系数据库已经不适应这种巨大的存储...
  • 列式存储存储有什么区别?

    千次阅读 热门讨论 2021-04-15 21:00:52
    1. 数据是按行存储的 2. 没有建立索引的查询将消耗很大的IO 3. 建立索引和视图需要花费一定的物理空间和时间资源 4. 面对大量的查询,复杂的查询数据库必须被大量膨胀才能满足性能需求 列式存储: 1. 数据是按列...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,598,696
精华内容 639,478
关键字:

行存储