尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

列式存储为何能实现秒级聚合?从原理到ClickHouse选型实践

列式存储为何能实现秒级聚合?从原理到ClickHouse选型实践 做大数据开发这些年我越来越觉得列式存储是被低估的一项基础能力。很多人用着Hive、Spark、ClickHouse却说不清楚底层数据到底怎么组织的。直到有一次我发现同一张几千万行的表用行式存储跑聚合查询要等十几秒改成列式存储后一秒内出结果那一刻我才真正意识到列式存储不是优化手段而是分析型大数据场景的底层根基。这篇文章就把我对列式存储的完整理解整理出来包括核心机制、引擎选型、实操案例和避坑经验希望对正在做数据查询加速的朋友有参考价值。1. 列式存储的本质从物理布局理解性能差距1.1 行式存储与列式存储的差异要理解列式存储最直观的方式是回到物理存储层面。传统关系型数据库比如MySQL、PostgreSQL默认采用行式存储数据按行连续写入磁盘。假设一张用户表有30个字段一行的数据会完整写在一个或连续几个数据页里。这种布局对“查某个用户的所有字段”这种OLTP场景非常友好因为一次IO就能拿到完整记录。列式存储则完全反过来。它把表的每一列单独连续存放同一列的所有值紧密排在一起。比如用户表有id、name、age、city四个字段列式存储会在磁盘上形成四个独立的数据区域每个区域只存某一列的全部值。两者的物理差异带来截然不同的IO模式。行式存储的IO粒度是一整行哪怕你只查所有用户的age列磁盘也要把每一行的其他字段一起读上来。列式存储的IO粒度是一整列你查age就只读age对应的区域其他列的数
返回列表