Write-Ahead Log:数据库如何在断电瞬间守住数据最后一道防线

1992年3月,ACM Transactions on Database Systems发表了一篇题为《ARIES: A Transaction Recovery Method Supporting Fine-Granularity Locking and Partial Rollbacks Using Write-Ahead Logging》的论文。这篇由IBM Almaden研究中心的C. Mohan等人撰写的文章,定义了此后三十余年数据库崩溃恢复的基本范式。 ...

13 min · 6282 words

Git的隐藏架构:为什么这个「笨」内容寻址系统统治了版本控制二十年

2005年4月6日,Linus Torvalds在Linux内核邮件列表中写道:「我一直在考虑自己写一个SCM。」第二天,他做出了第一个提交——用Git自己提交Git的代码。这个最初只有约10,000行代码的工具,在接下来二十年里彻底改变了软件协作的方式。 ...

13 min · 6135 words

事务隔离级别为何成为数据库最被误解的概念

医院值班系统中,两位医生同时尝试放弃自己的值班班次。每个医生在操作前都会检查:是否至少还有另一位医生在值班?检查结果都显示"是",于是两人都放心地提交了更新。最终结果:当晚没有任何医生值班。 ...

10 min · 4538 words

Raft协议的"实现陷阱":为什么论文读懂了,代码却写不对

2014年,斯坦福大学的Diego Ongaro和John Ousterhout在USENIX ATC会议上发表了一篇题为《In Search of an Understandable Consensus Algorithm》的论文。这篇论文提出了Raft协议,声称比Paxos"更容易理解"。论文开篇直言:Paxos"非常难以理解",而Raft的设计目标就是提供"更好的可理解性"。 ...

15 min · 7104 words

没有完美的数据结构:从时空权衡到缓存友好的选择之道

1953年,IBM工程师Hans Peter Luhn在一份内部备忘录中提出了一个改变计算机科学进程的想法:用哈希函数将数据映射到固定位置,实现快速查找。这个被称为"哈希表"的数据结构,至今仍是计算机领域应用最广泛的发明之一。 ...

11 min · 5015 words

协程调度:从用户态线程到Go GMP模型的二十年演进

1963年7月,Communications of the ACM发表了一篇题为《Design of a Separable Transition-Diagram Compiler》的论文。作者Melvin Conway提出了一个当时看来颇为新奇的概念:将编译器的词法分析阶段分解为多个"可以互相挂起和恢复"的执行单元。他将这些执行单元称为"coroutine"——协程。 ...

13 min · 6241 words

MESI协议:多核处理器如何在"看不见"彼此的情况下保持数据一致

1983年,James Goodman在IEEE COMPCON会议上发表了一篇题为《Using Cache Memory to Reduce Processor-Memory Traffic》的论文。这篇论文首次提出了"监听"(Snooping)的概念——让多个处理器通过监听共享总线上的事务来维护缓存一致性。当时的计算机界正处于从单处理器向多处理器过渡的关键时期,Goodman的发现为后来的对称多处理(SMP)系统奠定了基础。 ...

13 min · 6396 words