# Bookshelf

Books and papers on databases, operating systems and distributed systems, with one line on why each is here.

> Canonical URL: https://sudohulk.com/bookshelf
> Author: Vignesh Kumar A <vignesh@sudohulk.com>
> Licence: CC BY 4.0. Quote freely, cite the canonical URL.

---

Books and papers, with one line on why each is here. No star ratings; "I would hand it to a friend" is the one mark.

## Reading now

- [Consensus on Transaction Commit](https://www.microsoft.com/en-us/research/publication/consensus-on-transaction-commit/), Jim Gray, Leslie Lamport (2006, ACM TODS 31(1)): Two-phase commit and Paxos commit side by side, with the failure cases spelled out. Directly relevant to my 2PC posts. (reading; I would hand it to a friend)
- [Designing Data-Intensive Applications](https://dataintensive.net), Martin Kleppmann, Chris Riccomini (2026, 2nd ed.): The overview book. Each of the others on this shelf goes deeper into one of its chapters. (reading; I would hand it to a friend)
- [The Rust Programming Language](https://doc.rust-lang.org/book/), Steve Klabnik, Carol Nichols: The book my learn-rust repo follows. Ownership finally made sense on the second read. (reading)

## Databases

- Database Internals, Alex Petrov (2019): Storage engines in the first half, distributed systems in the second. Read the first half twice. (finished; I would hand it to a friend)
- [PostgreSQL 14 Internals](https://postgrespro.com/community/books/internals), Egor Rogov (2023): The deepest free book on PostgreSQL. English edition covers 14; the ideas hold for 17. (reference; I would hand it to a friend)
- [The Internals of PostgreSQL](https://www.interdb.jp/pg/), Hironobu Suzuki: Free online, and the skeleton of my WAL post. Chapter 9 alone is worth a week. (reference; I would hand it to a friend)

## Operating systems and Linux

- Grokking Algorithms, Aditya Bhargava (2016): Pictures first. I worked every problem in Java; the repo is under Projects. (finished)
- Linux Kernel Development, Robert Love (2010, 3rd ed.): Shorter and more readable than Bovet and Cesati; a good first kernel book. (want to read)
- [Operating Systems: Three Easy Pieces](https://pages.cs.wisc.edu/~remzi/OSTEP/), Remzi H. Arpaci-Dusseau, Andrea C. Arpaci-Dusseau: Free, funny, and the best explanation of virtual memory I have read. The persistence chapters are a bonus for database people. (reference; I would hand it to a friend)
- The Linux Programming Interface, Michael Kerrisk (2010): The syscall boundary, one chapter per subsystem. The reference I reach for when a system call surprises me. (want to read)
- Understanding the Linux Kernel, Daniel P. Bovet, Marco Cesati (2005, 3rd ed.): Covers 2.6, so pair it with Love's book and a current source tree. Still the clearest on memory management. (want to read)

## Papers

- [Clay: Fine-Grained Adaptive Partitioning for General Database Schemas](http://www.vldb.org/pvldb/vol10/p445-serafini.pdf), Marco Serafini, Rebecca Taft, Aaron J. Elmore, Andrew Pavlo, Ashraf Aboulnaga, Michael Stonebraker (2016, PVLDB 10(4)): How to move hot data between shards without a human choosing the partitions. Clear enough to implement from. (finished; I would hand it to a friend)
- [Spanner: Google's Globally-Distributed Database](https://research.google/pubs/spanner-googles-globally-distributed-database-2/), James C. Corbett, Jeffrey Dean, et al. (2012, OSDI 2012): TrueTime and external consistency. Read it after you have built a two-phase commit and felt the pain. (finished; I would hand it to a friend)
