当前位置:首页 > 行业动态 > 正文

按行存储与按列存储过程

按行存储逐行顺序存放数据,便于行遍历;按列存储以列为单位组织数据,同列连续存储,压缩高效,适合

按行存储过程

  1. 数据组织
    数据以行为单位连续存储,同一行的所有列值在物理上相邻,用户表的一行数据包含ID姓名年龄等字段,这些字段的值按顺序存储在磁盘或内存中。

  2. 写入流程

    • 插入一条记录时,将所有列的值按顺序写入一个连续的存储块。
    • 示例:插入(1, "张三", 25),存储结构为1 | 张三 | 25(表示分隔符)。
  3. 读取流程

    • 读取单行数据时,直接定位到该行的起始位置,顺序读取所有列的值。
    • 示例:查询ID=1的用户信息,直接读取1 | 张三 | 25并解析为完整行。
  4. 特点

    • 优势:单行查询效率高,适合频繁的增删改操作(如OLTP系统)。
    • 劣势:涉及多列的查询需要读取整行,浪费带宽和计算资源。

按列存储过程

  1. 数据组织
    数据以列为单位连续存储,同一列的所有值在物理上相邻,用户表的ID列、姓名列、年龄列分别独立存储。

  2. 写入流程

    • 插入一条记录时,将每个列的值分别追加到对应列的存储区域。
    • 示例:插入(1, "张三", 25)ID列追加1姓名列追加张三年龄列追加25
  3. 读取流程

    • 读取单列数据时,直接扫描该列的存储块。
    • 示例:查询年龄>20的用户,只需读取年龄列的所有值并过滤。
    • 行重组:若需完整行数据,需从多列存储块中拼接(如读取ID=1的完整行,需从ID姓名年龄列分别获取值)。
  4. 压缩优化

    • 同一列的数据类型一致,适合高效压缩(如Run-Length Encoding、字典编码)。
    • 示例:年龄列的数据[25, 25, 26, 25]可压缩为25×3, 26×1
  5. 特点

    • 优势:适合聚合查询(如SUM、AVG),减少IO开销(如只读需要的列)。
    • 劣势:单行查询需跨列拼接,写入时可能产生额外开销(如数据对齐)。

核心差异对比表

特性 按行存储 按列存储
存储结构 行连续存储 列连续存储
查询效率 单行查询快,多列查询慢 单列查询极快,多列查询需拼接
压缩效果 压缩率低(混合类型数据) 压缩率高(单一类型数据)
适用场景 OLTP(事务处理) OLAP(数据分析)
写入性能 高(单次写入一行) 低(需写入多列)
更新成本 低(修改单行) 高(可能涉及多列块)

相关问题与解答

问题1:为什么列存储更适合数据分析?

解答
列存储将同一列的数据连续存储,且支持高效压缩,在数据分析场景(如聚合、统计)中,查询通常只需访问少数列,列存储可减少IO开销,计算某列的平均值时,只需读取该列的数据,无需加载整行数据,压缩后的数据块更小,进一步提升读取速度。

问题2:行存储和列存储能否结合使用?

解答
可以结合使用,某些数据库(如ClickHouse)采用列式存储,但对数据更新采用行级操作(如主键索引),另一种方式是混合存储,例如将热数据(高频更新)按行存储,冷数据(历史数据)按列存储,这种设计兼顾了事务处理和分析的需求

0