Papers
Topics
Authors
Recent
Search
2000 character limit reached

RadixGraph: Dynamic In-Memory Graph

Updated 11 January 2026
  • RadixGraph is a dynamic in-memory graph system that employs a space-optimized radix tree (SORT) for efficient vertex indexing and supports millions of concurrent operations.
  • It uses a hybrid snapshot–log architecture to manage edge storage, enabling rapid edge updates and low-latency query processing.
  • Empirical results show RadixGraph delivers up to 16x higher update throughput and 40% memory savings, highlighting its scalability and efficiency for dynamic workloads.

RadixGraph is a fully in-memory, dynamic graph data structure designed for high-throughput, space-efficient storage and updating of large-scale dynamic graphs. Its architecture is centered on two core innovations: a space-optimized canonical radix tree—SORT—for vertex indexing, and a hybrid snapshot–log layout per vertex for edge storage, which together enable fast vertex and edge updates, scalable concurrency, and compact memory usage. RadixGraph targets dynamic graph workloads in which both query latency and update throughput are critical, supporting millions of concurrent operations per second while achieving substantial memory reductions versus existing systems (Xie et al., 4 Jan 2026).

1. Formal Model and Components

A RadixGraph G=(V,E)G = (V, E) is maintained via two primary tables alongside specialized data structures:

  • Vertex Table (VT): An extensible array of size NN that holds, for each vertex vv, a unique ID, associated metadata, and a pointer to an adjacency (edge) array.
  • SORT (Space-OPTimized Radix Tree): An x-ary radix tree mapping vertex IDs (arbitrary, possibly non-contiguous 64-bit integers) to their corresponding byte offsets in VT.
  • Edge Array per Vertex (EAvEA_v): For each vVTv \in VT, an array of capacity 2deg(v)2\cdot \deg(v), partitioned into a read-only snapshot segment SvS_v (consolidated neighbor list) and a write-only log segment LvL_v for incremental updates.

This organization enables efficient implementations of graph mutator and query operations while minimizing space overhead.

2. SORT: Space-Optimized Radix Tree for Vertex Indexing

SORT is a canonical ll-layer radix tree where each layer ii (for NN0) splits the incoming vertex ID using a fan-out exponent NN1. Each internal SORT node maintains a pointer array of NN2 entries, and leaf entries map directly to VT offsets. The assignment NN3 is determined by an offline dynamic programming optimizer, minimizing expected pointer-array space subject to NN4, where NN5 for keyspace NN6.

2.1 Algorithmic Operations

Insertion, search, and deletion require NN7 time and operate by segmenting the input ID’s binary representation into substrings of lengths NN8. Brief pseudocode for insertion is as follows:

SvS_v9

Returns “not found” if any pointer is uninitialized during lookup. Deletion involves marking the corresponding VT entry with an MVCC deletion timestamp and recycling its offset via a lock-free freelist.

2.2 Space Analysis

The expected space for SORT is given by:

NN9

where vv0 is the fan-out exponent at layer vv1. A closed-form solution under uniform key distribution leads to the integer program:

vv2

with vv3. The optimizer solves this in vv4 time and vv5 space, yielding in practice an vv6 memory profile except in pathologically sparse ID cases.

3. Hybrid Snapshot–Log Architecture for Edge Storage

In RadixGraph, every vertex’s adjacency list is realized as a composite array vv7 for vv8. The first vv9 entries comprise the snapshot segment EAvEA_v0, capturing the compacted, immutable neighbor set; the next EAvEA_v1 form the write-log EAvEA_v2, which accumulates insertions, deletions, and updates as tuples EAvEA_v3. When EAvEA_v4, a compaction phase merges EAvEA_v5 into a new snapshot EAvEA_v6 and resets EAvEA_v7.

3.1 Edge Update and Neighbor Scan

Edge insertions, deletions, and weight updates are all append-only into EAvEA_v8 and performed via atomic increments of the edge array size. Compactions acquire a per-vertex latch only as necessary. Neighbor-list queries perform a backward scan, outputting the latest valid entry per neighbor not deleted as of the snapshot time. The following pseudocode formalizes insertion:

