什么是列式存储和行式存储
一、列式存储和行式存储
列式存储是指一列中的数据在存储介质中是连续存储的;
行式存储是指一行中的数据在存储介质中是连续存储的。
简单的说,可以把列式数据库认为是每一列都是一个表,这个表只有一列,如果只在该列进行条件查询,速度就很快。
二、列式存储和行式存储优比较
2.1 行式存储
传统的
行式数据库
将一个个完整的数据行存储在数据页中。这种方式在大数据量查询的时候会出现以下问题:1、在没有索引的情况下,会把一行全部查出来,查询会使用大量IO 2、虽然建立索引和物化视图可以可以快速定位列,但是也需要花费大量时间
但是如果处理查询时需要用到大部分的数据列,这种方式在磁盘IO上是比较高效的。
一般来说,OLTP(Online Transaction Processing,联机事务处理)应用适合采用这种方式。
2.2 列式存储
列式数据库是将同一个数据列的各个值存放在一起。插入某个数据行时,该行的各个数据列的值也会存放到不同的地方。
例如上例中列式数据库只需要读取存储着“时间、商品、销量”的数据列,而行式数据库需要读取所有的数据列。因此,列式数据库大大地提高了OLAP大数据量查询的效率。
当然,列式数据库不是万能的,每次读取某个数据行时,需要分别从不同的地方读取各个数据列的值,然后合并在一起形成数据行。
因此,如果每次查询涉及的数据量较小或者大部分查询都需要整行的数据,列式数据库并不适用。
三、列式存储优势
基于列模式的存储,天然就会具备以下几个优点:
1,自动索引
因为基于列存储,所以每一列本身就相当于索引。所以在做一些需要索引的操作时,就不需要额外的数据结构来为此列创建合适的索引。
2,利于数据压缩
一、大部分列数据基数其实是重复的:例如,因为同一个 author 会发表多篇博客,所以 author 列出现的所有值的基数肯定是小于博客数量的,因此在 author 列的存储上其实是不需要存储博客数量这么大的数据量的;
二、相同的列数据类型一致:这样利于数据结构填充的优化和压缩,而且对于数字列这种数据类型可以采取更多有利的算法去压缩存储
四、适用场景
4.1 行式储存
- 关注整张表内容,或者需要经常更新数据
- 需要经常读取整行数据
- 不需要聚集运算,或者快速查询需求
- 数据表本身数据行并不多
- 数据表的列本身有太多唯一性的数据
数据库常规设计,一般会采用行式存储
4.2 列式存储
- 基于一列或比较少的列计算的时候
- 经常关注一张表某几列而非整表数据的时候
- 数据表拥有非常多的列的时候
- 数据表有非常多行数据并且需要聚集运算的时候
- 数据表列里有非常多的重复数据,有利于高度压缩
算法中输出或者输入的csv文件,一般是列式存储
五、总结:
列式存储: 每一列单独存放,数据即是索引。
只访问涉及得列,如果我们想访问单独一列(比如NAME)会相当迅捷。
一行数据包含一个列或者多个列,每个列一单独一个cell来存储数据。
行式存储: 把一行数据作为一个整体来存储。
————————————————————————————————
学习:https://blog.csdn.net/qq_43543789/article/details/108662140
相关文章
- 2022-08-31:以下go语言代码输出什么?A:江苏;B:v[“province“]取值错误;C:m.Store存储错误;D:不知道。 package ma
- MySQL 存储过程
- Postgresql 如何降低 wal 占用磁盘空间,降低磁盘存储成本
- 【错误记录】Android 分区存储 错误 ( 文件格式不匹配 )
- 如何使用Hibernate对Oracle中Clob类型数据存储和取出详解编程语言
- MySQL 分表优化存储性能(mysql分表存储)
- Dubbox搭建Redis实现快速数据存储(dubboxredis)
- 利用Oracle共享磁盘提高存储效率(oracle共享磁盘)
- 掌握Oracle记录类型方法,实现数据存储精准管理(oracle记录类型)
- MySQL中的二进制数据存储与管理(mysql二进制数据)
- MySQL存储过程的概念与使用方法简介(mysql什么是存储过程)
- 探索Redis实例:揭示存储能力的秘密(redis实例是什么意思)
- 【Linux挂载:更安全的文件存储】(linux挂载什么意思)
- Linux LVM: 打开新的存储世界(linuxlvm是什么)
- oracle内置表空间让数据库更有效地存储数据(oracle内置的表空间)
- 存储微博数据的Redis应该采用什么格式(微博存redis什么格式)
- 开启redis一种新的存储体验(开启redis是什么)
- 利用Redis存储何种数据(什么数据应该放redis)
- Redis中如何存储数据(什么数据存入redis)
- 从Redis中存储哪些数据(什么数据存redis)
- 用Redis存储什么内容(什么内容放redis)
- 云缓存Redis极速存储解决方案(云缓存redis是什么)
- 云存储 了解Redis的强大之处(云存储redis是什么)
- MySQL数据存储单页最大容量有多大(mysql 一个页 多大)
- 空间Oracle表空间存储数据的容器(oracle 什么是表)
- MySQL整数存储两字段分别如何存储,用什么数据类型最优(mysql两字段整数存储)
- Redis键值对存储解决方案(什么是redis 作用)
- MySQL数据库的默认存储引擎是什么(mysql不指定存储引擎)
- Redis里的宝藏珍贵的信息存储之处(redis里有什么)
- Redis中跳表存储技术革命(redis跳表存储)
- Redis为你存储多样数据(redis能放什么数据)
- 的数据Redis存储多种类型数据的灵活之选(redis能存哪些类型)
- 什么是cookie?js手动创建和存储cookie