行列存储
行存储
传统的关系型数据库,如 Oracle、DB2、MySQL、SQL SERVER 等采用行式存储法(Row-based),在基于行式存储的数据库中, 数据是按照行数据为基础逻辑存储单元进行存储的, 一行中的数据在存储介质中以连续存储形式存在。
优点:
- 适合随机的增删改查操作;
- 需要在行中选取所有属性的查询操作;
- 需要频繁插入或更新的操作,其操作与索引和行的大小更为相关。
- 适合OLTP场景
缺点:
- 对于字段较多的表,必须读取每一条完整的行记录,从而使得读取效率大大降低。
- 不适合海量数据分析业务
列存储
列式存储(Column-based)是相对于行式存储来说的,新兴的 Hbase、HP Vertica、EMC Greenplum 等分布式数据库均采用列式存储。在基于列式存储的数据库中, 数据是按照列为基础逻辑存储单元进行存储的,一列中的数据在存储介质中以连续存储形式存在。
优点:
- 海量数据的聚合分析场景(OLAP场景):
- 同一列存放在一起,数据类型相同,则更好的进行压缩,这将比行式存储更节省空间。
- 同一列存放在一起,则排序更加方便,基于排序方便,where某一列会更加快。
- 查询高效,无需维护索引,查询过程中能够尽量减少无关IO,避免全表扫描。
不适用场景:
- 数据需要频繁更新的交易场景
- 表中列属性比较少的小量数据库场景
- 不适合做含有删除和更新的实时操作
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Jeremy!