当前位置: 首页 > news >正文

列式存储与行式存储:核心区别、优缺点及代表数据库

文章目录

    • 一、核心定义:数据组织方式的本质区别
    • 二、核心区别与优缺点对比
    • 三、代表数据库
      • 1. 行式存储数据库(OLTP为主)
      • 2. 列式存储数据库(OLAP为主)
    • 四、总结:如何选择?

在数据库存储中,行式存储列式存储的核心差异在于数据在磁盘/内存中的组织方式,这种差异直接决定了它们在不同场景下的性能表现。

一、核心定义:数据组织方式的本质区别

数据存储的最小单元是“字段(Column)”,多个字段构成“行(Row)”(即一条完整记录)。两种存储的根本区别在于,优先连续存储“行”还是“列”。

存储类型核心组织逻辑示例(存储3条用户记录:ID、Name、Age)
行式存储按“行”连续存储,一条记录的所有字段紧凑排列1:Tom:20 → 2:Jerry:22 → 3:Alice:18(每条记录的ID/Name/Age连续存)
列式存储按“列”连续存储,同一字段的所有值紧凑排列ID列:1→2→3;Name列:Tom→Jerry→Alice;Age列:20→22→18(每列数据单独连续存)

二、核心区别与优缺点对比

两种存储的优缺点高度依赖场景(如OLTP事务处理、OLAP数据分析),以下从5个关键维度对比:

对比维度行式存储(Row-Based)列式存储(Column-Based)
1. 数据查询效率- 优势:查询完整记录(如查某用户的所有信息)时,只需读取1次连续数据,效率高。
- 劣势:查询部分字段(如仅查所有用户的Age)时,会读取无关字段,产生“数据冗余读取”,效率低。
- 优势:查询部分字段(如统计所有用户的Age平均值)时,仅需读取目标列数据,无冗余,效率极高。
- 劣势:查询完整记录时,需从多个列文件中聚合数据,效率低。
2. 数据压缩效率- 劣势:每行数据字段类型不同(如ID是整数、Name是字符串),重复值少,压缩率低(通常1:2~1:3)。- 优势:同一列数据类型一致(如全是整数/Age),重复值多,可用高效压缩算法(如字典编码、差值编码),压缩率高(通常1:5~1:10),节省存储空间和IO成本。
3. 写入/更新效率- 优势:单条记录写入/更新(如新增1个用户、修改某用户Name)时,只需操作1个连续数据块,原子性好,适合高频事务。
- 劣势:批量更新某列(如给所有用户Age+1)时,需遍历所有行,效率低。
- 劣势:单条记录写入/更新时,需修改多个列文件,操作分散,原子性难保证,不适合高频事务。
- 优势:批量更新某列时,仅需操作1个列文件,效率极高。
4. 适用场景面向事务处理(OLTP):如电商下单、银行转账、用户信息管理,需高频读写单条完整记录。面向数据分析(OLAP):如报表统计、数据挖掘、BI分析,需批量查询/计算部分字段(如“近3个月各品类销售额总和”)。
5. 索引设计常用B+树索引,优化单条记录的查询(如按ID查用户)。较少依赖传统索引,因列存储本身已按列排序,可直接通过列数据的位置快速定位;部分数据库用“位图索引”优化过滤查询。

三、代表数据库

1. 行式存储数据库(OLTP为主)

  • 关系型数据库(RDBMS):几乎所有传统关系库均采用行式存储,因需支持高频事务。
  • MySQL(InnoDB、MyISAM引擎均为行式)
  • PostgreSQL(默认行式存储,可通过插件支持列式)
  • Oracle、SQL Server
  • NoSQL数据库(部分):侧重文档/键值的单条读写。
  • MongoDB(文档型,按文档(行)存储)
  • Redis(键值型,单条键值对对应“行”逻辑)

2. 列式存储数据库(OLAP为主)

  • 专用OLAP数据库:专为大规模数据分析设计。
  • ClickHouse(开源,高性能列式存储,常用于实时数据分析)
  • Vertica(商业,HP旗下,侧重企业级OLAP)
  • Greenplum(开源,基于PostgreSQL的列式存储扩展,支持MPP架构)
  • 云原生数据仓库
  • Amazon Redshift(基于PostgreSQL改造的列式存储数据仓库)
  • Google BigQuery(云原生列式存储,支持大规模SQL分析)
  • 阿里云AnalyticDB、腾讯云TDSQL-C(OLAP版)

四、总结:如何选择?

  • 行式存储:需高频处理单条事务(如增删改查用户记录)、重视数据一致性和原子性。
  • 列式存储:需批量分析数据(如统计、聚合、报表)、重视查询效率和存储成本。

(注:部分数据库支持“混合存储”,如PostgreSQL的cstore_fdw插件、Oracle的“列式压缩”,兼顾部分OLTP和OLAP需求,但核心场景仍偏向其中一种。)

http://www.dtcms.com/a/332811.html

相关文章:

  • Flink Stream API 源码走读 - map 和 flatMap
  • ETH持续上涨推动DEX热潮,交易活跃度飙升的XBIT表现强势出圈
  • MySQL 全面指南:从入门到精通——深入解析安装、配置、操作与优化
  • 从阻塞到异步:Java IO 模型进化史 ——BIO、NIO、AIO 深度解析
  • Cherryusb UAC例程对接STM32 SAI播放音乐和录音(下)=>USB+SAI+TX+RX+DMA控制WM8978播放和录音实验
  • 【嵌入式FreeRTOS#补充1】临界区
  • K-means 聚类算法学习笔记
  • 解锁PostgreSQL专家认证增强驱动引擎
  • 打靶日常-sql注入(手工+sqlmap)
  • 136-基于Spark的酒店数据分析系统
  • Python Sqlalchemy数据库连接
  • 紫金桥RealSCADA:国产工业大脑,智造安全基石
  • 【已解决】在Spring Boot工程中,若未识别到resources/db文件夹下的SQL文件
  • JavaScript 防抖(Debounce)与节流(Throttle)
  • 易道博识康铁钢:大小模型深度融合是现阶段OCR的最佳解决方案
  • 【Trans2025】计算机视觉|UMFormer:即插即用!让遥感图像分割更精准!
  • Notepad++插件开发实战指南
  • Radar Forward-Looking Imaging Based on Chirp Beam Scanning论文阅读
  • 《WINDOWS 环境下32位汇编语言程序设计》第1章 背景知识
  • 【Linux】探索Linux虚拟地址空间及其管理机制
  • C# HangFire的使用
  • 概率论基础教程第2章概率论公理(习题和解答)
  • 在 Linux 服务器搭建Coturn即ICE/TURN/STUN实现P2P(点对点)直连
  • HarmonyOS 实战:用 @Observed + @ObjectLink 玩转多组件实时数据更新
  • pyecharts可视化图表-pie:从入门到精通(进阶篇)
  • Python 数据可视化:柱状图/热力图绘制实例解析
  • 概率论基础教程第2章概率论公理
  • 享元模式C++
  • 基于深度学习的零件缺陷识别方法研究(LW+源码+讲解+部署)
  • 力扣hot100 | 普通数组 | 53. 最大子数组和、56. 合并区间、189. 轮转数组、238. 除自身以外数组的乘积、41. 缺失的第一个正数