Performance Comparison of Graph Representations Which Support Dynamic Graph Updates
Subhajit Sahu
TL;DR
The paper tackles the performance challenges of dynamic graph processing, where frequent edge and vertex updates demand memory-efficient, scalable representations. It introduces DiGraph, a directed graph implementation powered by the Concurrent Power-of-2 Arena Allocator (CP2AA) and a Struct-of-Arrays layout with contiguous edge storage, enabling fast batched updates and efficient traversal. Through extensive experiments across 12 large, real-world graphs, DiGraph shows substantial speedups over PetGraph, SNAP, GraphBLAS, cuGraph, and Aspen for loading, cloning, deletions, insertions, and k-step reverse walks, while also leveraging lazy copying and snapshotting advantages in competing systems. The findings demonstrate significant potential for scalable dynamic graph workloads and highlight practical trade-offs between in-place updates and graph-versioning approaches, with future work focusing on optimizing small-batch updates.
Abstract
Research in graph-structured data has grown rapidly due to graphs' ability to represent complex real-world information and capture intricate relationships, particularly as many real-world graphs evolve dynamically through edge/vertex insertions and deletions. This has spurred interest in programming frameworks for managing, maintaining, and processing such dynamic graphs. In this report, we evaluate the performance of PetGraph (Rust), Stanford Network Analysis Platform (SNAP), SuiteSparse:GraphBLAS, cuGraph, Aspen, and our custom implementation in tasks including loading graphs from disk to memory, cloning loaded graphs, applying in-place edge deletions/insertions, and performing a simple iterative graph traversal algorithm. Our implementation demonstrates significant performance improvements: it outperforms PetGraph, SNAP, SuiteSparse:GraphBLAS, cuGraph, and Aspen by factors of 177x, 106x, 76x, 17x, and 3.3x in graph loading; 20x, 235x, 0.24x, 1.3x, and 0x in graph cloning; 141x/45x, 44x/25x, 13x/11x, 28x/34x, and 3.5x/2.2x in edge deletions/insertions; and 67x/63x, 86x/86x, 2.5x/2.6x, 0.25x/0.24x, and 1.3x/1.3x in traversal on updated graphs with deletions/insertions.
