LEYLINE / Distributed graph database
CSR on object storage

Only the hops
you actually take.

Leyline keeps the graph as immutable CSR segments in S3 and runs traversal on stateless compute. A two-hop query reads two neighbourhoods, not two copies of your graph — so the bill tracks the walk, not the size.

01Storage

Adjacency as a tape, not a pointer chase.

Every vertex's neighbours sit contiguously in one array. offsets[v] and offsets[v+1] bracket the slice, so expanding a vertex is one read at a known length — no walking the structure to find the structure. Segments are sealed at write time, so any reader can cache one forever and no reader ever takes a lock.

segment seg_0f2a · expand(v0) replaying
offsets[]
neighbours[]
slice [0, 3)3 neighbours resolved in one contiguous read
IMMUTABLE

Write once, cache forever

A segment is sealed when it lands. Readers never coordinate, never invalidate, and never see a torn view.

durabilityS3 · 11×9s
PARTITIONED

Locality by community

Vertices walked together get written together, so most hops land inside the segment they started in.

segment target≤ 64 MiB
STATELESS

Compute holds nothing

No cluster to keep warm, no rebalance, no leader election. Traversal fans out per query and then disappears.

runtimeLambda / Fargate
02Query

Cypher you already know, planned against segments.

A supported subset — MATCH, variable-length paths, WHERE, aggregation, shortestPath. The planner's unit of work isn't a table scan, it's a segment fetch, and it names the ones it intends to touch before it touches them.

query
 
plan
SeekVertex  label=Account1 seg
Expand  :TRANSFER →2 seg
Expand  :TRANSFER →5 seg
Filter  b.risk > 0.80 seg
Aggregate  count(*)0 seg
Produce  10 rows8 seg
03Cost

The bill is a function of the walk.

Graph databases usually price the graph: resident memory for all of it, whether or not you ever query it. Leyline prices the traversal. A graph you don't walk this month costs object storage and nothing else.

Segments touched
8
of 4,096 in the graph. The other 4,088 were never fetched.
Bytes read
31 MiB
Exactly what the query paid for — nothing was read speculatively.
Resident graph
0 GiB
Nothing stays warm between queries. Nothing to size.
Idle cost
$0.023/GiB·mo
S3 standard. That is the entire floor.