列存储概述
传统的关系型数据库,如Oracle、DB2、SQL Server、MySQL、Informix等都采用行存储。在行式存储中,数据表中的每条数据以记录行的形式把数据存放在文件系统中,对于一条数据记录,在物理存储时也是相邻位置存储的,相对应的操作也是基于行的基础上对数据进行操作。
行存数据库适用于OLTP场景,主要用于数据的插入、更新、删除、数据一致性操作等操作。而在使用传统数据库进行数据分析时,经常遇到多表关联的场景,需要根据筛选字段获取大量的数据,并进行join操作。此时,对磁盘IO产生了巨大的压力。因此,数据库市场上产生了列式数据库,比如Hbase、HP Vertica、EMC Greenplum等。
列存储原理
在列存储数据库中,每张逻辑数据表横向分成多个数据列,每个数据列纵向分成多个存储单元。
列存储的技术特点包括:
• 表的每一列物理上分开存储;
• 每一列是以数据包(DC)为单位组织的;
• 只有访问查询所涉及的列产生I/O;
• 查询没有涉及的列不需要访问,不产生I/O;
• 表列数越多,列存I/O效率越高,越有性能优势。
很显然,列存储在写入效率、保证数据完整性上都不如行存储,它的优势是在数据读取过程中,不会产生冗余数据,这对数据完整性要求不高的大数据处理领域尤为重要。
列存储适用场景
一般来说,一个OLAP类型的查询可能需要访问几百万甚至几十亿个数据行,且该查询往往只关心“时间、商品、销量”等少数几个数据列。而列式数据库只需要读取存储着“时间、商品、销量”的数据列,而行式数据库需要读取所有的数据列。因此,列式数据库极大地提高了OLAP大数据量查询的效率。
结合列存数据库的特点,适用场景主要包括:
欢迎大家关注公号“SalesEngineers”,获取更多资讯。