绿荫在线
文明满屏

凌晨两点那份馄饨,撞上了几十亿条数据库记录

凌晨两点,你饿得不行,点了一份小馄饨。

三分钟。骑手接单了。你翻个身继续刷短视频——完全没意识到,刚才那一下点击,惊动了几十亿条记录。

这就是数据库。听着高冷,其实一天要跟你打八百次照面。

它没那么玄,就是个记性极好的账本

很多人一听数据库,脑子里蹦出来的是穿格子衫的程序员,和黑乎乎的命令行窗口。其实你手机里就躺着一个。

你用的备忘录、相册、微信聊天记录,背后都有一套数据库在管着。它干的活儿,说白了跟老家小卖部老板娘那个厚账本没本质区别——谁欠了钱、进了几箱汽水、哪天进的,记清楚。

只不过它记得多。多到你想象不出来。

手机本地SQLite数据库存储结构示意图
手机本地SQLite数据库存储结构示意图

账本有页,它有表。账本一行行往下写,它也一行行存,那叫记录。每一列填的是什么,叫字段。你点一次外卖,订单号、地址、金额、下单时间,各占一列,清楚得很。

那Excel不也能干这个?

能。你一个人用,勉强行。

可要是同时有一千万人在下单呢?

人一多,Excel就塌了

人一多,Excel就塌了
人一多,Excel就塌了

想象一下:你们公司那份考勤表,扔在群里大家一起改。三个人同时开,还能凑合。三十个呢?文件开始转圈。三百个?直接卡死,谁改的也说不清了。

数据库解决的,就是这个。

它天生就是给「很多人同时」准备的。一秒钟几十万次读写,它照样不慌。靠什么?靠一整套排队、加锁、事务的机制。你转账给别人一百块,这边扣了那边必须到账,不能扣了没到、也不能到了没扣。这种「要么全成、要么全不成」,就是它吃饭的家伙。

那断电了呢?

它有日志。写到一半停电,重启之后能照着日志一笔一笔对回来。嗯,像收银员下班对账。少了一毛钱都能给你翻出来。

找不到东西的时候,你才想起索引的好

数据库这种东西,平时你是感觉不到它的。什么时候会感觉到?慢。

查一条订单,嗖一下出来了。查另一条,转圈三秒。十有八九,是索引的问题。

打个比方。一本八百页的书,要找「数据库」这个词在哪儿。没目录,你只能一页页翻,翻到天亮。有目录,翻两下就到了。

索引就是那个目录。

数据库B+树索引结构示意图
数据库B+树索引结构示意图

但目录也不是白来的。多一页目录,书就厚一点;多加一个索引,写数据的时候就要多维护一份。所以不是索引越多越好。加错了地方,反而更慢。这行有句老话,大意是:索引不是万能的,没索引是万万不能的。

(这句话是我攒的,别太当真。但意思是对的。)

那些你以为删掉的东西

说个可能让你有点不舒服的事。

你在某个App里点了删除。那条记录,真的就没了吗?

不一定。

后台的数据库里,它可能还躺在那儿,只是被标了一个「已删除」的小记号,前台不再显示给你看罢了。为什么这么干?一是快,真删要牵动一大堆东西;二是保险,万一删错了还能捞回来。

当然也有真的删干净的,各家做法不一样。

再往深一层说,一家大公司的数据,往往不止存一份。主库负责写,从库负责读,还有一份在异地备份着。一个机房出了问题,另一处顶上。

这就像奶茶店生意太好,开了好几家分店。东边那家排长队,就把客人往西边那家引。你站在门口根本分不清哪杯是哪家做的,反正好喝就行。

你说复杂不复杂。

但它就是这么长出来的——不是因为谁闲得慌爱折腾,纯粹是因为人真的太多了,事真的太多了。

你以为只有大厂才用得上它

这里得澄清一个事。

不少人觉得数据库是巨头才用得起的玩意儿,离自己远得很。错。

你写的那点小博客、那个记账的App、甚至你给孩子做的成长记录本软件,背后都可能塞着一个迷你数据库。它不要钱,装在本地,安安静静。某种意义上,它比你手机里那些花哨的图标都老实。

数据库不是什么高墙里的技术。它是被我们用出来的。人一多,需求一涨,它就得长大。

总算要收尾了……也不算收尾

回到凌晨两点那份馄饨。

你楼下那个骑手,风里蹬着车。你手机上那条订单,从你手指点下去那刻起:进门、排队、被写进磁盘、被复制到别的机器、被读出来推给骑手、又被读出来显示成「已接单」——中间隔着好几百毫秒,也隔着几十年一层层堆起来的办法。

你什么都不用知道。它自己默默地跑。

这大概就是数据库最好的样子吧。不出声,不炫耀,你连它叫什么都不知道,它却把你每一次点击都记了下来。

……行,馄饨该到了。我去开门。

免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。如有侵权请联系删除。
文章名称:凌晨两点那份馄饨,撞上了几十亿条数据库记录
文章链接:https://m.lylxb.com/tech/883.html