凌晨两点,你饿得不行,点了一份小馄饨。
三分钟。骑手接单了。你翻个身继续刷短视频——完全没意识到,刚才那一下点击,惊动了几十亿条记录。
这就是数据库。听着高冷,其实一天要跟你打八百次照面。
它没那么玄,就是个记性极好的账本
很多人一听数据库,脑子里蹦出来的是穿格子衫的程序员,和黑乎乎的命令行窗口。其实你手机里就躺着一个。
你用的备忘录、相册、微信聊天记录,背后都有一套数据库在管着。它干的活儿,说白了跟老家小卖部老板娘那个厚账本没本质区别——谁欠了钱、进了几箱汽水、哪天进的,记清楚。
只不过它记得多。多到你想象不出来。

账本有页,它有表。账本一行行往下写,它也一行行存,那叫记录。每一列填的是什么,叫字段。你点一次外卖,订单号、地址、金额、下单时间,各占一列,清楚得很。
那Excel不也能干这个?
能。你一个人用,勉强行。
可要是同时有一千万人在下单呢?
人一多,Excel就塌了

想象一下:你们公司那份考勤表,扔在群里大家一起改。三个人同时开,还能凑合。三十个呢?文件开始转圈。三百个?直接卡死,谁改的也说不清了。
数据库解决的,就是这个。
它天生就是给「很多人同时」准备的。一秒钟几十万次读写,它照样不慌。靠什么?靠一整套排队、加锁、事务的机制。你转账给别人一百块,这边扣了那边必须到账,不能扣了没到、也不能到了没扣。这种「要么全成、要么全不成」,就是它吃饭的家伙。
那断电了呢?
它有日志。写到一半停电,重启之后能照着日志一笔一笔对回来。嗯,像收银员下班对账。少了一毛钱都能给你翻出来。
找不到东西的时候,你才想起索引的好
数据库这种东西,平时你是感觉不到它的。什么时候会感觉到?慢。
查一条订单,嗖一下出来了。查另一条,转圈三秒。十有八九,是索引的问题。
打个比方。一本八百页的书,要找「数据库」这个词在哪儿。没目录,你只能一页页翻,翻到天亮。有目录,翻两下就到了。
索引就是那个目录。

但目录也不是白来的。多一页目录,书就厚一点;多加一个索引,写数据的时候就要多维护一份。所以不是索引越多越好。加错了地方,反而更慢。这行有句老话,大意是:索引不是万能的,没索引是万万不能的。
(这句话是我攒的,别太当真。但意思是对的。)
那些你以为删掉的东西
说个可能让你有点不舒服的事。
你在某个App里点了删除。那条记录,真的就没了吗?
不一定。
后台的数据库里,它可能还躺在那儿,只是被标了一个「已删除」的小记号,前台不再显示给你看罢了。为什么这么干?一是快,真删要牵动一大堆东西;二是保险,万一删错了还能捞回来。
当然也有真的删干净的,各家做法不一样。
再往深一层说,一家大公司的数据,往往不止存一份。主库负责写,从库负责读,还有一份在异地备份着。一个机房出了问题,另一处顶上。
这就像奶茶店生意太好,开了好几家分店。东边那家排长队,就把客人往西边那家引。你站在门口根本分不清哪杯是哪家做的,反正好喝就行。
你说复杂不复杂。
但它就是这么长出来的——不是因为谁闲得慌爱折腾,纯粹是因为人真的太多了,事真的太多了。
你以为只有大厂才用得上它
这里得澄清一个事。
不少人觉得数据库是巨头才用得起的玩意儿,离自己远得很。错。
你写的那点小博客、那个记账的App、甚至你给孩子做的成长记录本软件,背后都可能塞着一个迷你数据库。它不要钱,装在本地,安安静静。某种意义上,它比你手机里那些花哨的图标都老实。
数据库不是什么高墙里的技术。它是被我们用出来的。人一多,需求一涨,它就得长大。
总算要收尾了……也不算收尾
回到凌晨两点那份馄饨。
你楼下那个骑手,风里蹬着车。你手机上那条订单,从你手指点下去那刻起:进门、排队、被写进磁盘、被复制到别的机器、被读出来推给骑手、又被读出来显示成「已接单」——中间隔着好几百毫秒,也隔着几十年一层层堆起来的办法。
你什么都不用知道。它自己默默地跑。
这大概就是数据库最好的样子吧。不出声,不炫耀,你连它叫什么都不知道,它却把你每一次点击都记了下来。
……行,馄饨该到了。我去开门。