<feed xmlns="http://www.w3.org/2005/Atom"> <id>https://aalhour.com/</id><title>ahmad alhour</title><subtitle>aalhour - notes on software, systems, books, and curiosity.</subtitle> <updated>2026-04-08T17:11:59+02:00</updated> <author> <name></name> <uri>https://aalhour.com/</uri> </author><link rel="self" type="application/atom+xml" href="https://aalhour.com/feed.xml"/><link rel="alternate" type="text/html" hreflang="en" href="https://aalhour.com/"/> <generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator> <rights> © 2026 </rights> <icon>/assets/img/favicons/favicon.ico</icon> <logo>/assets/img/favicons/favicon-96x96.png</logo> <entry><title>Making the on-disk state real: SSTables (v1)</title><link href="https://aalhour.com/posts/beachdb-sstables-v1/" rel="alternate" type="text/html" title="Making the on-disk state real: SSTables (v1)" /><published>2026-04-06T00:00:00+02:00</published> <updated>2026-04-06T00:00:00+02:00</updated> <id>https://aalhour.com/posts/beachdb-sstables-v1/</id> <content type="text/html" src="https://aalhour.com/posts/beachdb-sstables-v1/" /> <author> <name></name> </author> <category term="Programming" /> <summary>TL;DR: BeachDB v0.0.3 is out, and it ships SSTables v1: immutable sorted files on disk, a real memtable flush path, on-disk reads, and an sst_dump tool so I can inspect the bytes instead of trusting vibes. This is the milestone where BeachDB stops being an in-memory engine with a WAL and starts having a real disk plane. Code is here. This is part of an ongoing series — see all posts tagged #b...</summary> </entry> <entry><title>The Memtable: where writes go to wait</title><link href="https://aalhour.com/posts/beachdb-memtable-v1/" rel="alternate" type="text/html" title="The Memtable: where writes go to wait" /><published>2026-02-22T00:00:00+01:00</published> <updated>2026-02-22T00:00:00+01:00</updated> <id>https://aalhour.com/posts/beachdb-memtable-v1/</id> <content type="text/html" src="https://aalhour.com/posts/beachdb-memtable-v1/" /> <author> <name></name> </author> <category term="Programming" /> <summary>TL;DR: BeachDB v0.0.2 ships the memtable — a skip list that replaces the placeholder map. This post covers why maps don’t work for LSM storage, how internal key ordering makes “newest version wins” fall out naturally, and why deletes are actually writes. Code is here. This post includes: two interactive demos and a few diagrams to drive the current architecture home. This is part of an ong...</summary> </entry> <entry><title>The syscall I forgot: directory fsync</title><link href="https://aalhour.com/posts/beachdb-the-syscall-i-forgot/" rel="alternate" type="text/html" title="The syscall I forgot: directory fsync" /><published>2026-02-16T00:00:00+01:00</published> <updated>2026-02-16T00:00:00+01:00</updated> <id>https://aalhour.com/posts/beachdb-the-syscall-i-forgot/</id> <content type="text/html" src="https://aalhour.com/posts/beachdb-the-syscall-i-forgot/" /> <author> <name></name> </author> <category term="Programming" /> <summary>TL;DR: I fsynced the WAL file on every write. Crash tests passed. SIGKILL tests passed. Then someone asked: “What if the directory doesn’t know the file exists?” I was one missing syscall away from losing (almost) everything. This is part of an ongoing series — see all posts tagged #beachdb. Our first bug! In my last post, I walked through BeachDB’s Write-Ahead Log: the record format, the...</summary> </entry> <entry><title>Durability is a promise you can't hand-wave: Write-Ahead Log (v1)</title><link href="https://aalhour.com/posts/beachdb-wal-v1-milestone/" rel="alternate" type="text/html" title="Durability is a promise you can&amp;apos;t hand-wave: Write-Ahead Log (v1)" /><published>2026-02-12T00:00:00+01:00</published> <updated>2026-02-12T00:00:00+01:00</updated> <id>https://aalhour.com/posts/beachdb-wal-v1-milestone/</id> <content type="text/html" src="https://aalhour.com/posts/beachdb-wal-v1-milestone/" /> <author> <name></name> </author> <category term="Programming" /> <summary>TL;DR: BeachDB v0.0.1 is out, and it ships the Write-Ahead Log — the thing that makes durability real. This post walks through how fsync actually works with an interactive demo (most tutorials skip this), explains the WAL record format, and shows how I tested crash recovery by killing the database repeatedly. Code is here. This is part of an ongoing series — see all posts tagged #beachdb. ...</summary> </entry> <entry><title>Building BeachDB: A Database from Scratch (in Go)</title><link href="https://aalhour.com/posts/building-beachdb/" rel="alternate" type="text/html" title="Building BeachDB: A Database from Scratch (in Go)" /><published>2026-01-07T00:00:00+01:00</published> <updated>2026-01-07T00:00:00+01:00</updated> <id>https://aalhour.com/posts/building-beachdb/</id> <content type="text/html" src="https://aalhour.com/posts/building-beachdb/" /> <author> <name></name> </author> <category term="Programming" /> <summary>TL;DR: I’m building BeachDB — a toy, inspectable LSM-based storage engine in Go — to stop hand-waving database internals and learn them by building them end-to-end, in public. This kickoff post explains why I’m going down the stateful-systems rabbit hole, lays out goals/non-goals + the “engine → server → Raft cluster” architecture, and includes an interactive LSM-tree visualization to make the ...</summary> </entry> </feed>
