A high-performance containerized graph computation service in modern C++20, backed by Clang and powered by bulgogi.
Includes Python SDK for easy interaction and automation.
- Implemented in C++20 with LLVM/Clang and
-march=nativeoptimizations - Uses a custom adjacency matrix for SIMD-friendly memory layout
- Graph algorithms supported:
- Degree, degree statistics
- Triangle counting
- Shortest paths (BFS & Dijkstra)
- Betweenness centrality
- Isolated node detection
- HTTP interface via bulgogi — a lightweight Boost.Beast wrapper
- Includes Python SDK with automatic cleanup and alias support
- Containerized with Docker for reproducibility and testing
docker build -t graph-server -f docker/Dockerfile .docker run -p 8080:8080 graph-serverRequires Python 3.10+. All Python client files are in the
python/directory.
from client import Graph, AliasGraph
g = Graph(size=100, bi=True, weighed=True)
g.add_edge(0, 1, weight=3)
print(g.stats())g = AliasGraph("graph.txt")
print(g.stats())
print(g.centrality())The full HTTP API is documented in docs/api.md.
All endpoints support JSON input/output and curl-friendly queries.
- C++20 compiler (Clang ≥ 13 preferred)
- Boost 1.80+ with JSON module (Docker uses 1.88.0)
- JH-Toolkit
1.3.x-LTS - CMake ≥ 3.27 (Docker builds from source)
- Docker (for consistent build & deployment)
- Python 3.10+
requestslibrary (automatically used by the Python SDK)
- SIMD-friendly layout: adjacency matrix avoids pointer chains
ColIterenables efficient column traversal for triangle & centrality calcGraphManagersupports graph ID registration and locking- Python-side cleanup uses
atexit+__del__to reduce memory leaks
.
├── docker/ # Dockerfile and build config
├── Application/ # C++ GraphManager and core logic
├── Algo/ # C++ Graph algorithms
├── Web/ # bulgogi-based HTTP server
├── python/ # Python SDK (GraphClient, AliasGraph)
└── docs/ # API documentation
- Demo graph data sourced from Stanford SNAP
- HTTP framework forked and customized from bulgogi
Developed and maintained by JH / JeongHan-Bae
- GitHub: @JeongHan-Bae
- Framework: bulgogi-framework