行存储

传统的关系型数据库,如 Oracle、DB2、MySQL、SQL SERVER 等采用行式存储法(Row-based),在基于行式存储的数据库中, 数据是按照行数据为基础逻辑存储单元进行存储的, 一行中的数据在存储介质中以连续存储形式存在。

优点:

  1. 适合随机的增删改查操作;
  2. 需要在行中选取所有属性的查询操作;
  3. 需要频繁插入或更新的操作,其操作与索引和行的大小更为相关。
  4. 适合OLTP场景

缺点:

  1. 对于字段较多的表,必须读取每一条完整的行记录,从而使得读取效率大大降低。
  2. 不适合海量数据分析业务

列存储

列式存储(Column-based)是相对于行式存储来说的,新兴的 Hbase、HP Vertica、EMC Greenplum 等分布式数据库均采用列式存储。在基于列式存储的数据库中, 数据是按照列为基础逻辑存储单元进行存储的,一列中的数据在存储介质中以连续存储形式存在。

优点:

  1. 海量数据的聚合分析场景(OLAP场景):
  2. 同一列存放在一起,数据类型相同,则更好的进行压缩,这将比行式存储更节省空间。
  3. 同一列存放在一起,则排序更加方便,基于排序方便,where某一列会更加快。
  4. 查询高效,无需维护索引,查询过程中能够尽量减少无关IO,避免全表扫描。

不适用场景:

  1. 数据需要频繁更新的交易场景
  2. 表中列属性比较少的小量数据库场景
  3. 不适合做含有删除和更新的实时操作