一、列式存储和行式存储

列式存储是指一列中的数据在存储介质中是连续存储的;

行式存储是指一行中的数据在存储介质中是连续存储的。

简单的说,可以把列式数据库认为是每一列都是一个表,这个表只有一列,如果只在该列进行条件查询,速度就很快。

二、列式存储和行式存储优比较

2.1 行式存储

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

1、在没有索引的情况下,会把一行全部查出来,查询会使用大量IO2、虽然建立索引和物化视图可以可以快速定位列,但是也需要花费大量时间

但是如果处理查询时需要用到大部分的数据列,这种方式在磁盘IO上是比较高效的。
一般来说,OLTP(Online Transaction Processing,联机事务处理)应用适合采用这种方式。

2.2 列式存储

列式数据库是将同一个数据列的各个值存放在一起。插入某个数据行时,该行的各个数据列的值也会存放到不同的地方。

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

当然,列式数据库不是万能的,每次读取某个数据行时,需要分别从不同的地方读取各个数据列的值,然后合并在一起形成数据行。

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

三、列式存储优势

基于列模式的存储,天然就会具备以下几个优点:

1,自动索引
因为基于列存储,所以每一列本身就相当于索引。所以在做一些需要索引的操作时,就不需要额外的数据结构来为此列创建合适的索引。

2,利于数据压缩

一、大部分列数据基数其实是重复的:例如,因为同一个 author 会发表多篇博客,所以 author 列出现的所有值的基数肯定是小于博客数量的,因此在 author 列的存储上其实是不需要存储博客数量这么大的数据量的;

二、相同的列数据类型一致:这样利于数据结构填充的优化和压缩,而且对于数字列这种数据类型可以采取更多有利的算法去压缩存储

四、适用场景

4.1 行式储存

  1. 关注整张表内容,或者需要经常更新数据
  2. 需要经常读取整行数据
  3. 不需要聚集运算,或者快速查询需求
  4. 数据表本身数据行并不多
  5. 数据表的列本身有太多唯一性的数据

数据库常规设计,一般会采用行式存储

4.2 列式存储

  1. 基于一列或比较少的列计算的时候
  2. 经常关注一张表某几列而非整表数据的时候
  3. 数据表拥有非常多的列的时候
  4. 数据表有非常多行数据并且需要聚集运算的时候
  5. 数据表列里有非常多的重复数据,有利于高度压缩

算法中输出或者输入的csv文件,一般是列式存储

五、总结:

列式存储: 每一列单独存放,数据即是索引。
                  只访问涉及得列,如果我们想访问单独一列(比如NAME)会相当迅捷。
                  一行数据包含一个列或者多个列,每个列一单独一个cell来存储数据。

行式存储: 把一行数据作为一个整体来存储。

————————————————————————————————

学习:https://blog.csdn.net/qq_43543789/article/details/108662140

什么是列式存储和行式存储相关推荐

  1. 列式存储和行式存储它们真正的区别是什么

    本文是<Column-Stores vs. Row-Stores: How Different Are They Really?>论文的读后感,作者徐明明.原文链接:https://zhu ...

  2. 列式存储和行式存储的真正区别

    1 列式存储和行式存储的真正区别 参考文献: 列式存储和行式存储的真正区别_过往记忆大数据_公众号文章 一般原因:查询需要的字段时,Column-Store 只需读取需要的列,Row-Store读一条 ...

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

    什么是列式数据库? 列式数据库是以列相关存储架构进行数据存储的数据库.卢东明认为数据库发展已经到了一个新阶段,数据库市场需要细分,行式数据库不再满足所有的需求,而有很多需求需要通过内存数据库和列式数据 ...

  4. 为什么MaxCompute采用列式存储?列式存储和行式存储的主要区别在哪

    摘要: 1 为什么要按列存储 列式存储(Columnar or column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的.简单来说两者的区别就是如何组织表 ...

  5. 列式存储和行式存储有什么区别?

    写在前面 本文隶属于专栏<100个问题搞定大数据理论体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和文献引用请见100个问题搞定大数据理 ...

  6. Hbase与Oracle比较(列式数据库与行式数据库)

    1 主要区别 1.1.Hbase适合大量插入同时又有读的情况 1.2. Hbase的瓶颈是硬盘传输速度,Oracle的瓶颈是硬盘寻道时间. Hbase本质上只有一种操作,就是插入,其更新操作是插入一个 ...

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

    转载自:https://blog.csdn.net/nieson2012/article/details/79551337 列存储不同于传统的关系型数据库,其数据在表中是按行存储的,列方式所带来的重要 ...

  8. 列式数据库和行式数据库的区别

    前言 最近学习了hbase,其中涉及的到知识就是hbase采用了列式存贮,而用惯了mysql的我当然一脸懵逼,于是有了本篇文章,本文不是论文,所有涉及的知识点他人都有讲,我只是为了记录一下,如果想要看 ...

  9. 列式存储 V.S. 行式存储

    列式数据库 http://zh.wikipedia.org/wiki/%E5%88%97%E5%BC%8F%E6%95%B0%E6%8D%AE%E5%BA%93 列式存储与行式存储 http://my ...

最新文章

  1. python做多元线性回归
  2. Marshal.Copy 之 startIndex 参数的含义
  3. mysql忽略大小写配置cnetos_CentOS7下安装MYSQL8.X并设置忽略大小写
  4. 操作系统 第五章【虚拟存储器】【MOOC答案】
  5. python中 普通方法_python中普通方法classmethod和staticmethod的区别与用法
  6. 电脑控制iphone_如何把苹果 iPhone/iPad 投屏到电脑
  7. php网站评论模块怎么写,模块内容评论循环
  8. 都说变量有七八种,到底谁是 Java 的亲儿子
  9. 单片机多大的ram才可以带动tft lcd_【单片机自学】7.液晶实验
  10. python qt gui快速编程_《PYTHON QT GUI快速编程 PYQT编程指南》源码
  11. 排列组合 vs 全排列与指数
  12. mysql 直接删表空间文件_oracle删除(释放)数据文件/表空间流程
  13. BERT源码分析(二)
  14. vue、四级联动(省市区街道)
  15. java怎么读取数据_java怎么读取数据
  16. python实现爬取网易云音乐评论,并且将评论信息存储到pymysql
  17. 汇编语言学习-DOSBox-MASM-安装及使用教程
  18. Fatal signal 11 (SIGSEGV) at 0x00000014 (code=1), thread 29925 (cloud.diversion)
  19. 陈梓立tison:投身开源,需要持之以恒的热爱与贡献
  20. 复盘苏宁收购红孩子案例——思考VC与垂直电商的未来

热门文章

  1. python之求1000以内素数
  2. 深度学习笔记(六) cnn 卷积神经网络
  3. [C6064]警告以及解决方法
  4. vant组件之van-popover气泡框结合list数组列表循环使用
  5. 科技巨头谷歌进军医疗行业,看皮肤病不再去专科医院,靠谱吗?
  6. 电路1——非正弦周期交流电路
  7. 两款轻便且功能强大的gif截取工具 [ScreenToGif] 和 [GifCam]
  8. 【分享】原力计划的初衷 【探讨】新的一年,你对原力计划有哪些期待?
  9. Code V中倾斜和偏心设置的基础知识
  10. 躬履艰难,其节乃见:华为陈黎芳眼中的全球责任