用 rustworkx 取代 NetworkX:Python 圖運算的 Rust 加速
用 rustworkx 取代 NetworkX:Python 圖運算的 Rust 加速
當 NetworkX 成為效能瓶頸時,用 rustworkx(Rust 實作、Python API)提速 10-100 倍。本文更新為「現行 repo 實作」:預設使用 rustworkx,缺少依賴時 fallback 到 NetworkX。
為什麼要換 NetworkX
| 情境 | NetworkX | 需求 |
|---|---|---|
| 小型圖 (<1000 nodes) | ✅ 足夠 | 不需換 |
| 大型圖 (>10K nodes) | 🐢 慢 | 考慮換 |
| 即時查詢 (<10ms) | ❌ 難達成 | 需要換 |
| 批量圖遍歷 | 🐢 瓶頸 | 建議換 |
我們的 GraphRAG 系統需要在每次查詢時做 2-hop 遍歷,NetworkX 約需 50ms;改用 rustworkx 後可顯著降低延遲。
技術選型
為什麼改用 rustworkx(現行)
| 方案 | 優點 | 缺點 |
|---|---|---|
| rustworkx | 安裝最簡單(pip/uv)、Rust 速度、API 直接給 Python 用 | 不是全功能圖資料庫 |
| Petgraph + PyO3 | 可完全客製化、理論上可更極致 | 需要維護 Rust binding 與發佈流程 |
| graph-tool | 很快 | 安裝與環境相依性高 |
| igraph | 成熟、Leiden 生態常見 | API/資料結構不一定貼合需求 |
本 repo 的取捨是:優先把「查詢熱路徑」變快、同時保持安裝與開發體驗,因此以 rustworkx 作為預設 Rust 加速後端,並保留 NetworkX 當 fallback。
專案結構(現行)
py-kb/
└── src/career_kb/graph/
└── knowledge_graph.py # rustworkx / NetworkX backend wrapper
後端選擇邏輯在:
- [knowledge_graph.py](file:///home/iantp/GitHub/2601-19-resume-skills/py-kb/src/career_kb/graph/knowledge_graph.py#L1-L25)
Step 1:安裝與依賴(現行)
py-kb 的依賴已包含 rustworkx,因此一般只要:
cd py-kb
uv sync
依賴來源可見:
- [pyproject.toml](file:///home/iantp/GitHub/2601-19-resume-skills/py-kb/pyproject.toml#L1-L33)
Step 2:Python 橋接層(現行)
目前的橋接層會先嘗試 import rustworkx,失敗才 fallback 到 NetworkX:
try:
import rustworkx as rx
USE_RUSTWORKX = True
except ImportError:
USE_RUSTWORKX = False
import networkx as nx
程式實作在:
- [knowledge_graph.py](file:///home/iantp/GitHub/2601-19-resume-skills/py-kb/src/career_kb/graph/knowledge_graph.py#L1-L26)
Step 3:驗證你現在用的後端
CLI 會顯示目前 graph backend:
cd py-kb
uv run career-kb graph show
命令入口:
- [graph_cli.py show](file:///home/iantp/GitHub/2601-19-resume-skills/py-kb/src/career_kb/cli/graph_cli.py#L150-L181)
何時還需要 Petgraph + PyO3
如果你需要更深度客製化資料結構、或想把更多圖運算搬到 Rust(不只 traversal),才會考慮自製 Rust binding(Petgraph + PyO3 / maturin)。但以目前 repo 目標來說,rustworkx 已能提供足夠的效能提升與更好的維護成本。
Career Knowledge Base 是一個本地優先的履歷知識庫系統,使用 Python + Rust + LanceDB + LlamaIndex 建構。
- ← Previous
手刻 GraphRAG:用 NetworkX + LangChain 建構知識圖譜增強檢索 - Next →
GraphRAG 全局檢索:社區分群 + 社區摘要 + Map-Reduce 聚合