The series' tree, green and flowering on one side and amber on the other, with a sundial at its foot and a small temple whose pediment reads BY5

Resolver v3: a temporal B+ tree for FoundationDB's conflict history, from routing to reclamation

FoundationDB rejects a transaction once its read version is more than five seconds old because the resolver keeps only that much write history. Resolver v3 replaces that history with a temporal B+ tree under a memory budget and processes each batch in two phases: one descent routes every read and write begin together and checks the reads, then the accepted writes are applied in key order by cooperative tasks that search and prefetch ahead of a single writer. Under the same 6 GiB budget, v3.8 retains at least 582.9 seconds of conflict history after reclamation begins—2.20× FoundationDB’s calibrated 265-second window. The 5,400-second trace replays in 0.76× FoundationDB’s time on Intel and in comparable time on AMD. These timing comparisons cross sessions: v3.8 used HugeTLB pages, while the archived references used ordinary memory.

November 6, 2026 · 49 min · Ricardo Jimenez-Peris
The series' tree inside a hall of gilded mirrors: green and flowering on one side, amber on the other, a sundial and crates of fallen leaves at its foot, four squirrels running along glowing routes that part at each fork, and the whole scene repeated smaller and smaller in the mirrors on every side

Resolver v2: recursive partitioning, grouped reads, and prefetching in the temporal B+ tree

Resolver v2 delivers about 2.1× v1’s point-read throughput and 1.5× its range-read throughput in the Intel standalone benchmark. In a synthetic 10,000-read example with uniformly distributed begins, recursive partitioning reduces internal-node routing comparisons by 56%; including the initial leaf searches, the total comparison count falls by 44%. Grouped reads also share predecessor lookup and avoid repeating resolved begin comparisons during the leaf scan. Prefetching brings upcoming nodes and keys toward the cache while other tasks advance, creating distance between each hint and its use to hide memory latency. Writes remain sequential.

October 31, 2026 · 25 min · Ricardo Jimenez-Peris
A tree shaped like a B+ tree: a short trunk, a few thick branches and a flat, dense canopy; the leaves grow green on one side, turn amber toward the other and fall into identical crates beside a sundial

Resolver v1: a temporal B+ tree for FoundationDB's conflict history

FoundationDB keeps conflict history for five seconds. Resolver v1 keeps it under a memory budget instead, in a temporal B+ tree whose nodes and key bytes share one pool. Under 6 GiB it retains 2.2× the history of the original skip list, at 2.7× the resolution time; this post explains the design and the measurement.

October 25, 2026 · 9 min · Ricardo Jimenez-Peris

Beyond 5s: extending FoundationDB past its five-second window

FoundationDB rejects a transaction once its read version is more than five seconds old. Beyond 5s replaces that fixed window with budgets, component by component: the resolver’s conflict history, the storage server’s version retention, and the protocol that coordinates them. This page lists the milestones in order.

October 25, 2026 · 3 min · Ricardo Jimenez-Peris
An isometric city where a transaction travels FoundationDB's commit path: GRV proxy, commit proxy, resolvers, TLogs and storage servers

FoundationDB: the architecture, seen through a transaction

FoundationDB separates transaction processing from storage. Rather than list its components, this post follows a single transaction through them, from the moment it starts to the moment its writes become readable.

September 12, 2026 · 7 min · Ricardo Jimenez-Peris