Skip to content
Tech News
← Back to articles

Algorithms on billion-scale graph using 10GB RAM: I love DataFusion

read original more articles
Why This Matters

This article highlights the scalability of DataFusion for processing billion-scale graphs with just 10GB of RAM, demonstrating that complex algorithms like PageRank can be efficiently executed on large datasets. The approach emphasizes memory management and disk offloading, making large-scale graph analytics more accessible and cost-effective for the tech industry and consumers. Optimizations such as range partitioning and fused join-aggregation could further enhance performance, paving the way for more efficient big data processing solutions.

Key Takeaways

An easy part. I used SMJ just to proove the scalability but it is also possible to use HJ because vertices are small (32M) and PageRank state is trivial: one column rank ( f64 ), one column out-degree ( i64 ), on participation flag ( bool ). With HJ it is faster. PageRank works over directed edges so it deos not require to symmetrize the graph. Just offload edges to disk and iterate by updating state (and offload to disk as well to break the lineage) until converged.

The compute time is long: around 30 minutes for 15 full iterations. But the setup is about memory, not speed. Give it some more realistic numbers for 1B graph analytics and it will work fast enough (I tested). I checked numbers against the ground truth: 100% match (with 0.0001 tolerance). A lot of optimizations can be done here as well: in theory it is possible to bucket edges by range or do kind of range-partitioing, so the SMJ does not need to sort again the biggest join-side (edges) on each iteration to get triplets. As well I'm not 100% parquet is the best choice here. Also would be interesting to try to fuse join+agg: each Pregel iterarion is like edges <-[join] nodes-state -> group by + agg -> [join] -> nodes-state -> update nodes-state . If I can fuse together the first two stages it can be a huge win from the performance point of view. Meanwhile I do not know yet how to do it in DataFusion: a lot of thing to learn.