> 日常维修
什么是列式数据库产品(列式数据库原理)
导语:什么是列式数据库
假如一张表有50个字段f1 ~ f5, 查询前5个字段进行数据分析可以按照以下来写SQL
SELECT f1, f2, f3, f4, f5 FROM tbl_name
行式存储数据查询首先会逐行扫描, 并获取每行的所有50个字段,再从每一行数据中返回f1 至 f5的数据。不难发现尽管只需要前面5个字段, 但是由于数据是按照行进行组织,实际上是扫描了所有的字段。
列式存储查询直接获取f1 至 f5 这5列数据,避免多余的数据扫描。
数据存储方式传统行式DB存储传统的行式DB中,处于同一行的数据总是会存储在一起
传统行式DB
常见的行式数据库系统有:MySQL、Postgres、SQL Server 等
列式DB存储单列的数据存储在一起
列式DB
常见的列式数据库有: ClickHouse、Vertica、Infobright、MonetDB、 Druid、Hbase等
查询性能对比对于大部分的查询而言,列式数据库的查询速度至少比行式快100倍不止。
行式DB查询
列式DB查询
Q&A 为啥列式DB查询要比行式快?I/O一般针对分析类查询,通常只读取一小部分的列数据按每列分别存储,数据更容易压缩——降低IO体积不需要预留空间,所有数据完全密集存储。不需要额外字段——比如行式rowid之类。普通的行式数据压缩比率小5:1, 而列式数据库压缩可达到30:1. Vertical 压缩比率 甚至达到了 60: 1
CPU采用向量引擎,当执行一条需要处理大量行数据的SQL查询时,在整个向量上执行所有操作将比在每一行上执行所有操作更加高效。
列式数据优缺点列式数据库一开始就是为数据仓库的数据分析( OLAP ) 而生。 与行式数据库相比当然也有一定的优缺点
优点极高的装载速度 —— 最高可以等于所有硬盘IO的总和,基本上极限
适合大量数据查询 / 吞吐量高
高效的压缩率,不仅节约存储空间也节省了内存和cpu的消耗
非常适合做聚合查询
缺点一般不支持事务
不适合随机更新
不适合小数据查询
对高并发支持有限
不同的数据存储方式适用于不同的业务场景。互联网没有银弹,没有一个系统能够应用于所有的业务场景(TIDB 也不例外 —— HTAP 数据库)。当然梦想总是要有的,万一哪天实现了哩!
本文内容由小姿整理编辑!