专业书籍精读 · Database Internals · 第 1 章

引论与概览:把数据库拆开看

Database Internals · Ch 1 · Alex Petrov · 2019

EN →

这一章讲什么?

你在购物 App 里点一下搜索,一秒出结果;财务同事跑一张全年报表,要等半分钟。两件事都叫「查数据库」,可背后那台机器长得完全不一样。《Database Internals》(数据库内幕)第 1 章不教你怎么用数据库,而是把外壳拆掉,让你第一次看清里面有哪些零件、各管什么。

先打个比方

把数据库想成一家大型仓储超市。你递进去一张购物清单:门口的接待员收下单子;有个店员看懂清单、顺便规划一条最省腿的取货路线;另一个店员照着路线真的跑去拿货。而最底下、也最要紧的一层,是货架本身怎么摆。这一层叫「存储引擎」,也是这本书接下来几百页要死磕的东西。

同样叫「数据库」,差别怎么这么大

怪事来了:MySQL、Redis、ClickHouse 都自称数据库,但你把跑报表的活交给前者、把下单的活交给后者,快慢能差出上百倍。差别不在牌子,在货怎么摆。

一种摆法是按顾客的篮子打包:一个订单的所有信息挨在一起,看某一单一伸手就全拿到——适合下单场景。另一种是按品类上架:所有订单的「金额」堆一处、「日期」堆另一处;要算全年总金额,只去「金额」那堆扫一遍,别的货架碰都不用碰——适合报表,而且同一堆里的东西长得像,压缩起来还格外省地方。

还有一层是放哪儿:全摊在柜台上(内存)伸手就够着,但柜台很贵、一停电就全没;还是老实堆进仓库(硬盘),便宜、断电也还在,代价是每次都得跑一趟。

三个旋钮,拧出了几乎所有数据库

这一章最值钱的,是作者给了三个「旋钮」——拧出不同组合,就是市面上各种存储方式。

一、要不要先攒着。来一笔就往仓库跑一趟,还是先在便签上记几十笔、攒够了一次搬进去?攒着写起来省力得多,但那张便签万一丢了就麻烦,得另想办法保底。

二、改东西的方式。翻回原来那页把旧数字擦掉重写,还是在本子最后另起一行、旧那行作废?前者省地方但每次得先翻页找位置;后者写得飞快,代价是本子越来越厚、得定期整理。

三、要不要排好序。像通讯录那样按字母排好,找「张」开头的一整段能连着翻;还是随手记、靠目录去找。排好序方便一次拿一整段,但每来一条新的都得插进正确位置。

那到底该怎么选

所以这一章真正想让你改掉的,是「哪个数据库最好」这个问法。该问的是:这活是一次看几条、还是一次扫上亿条?读多还是写多?数据热不热、装不装得进柜台?作者还提醒了一句挺扎心的话:别拿别人的跑分选数据库——跑分用的活跟你的多半不是一回事。

诚实的代价是:这三个旋钮没有哪个组合全能——你把写变快,通常就得在读、在占地方、或者在事后整理的开销上还回去。

一句话记住

数据库不是黑箱,它是四层:接单 → 规划路线 → 跑去拿 → 东西怎么摆。决定它擅长什么的是最底下那层。而摆法只有三个旋钮:写之前攒不攒、改的时候擦掉重写还是另起一行、要不要按顺序排好。选数据库,其实就是在选这三个旋钮的组合。

想看真正的解剖图、具体量级和落地案例? → 切到精读版