当前位置:首页 > 技术知识 > 正文内容

这可能是行存储和列存储最直白的介绍了

maynowei8个月前 (10-14)技术知识124


行存储 vs 列存储:把数据摆成两排,结果天差地别

想象你走进一家图书馆。

行存储的做法是:把同一本书的每一页按顺序钉在一起,整本书整整齐齐塞进书架。

列存储的做法是:把所有书的第一页抽出来放一起,第二页放一起,第三页放一起……像扑克牌洗牌一样重新码放。

两种摆法听起来只是“顺序”不同,却决定了数据库的“性格”。


行存储:像传统图书馆,找书快,翻页也快

PostgreSQL、MySQL 等日常事务型数据库(OLTP)都选这种摆法。

原因很简单——一条记录的所有字段在磁盘上挨在一起。

当你只想查一台相机的完整信息:

SELECT * FROM camera WHERE model = 'A7R';

数据库只需一次定位,把整条记录的所有字段一次性拖出来,省时省力。

这种场景的特点是:

o 每次只查少量记录(甚至就一条)。

o 但要把这条记录的所有字段都带回去。


列存储:像把书拆了,按页归档,做统计飞快

Google BigQuery、ClickHouse 这类分析型数据库(OLAP)则反其道而行:

把同一列的全部值压成一条长龙,所有列各自成军。

这样做有两个立竿见影的好处:

1. 压缩率更高。

如果“品牌”这一列里 90% 都是 “Sony”,压缩算法能把重复值压到极限。

2. 只扫需要的列。

当你想算个平均价:

SELECT AVG(price) FROM camera;

行存储必须逐行把每条记录的所有字段读出来,再挑出 price;

列存储直接只读 price 那一列,磁盘 I/O 瞬间降到原先的零头。


什么时候混着用,什么时候分家?

o 数据量小时,公司往往“一书多用”:让主库(行存储)既跑交易又跑报表,最多把报表甩给只读副本。

o 数据量大后,报表查询会把主库拖垮。于是大家开始“分工”:

o 交易数据继续待在 PostgreSQL / MySQL;

o 分析报表交给专门的列存储,甚至再加一层数据仓库或 BI 工具。


一句话总结

别把螺丝刀当锤子,也别拿锤子拧螺丝。

选数据库也一样——用对工具,活干得漂亮,人也轻松。

相关文章

惊现!iOS 16.5 kfd 漏洞利用,成功隐藏 Dock 栏

最近!kfd漏洞比较活跃,进展也是很顺利,今天就有大神成功使用 kfd 漏洞实现隐藏 Dock 栏,到底怎么回事?请继续往下看。-- kfd 漏洞说明 --kfd漏洞适合在 iOS 16.2 - 16...

有了这份900多页的Android面试指南,你离大厂Offer还远吗?

前言对于大部分程序员来说,一线互联网是的工作经历是毕生的追求,实际上大厂对于学历的要求远远没有我们想象的那么高,近几年来,互联网公司更注重技术,所以提升自身技术水平才是斩获offer的制胜关键。一线互...

如何优雅地使用嵌入式事件标志组?

事件标志组嵌入式事件标志组是一种在嵌入式系统中广泛使用的同步机制,主要用于实现多任务间的同步与通信。事件标志组是一组事件标志位的集合,每个位代表一个事件是否发生。它允许任务等待特定的事件发生,当事件发...

什么?Java 中的锁还有状态?(java中的锁都有哪些类型)

线程如果锁住了某个资源,致使其他线程无法访问的这种锁被称为悲观锁,相反,线程不锁住资源的锁被称为乐观锁,而自旋锁是基于 CAS 机制实现的,CAS又是乐观锁的一种实现,那么对于锁来说,多个线程同步访问...

6 张图带你彻底搞懂分布式事务 XA 模式

XA 协议是由 X/Open 组织提出的分布式事务处理规范,主要定义了事务管理器 TM 和局部资源管理器 RM 之间的接口。目前主流的数据库,比如 oracle、DB2 都是支持 XA 协议的。mys...

ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务

早上同事用PL/SQL连接虚拟机中的Oracle数据库,发现又报了“ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务”错误,帮其解决后,发现很多人遇到过这样的问题,因此写着这里。也...