【数据库系列】什么是列式存储和行式存储

简介: 列式存储:每一列单独存放,数据即是索引。只访问涉及得列,如果我们想访问单独一列(比如NAME)会相当迅捷。一行数据包含一个列或者多个列,每个列一单独一个cell来存储数据。行式存储: 把一行数据作为一个整体来存储。学习:https://blog.csdn.net/qq_43543789/article/details/108662140。......

一、列式存储和行式存储

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

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

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

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

2.1 行式存储

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

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

但是如果处理查询时需要用到大部分的数据列,这种方式在磁盘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来存储数据。

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

       


      相关文章
      |
      存储 关系型数据库 MySQL
      MySQL——数据库备份上传到阿里云OSS存储
      MySQL——数据库备份上传到阿里云OSS存储
      527 0
      |
      3月前
      |
      存储 Oracle 关系型数据库
      服务器数据恢复—光纤存储上oracle数据库数据恢复案例
      一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
      |
      4月前
      |
      存储 关系型数据库 数据库
      高性能云盘:一文解析RDS数据库存储架构升级
      性能、成本、弹性,是客户实际使用数据库过程中关注的三个重要方面。RDS业界率先推出的高性能云盘(原通用云盘),是PaaS层和IaaS层的深度融合的技术最佳实践,通过使用不同的存储介质,为客户提供同时满足低成本、低延迟、高持久性的体验。
      |
      6月前
      |
      SQL 存储 分布式数据库
      分布式存储数据恢复—hbase和hive数据库数据恢复案例
      分布式存储数据恢复环境: 16台某品牌R730xd服务器节点,每台服务器节点上有数台虚拟机。 虚拟机上部署Hbase和Hive数据库。 分布式存储故障: 数据库底层文件被误删除,数据库不能使用。要求恢复hbase和hive数据库。
      209 12
      |
      7月前
      |
      存储 SQL NoSQL
      【赵渝强老师】达梦数据库的逻辑存储结构
      本文介绍了达梦数据库的存储结构,包括逻辑和物理存储两部分。逻辑存储结构由数据库(Database)、表空间(Tablespaces)、段(Segments)、簇(Cluster)和页(Page)组成。数据库是最大逻辑单元,包含所有表、索引等;表空间由数据文件组成,用于存储对象;段由簇构成,簇包含连续的数据页;页是最小存储单元。文中还提供了查询表空间、段和页大小的SQL语句,并附有视频讲解和示意图。
      258 7
      |
      8月前
      |
      存储 关系型数据库 分布式数据库
      PolarDB开源数据库进阶课3 共享存储在线扩容
      本文继续探讨穷鬼玩PolarDB RAC一写多读集群系列,介绍如何在线扩容共享存储。实验环境依赖《在Docker容器中用loop设备模拟共享存储》搭建。主要步骤包括:1) 扩容虚拟磁盘;2) 刷新loop设备容量;3) 使用PFS工具进行文件系统扩容;4) 更新数据库实例以识别新空间。通过这些步骤,成功将共享存储从20GB扩容至30GB,并确保所有节点都能使用新的存储空间。
      157 1
      |
      7月前
      |
      存储 SQL 安全
      【赵渝强老师】达梦数据库的物理存储结构
      本文介绍了达梦数据库的存储结构及各类物理文件的作用。达梦数据库通过逻辑和物理存储结构管理数据,包含配置文件(如dm.ini、sqllog.ini)、控制文件(dm.ctl)、数据文件(*.dbf)、重做日志文件(*.log)、归档日志文件、备份文件(*.bak)等。配置文件用于功能设置,控制文件记录数据库初始信息,数据文件存储实际数据,重做日志用于故障恢复,归档日志增强数据安全性,备份文件保障数据完整性,跟踪与事件日志辅助问题分析。这些文件共同确保数据库高效、稳定运行。
      293 0
      |
      8月前
      |
      存储 人工智能 监控
      时序数据库 TDengine 化工新签约:存储降本一半,查询提速十倍
      化工行业在数字化转型过程中面临数据接入复杂、实时性要求高、系统集成难度大等诸多挑战。福州力川数码科技有限公司科技依托深厚的行业积累,精准聚焦行业痛点,并携手 TDengine 提供高效解决方案。
      158 0
      |
      10月前
      |
      存储 druid 分布式数据库
      列式存储数据库与超市的关系?
      列式存储数据库是一种高效的数据管理方式,类似于超市将相似商品集中摆放。它将相同类型的数据(如年龄、价格)归类存储,便于快速查询和压缩,广泛应用于市场分析、财务报告和健康数据分析等领域。知名产品包括HBase、ClickHouse、Druid和Apache Cassandra等,适合处理大规模数据和实时分析任务。
      135 4
      |
      11月前
      |
      存储 数据库
      快速搭建南大通用GBase 8s数据库SSC共享存储集群
      本文介绍如何GBase8s 数据库 在单机环境中快速部署SSC共享存储集群,涵盖准备工作、安装数据库、创建环境变量文件、准备数据存储目录、修改sqlhost、设置onconfig、搭建sds集群及集群检查等步骤,助你轻松完成集群功能验证。

      热门文章

      最新文章