今天的面试题来自言之有物:请阐述下列式存储和行级存储的区别?
01
问题分析
主要想考察面试者对数据库的理解。可以从几个方面做答:行列存储都有哪些数据库,概念以及优缺点。
02
核心问题回答
1、传统的关系型数据库,如 Oracle、DB2、MySQL、SQL SERVER 等采用行式存储法(Row-based),在基于行式存储的数据库中,数据是按照行数据为基础逻辑存储单元进行存储的, 一行中的数据在存储介质中以连续存储形式存在。
2、列式存储(Column-based)是相对于行式存储来说的,新兴的 HBase、HP Vertica、EMC Greenplum 等分布式数据库均采用列式存储。在基于列式存储的数据库中, 数据是按照列为基础逻辑存储单元进行存储的,一列中的数据在存储介质中以连续存储形式存在。
3、行式存储的适用场景:
a. 适合随机的增删改查操作;
b. 需要在行中选取所有属性的查询操作;
c. 需要频繁插入或更新的操作,其操作与索引和行的大小更为相关。
4、列式存储引擎的适用场景:
a. 查询过程中,可针对各列的运算并发执行(SMP),最后在内存中聚合完整记录集,最大可能降低查询响应时间;
b. 可在数据列中高效查找数据,无需维护索引(任何列都能作为索引),查询过程中能够尽量减少无关IO,避免全表扫描;
c. 因为各列独立存储,且数据类型已知,可以针对该列的数据类型、数据量大小等因素动态选择压缩算法,以提高物理存储利用率;如果某一行的某一列没有数据,那在列存储时,就可以不存储该列的值,这将比行式存储更节省空间。
03
问题扩展
OLTP传统关系型数据库和OLAP分布式数据库的不同应用。
1、OLTP传统关系型数据库主要应用,用来执行一些基本的,日常的事务处理。可查询,插入,更新,删除。
2、OLAP分布式数据库它对实时性要求不高,但处理的数据量通常应用于复杂的动态报表系统上。查询为主。
04
结合项目使用
了解行列存储的优劣异同有利于我们在项目中根据实际的合适的场景去选择数据库。
推荐阅读:
【每日一题】Redis缓存穿透、缓存雪崩、缓存击穿?(VIVO)
【每日一题】Flume丢不丢数据?(快手)
【每日一题】说一下Hive怎么优化?(腾讯)
【每日一题】Kafka的分区分配策略(中信银行)