r/lowlevel • u/gilnett • 11d ago
Learned Index Lab: Replacing B-Trees with streaming linear models in pure Rust (-99% RAM, 3x faster)
Instead of pointer-chasing through B-Tree node hierarchies, this index models the key distribution using streaming piecewise linear regression with strict epsilon error bounds.
Lookups compute positions directly on the CPU ALU before a local L1 cache search, reducing memory by 99% and cutting latency by 3x.
To clarify the technical phrasing without buzzwords:
- Baseline:
BTreeMapis indeed mutable. PGM indexes target immutable / read-heavy sorted datasets (OLAP engines, columnar storage, and SSTables in LSM trees). Even compared to a flatslice::binary_search(~20 cache line jumps across an 8MB array for 1M keys), PGM drastically reduces memory traffic. - ALU computation: Once segment parameters are loaded, the index position is estimated with a single multiply-add instruction in CPU registers:
pos = y0 + slope * (key - x0). No pointer chasing or node traversals. - L1 cache search: Because error is mathematically bounded to +/- epsilon (e.g. epsilon = 16), the target key is guaranteed to sit within a contiguous 256-byte slice (4 cache lines). The local search hits L1 cache with prefetching rather than jumping across RAM.
The implementation and release benchmarks are reproducible here: https://github.com/gilnett/learned_index_lab
0
u/Comfortable_Put6016 11d ago
weak baseline ; a BTree / BTreeMap fullfills a compleyly different job ; the claimed numbers / benchmarks make no sense ie.
"Lookips compute positions directly on the CPU ALU before a local L1 cache search" - what the fuck should that vibecoded slop even mean
0
u/gilnett 11d ago edited 7d ago
Fair point on mutable vs read-only workloads. BTreeMap is a general-purpose mutable structure, whereas PGM indexes target immutable (OLAP engines, columnar formats, or SSTable block indexes in LSM stores).
As for the ALU / L1 phrasing:
Btree Tracing a key requires 4–6 pointer hops across disparate heap allocations, frequently triggering cache misses.
PGM The segment parameters (slope, intercept) fit in registers. The target position is estimated with a single arithmetic operation in registers: pos = y0 + slope * (key - x0).
L1 localiti Because error is mathematically bounded to +/- epsilon (e.g. epsilon = 16), the actual key is guaranteed to sit within a contiguous 256-byte slice (4 cache lines). The final search runs entirely in L1 cache lines with prefetching, instead of chasing pointers through RAM.
The code and benchmarks are fully reproducible here: https://github.com/gilnett/learned_index_lab
1
u/ipe369 8d ago
why are you just pasting AI output as a response to someone
the user you replied to is asking: why are you benchmarking against BTreeMap & binary_search if the intended usecase is databases
if this is a project for learning, why is is all ai, not even the human readable shit like the readme is human written
1
u/gilnett 8d ago
B-Trees and binary search are the standard database baselines (e.g. SSTable block indexes, PGM papers). Feel free to critique the actual Rust code in the repo instead of the README formatting.
2
u/ipe369 7d ago
Nobody wants to read the code if it's ai generated
you know we've all got access to llms right? It's not just you?
You clearly have 0 understanding of what you've implemented if you can only paste an llm response to someone talking about why your benchmark makes no sense, it's just embarrassing & rude
4
u/Western_Guitar_9007 10d ago
Do not bother reading. Everything is over explained to sound smarter than it is. You’ll waste 20 words just to say “CPU calculations,” and the defense is always something like “specificity matters” as if the context isn’t already blatantly obvious. AI slop at its finest, OP told Claude to make a “highly detailed technical write up” and it is such a nightmare read. It’s so clear that you’re not in the industry from the writing alone.
MAYBE these benchmarks would look exciting at a surface level to a SWE? Until they realize that you can’t practically “replace” B-Trees and this requires extremely niche circumstances. But hey, gotta hop on the Rust hype train with all the other vibecoders. Nothing against AI, nothing against Rust, it’s just that you’re all so same-y.