LvL_v0

Amortized update cost is established as EAvEA_v9 due to the bounded compaction cost over the lifespan of edge log insertions.

3.2 Complexity Guarantees

  • Insert, Delete, Update (Edge): Amortized vVTv \in VT0 per operation.
  • Get Neighbors: vVTv \in VT1, where vVTv \in VT2 is vertex degree.
  • Vertex operations (via SORT): vVTv \in VT3, where vVTv \in VT4 is the ID space.

4. Space and Performance Characteristics

Empirical and analytical results demonstrate the following properties:

  • Update Throughput: Up to vVTv \in VT5 higher than the highest-performing baseline on the twitter-2010 dataset.
  • Memory Efficiency: Achieves an average vVTv \in VT6 reduction in memory usage relative to the closest competing graph store.
  • Analytic Query Speed: Delivers up to vVTv \in VT7 faster 2-hop queries and vVTv \in VT8 faster BFS/SSSP operations.
  • Concurrent Scalability: Maintains stable vVTv \in VT9 latency under intense update and query loads, achieving linear scaling for multi-version concurrency control (MVCC).
  • Total Space: 2deg(v)2\cdot \deg(v)0, where 2deg(v)2\cdot \deg(v)1 is the edge count and 2deg(v)2\cdot \deg(v)2 the vertex count, comprising:
    • SORT: 2deg(v)2\cdot \deg(v)3 (practically, except for extreme ID sparsity)
    • VT: 2deg(v)2\cdot \deg(v)4 bytes plus freelist overhead
    • Edges: 2deg(v)2\cdot \deg(v)5 bytes (2deg(v)2\cdot \deg(v)6 for snapshot + 2deg(v)2\cdot \deg(v)7 for log entries)
    • Duplicate checker: 2deg(v)2\cdot \deg(v)8 bytes (for 2deg(v)2\cdot \deg(v)9 threads, bitmap segment size SvS_v0)
Component Practical Memory Usage Asymptotic Bound
SORT SvS_v1 SvS_v2 (worst-case)
Vertex Table SvS_v3 bytes SvS_v4
Edge Storage SvS_v5 bytes total SvS_v6
Duplicate Check SvS_v7

5. Implementation and Concurrency Design

RadixGraph is realized using modern concurrency primitives and open-source libraries:

  • Intel TBB concurrent_vector powers VT and SORT for efficient, thread-safe segment-doubling.
  • ROWEX-style atomic bitmaps enable lock-free concurrent reads with CAS-synchronized writes.
  • Per-node and per-vertex latching are reserved for infrequent compactions; read operations require no lock acquisition.
  • Multi-version edge arrays create a singly linked version chain for snapshot queries at timestamp SvS_v8, supporting both read-committed and snapshot isolation levels in MVCC.
  • Source code and technical documentation are publicly available at [https://github.com/ForwardStar/RadixGraph].

6. Limitations and Open Challenges

Several avenues for improvement and extension are identified:

  • Transactional Semantics: Only MVCC with read-committed and snapshot isolation is provided; fully serializable transactions are not yet supported.
  • Adaptivity to Skewed ID Distributions: Enhancements are possible via more localized re-optimization of SORT parameters under non-uniform ID assignment.
  • Edge Array Deletion Overhead: Work remains on log-size tuning and space reclamation strategies for delete-heavy workloads.
  • Persistent and Tiered Storage: Integration of an on-disk or hybrid storage tier for scaling beyond main memory is under exploration.

A plausible implication is that further adaptation of SORT to heterogeneous workload characteristics, along with deeper integration into tiered or distributed systems, could extend RadixGraph’s applicability to new domains within large-scale dynamic graph management (Xie et al., 4 Jan 2026).

Definition Search Book Streamline Icon: https://streamlinehq.com
References (1)

Topic to Video (Beta)

No one has generated a video about this topic yet.

Whiteboard

No one has generated a whiteboard explanation for this topic yet.

Follow Topic

Get notified by email when new papers are published related to RadixGraph.