列式存储
- 所谓行式存储,指存储结构化数据时,在底层的存储介质上,数据是以行的方式来组织的,即存储完一条记录的所有字段,再存储下一条数据的所以字段,以此类推;
- 所谓列式存储,指存储结构化数据时,在底层的存储介质上,数据时以列的方式来组织的,即存储完若干条记录的首个字段后,再存储这些记录的第二个字段,然后是这些记录的第三个字段,以此类推,当这些记录的所有字段存储完毕后,再按照这种方式,组织存储下一批若干条记录的所有字段;
-
OLTP使用行存:通常我们增删改查是针对实体进行的,每一个实体在物理层对应一行数据也比较合理;
-
OLAP使用列存:通常用于对数据进行统计、分析等查询,列式存储可以让我们对特定列进行筛选和分析统计,更加快速,尤其是在几百上千的大宽表上进行分析筛选时优势更明显;并且列式存储由于同一列的数据都是一个类型,压缩算法用于更高的压缩率,降低磁盘的存储空间。
优势
- AP查询更快:在OLAP场景下,列式存储比行数存储快一个数量级。
- 对于只读查询,列式存储的IO效率更高,因为它们只需要从磁盘或者内存中读取查询所需要的那些列字段。
- 自动索引:基于列式存储,每一列本身就相当于索引,无需额外的数据结构来创建索引。
- 促使列式存储对OLAP性能有大幅提升的因素:压缩、延迟物化、块遍历、隐式连接;
劣势
- 对于列式存储,写入效率差一点
- 针对行式存储的一行数据来说,列式存储需要将一行数据分开存储,涉及多次磁盘操作。
行存VS列存
行存
- 数据查询会带出无用的列;
- 适合普通数据库;
- 写入效率高,整行写入;
- 需要单独设计索引,占用额外存储空间;
列存
- 只读取查询的列;
- 适合数据仓库、数据分析;适合海量数据;
- 写入效率低;
- 天然自动索引;
信心最重要