Feedback on VeloGraphX dynamic graph architecture and benchmark design #576
Replies: 1 comment 2 replies
|
Hi @sauravsingla and welcome to Boost.Graph! 😄 Thanks for posting, and for asking for critical feedback. I can not verify details of your projects, but the main point BGL community would be looking for is the decoupling between algorithms and storage/graph representations. Currently your algorithms are tied to concrete storage types: You've already paid for it once. More importantly, it blocks the experiments you need to sell your project. You want to show two things: that your storage design is good, and when incremental repair beats recomputation. Both are comparisons, and both need to swap the storage while keeping the algorithm constant:
In contrast, BGL never defines an algorithm in terms of a concrete graph type: template <class Graph>
void my_algorithm(Graph& g) {
using Vertex = typename boost::graph_traits<Graph>::vertex_descriptor;
for (auto [it, end] = vertices(g); it != end; ++it) {
for (auto [e, e_end] = out_edges(*it, g); e != e_end; ++e) {
Vertex v = target(*e, g); /* ... */
} } }(structured bindings are C++17, so this exact form won't compile against BGL, which is C++14; there's a Boost equivalent) This is what allows us to keep algorithms constant but swap storage, which is convenient for benchmarks (all BGL stuff in legend test the same algorithm, simply called with different graph representations and storage):
Two mechanisms do the work:
So in BGL parlance we would recommend this:
Practically, BGL abstractions can be complex to develop/maintain, so there is a judgement call to make here, but it's not ours to make 😉 PS: one thing to fix maybe: |

Uh oh!
There was an error while loading. Please reload this page.
Hi Boost.Graph community,
I’m working on VeloGraphX, an open-source C++20 research engine for exact analytics on dynamically changing graphs:
https://github.com/sauravsingla/VeloGraphX
The system combines mutable graph storage, exact localized repair, multicore CPU execution, and runtime selection between incremental execution and full recomputation.
Given the Boost.Graph community’s experience with graph data structures, algorithms and C++ library design, I would greatly value technical feedback on:
The goal is not to claim novelty for established BFS/SSSP/etc. algorithms, but to evaluate the architecture and the conditions under which exact incremental repair is preferable to recomputation.
Critical feedback is particularly welcome.
Thank you.
All reactions