2.0 KiB
2.0 KiB
title, type, tags, sources, last_updated
| title | type | tags | sources | last_updated | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| IncrementalGraphUpdate | concept |
|
|
2026-04-29 |
Definition
增量图谱更新(Incremental Graph Update)是一种通过文件监听器和 Git hooks 实时监听代码变化,仅对受影响的部分图谱进行增量更新而非全量重建的策略,确保图谱始终与代码库保持同步,同时保持 < 100ms 端到端响应时间。
Core Mechanism
触发来源
- 文件监听器(File Watcher):监听文件系统的
create/modify/delete事件 - Git Hooks:
pre-commit/post-commit/post-merge钩子检测代码变更
增量更新流程
- 检测文件变更(新增/修改/删除)
- 定位受影响的符号节点和边
- 对该文件运行 LSP
textDocument/didChange通知 - 接收 LSP 的增量语义更新
- 更新相关图谱节点和边
- 通过 WebSocket 推送图谱差异(Graph Diff)到客户端
Graph Diff 推送
interface GraphDiff {
added: GraphNode[];
removed: GraphNode[];
modified: GraphNode[];
addedEdges: GraphEdge[];
removedEdges: GraphEdge[];
}
仅推送差异,不推送全量图谱,实现最小化网络开销。
一致性保证
- 原子性更新:图谱更新是事务性的,要么全部成功要么全部回滚
- 乐观锁:并发更新时使用版本号检测冲突
- 不变性约束验证:更新前后验证图谱一致性不变量(符号唯一定义、边引用有效性等)
Performance Characteristics
- 文件变更到 WebSocket 推送:< 50ms
- 单文件增量更新:< 20ms
- 100k+ 符号规模:仍保持增量更新性能
Connections
- IncrementalGraphUpdate ← is_update_strategy_of ← GraphDaemon
- IncrementalGraphUpdate ← triggered_by ← FileWatcher
- IncrementalGraphUpdate ← streams_via ← WebSocket
- IncrementalGraphUpdate ← replaces ← LSIF(LSIF 用于预计算,Incremental 用于实时)