列式数据库有什么(列式数据库有哪些)


假如一张表有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 数据库)。当然梦想总是要有的,万一哪天实现了哩!