行存储和列存储

行存储和列存储是目前数据库存储的两种方式,行存储一般用于RDMS,列存储一般用于NoSQL。

1 结构布局

行存储数据排列

/ Column 1 Column 2 Column 3 Column 4 Column 5
Row 1 Data 1-1 Data 1-2 Data 1-3 Data 1-4 Data 1-5
Row 2 Data 2-1 Data 2-2 Data 2-3 Data 2-4 Data 2-5
Row 3 Data 3-1 Data 3-2 Data 3-3 Data 3-4 Data 3-5

列存储数据排列

/ Row 1 Row 2 Row 3 Row 4 Row 5
Column 1 Data 1-1 Data 2-1 Data 3-1 Data 1-4 Data 1-5
Column 2 Data 1-2 Data 2-2 Data 3-2 Data 2-4 Data 2-5
Column 3 Data 1-3 Data 2-3 Data 3-3 Data 3-4 Data 3-5
Column 4 Data 1-4 Data 2-4 Data 3-4 Data 3-4 Data 3-5
Column 5 Data 1-5 Data 2-5 Data 3-5 Data 3-4 Data 3-5

2 对比

数据写入

  行存储的写入是一次完成,可以保证写入过程的成功或者失败,数据的完整性因此可以确定。列存储需要把一行记录拆分成单列保存,写入次数明显比行存储多。行存储在写入上占有很大优势。

数据修改

  数据修改也是一次写入过程,仍然是行存占优。

数据读取

  数据读取时,行存储通常将一行数据完全读出,如果只需要其中几列数据的情况,就会存在冗余列。列存储的每一列数据类型是相同的,比如一列都是int。行存储一行记录中保存了多种类型的数据,数据解析需要在多种数据类型之间频繁转换,这个操作很消耗CPU,增加了解析的时间。

优缺点

列存储优点:

  • select查询时,不需要的列不会被读取,大幅提高查询性能。
  • 同一列的数据容易被压缩。
  • 缓存命中率高,活跃的数据缓存到内存中。
  • 查询时批处理模式,性能高。

列存储缺点:

  • 写入效率低。
  • 保证数据完整性上不如行存储。

行存储优点:

  • 写入一次完成,时间短。
  • 能够保证数据完整性。

行存储缺点:

  • select查询时,仅查询一列也需要把整个数据行都读取到内存。
  • 产生冗余数据。
大数据分析选择列存储。