最佳实践:图系统的质量、性能与安全准则
原则
最佳实践是可执行的约束,不是海报上的口号。每条准则都应能转化为检查项、指标或 CI 门禁。
1. 建模准则
1.1 先查询形状,后 Schema
召开建模会时,先写 5 条「必须能在 P95 延迟内回答」的问题,再画节点边。没有查询形状的 Schema,几乎总会过度设计或设计不足。
1.2 边类型词汇表
维护受控词表:动词化、时态清晰、避免同义重复(WORKS_AT 与 EMPLOYED_BY 并存需有映射规则)。为每个边类型写:方向语义、基数、是否允许多重、必需属性、生命周期。
1.3 超级节点预防
识别天然超级节点(名人、热门商品、全国省份节点)。策略组合:
- 边类型拆分(粉丝边与互动边分离)
- 分片(按时间/哈希把边挂到
User#shard) - 预聚合(粉丝数物化,详情懒加载)
- 查询限流与采样返回
- 冷热分层(老边归档)
1.4 属性 vs 节点
枚举型、度量型、很少作为关系中心的概念 → 属性。需要独立关系或审计的概念 → 节点。灰色地带写 ADR 记录决策。
2. 数据质量准则
| 门禁 | 失败即 |
|---|---|
| 主键唯一约束违反 | 阻断发布 |
| 孤儿边 | 阻断或自动隔离 |
| 黄金查询结果漂移超阈值 | 阻断 |
| 置信度缺失的生产边占比过高 | 告警 |
| 源系统与图计数差超阈值 | 告警并冻结增量 |
边级元数据最低集:source、confidence、valid_from/valid_to 或 extracted_at、pipeline_version。
3. 性能准则
3.1 索引
为高选择性点查字段建唯一/索引;为复合查询考虑复合索引;全文检索与图索引职责分离。定期用慢查询日志反推缺失索引。
3.2 查询
- 禁止无界变长路径进入线上默认 API
- 默认 LIMIT;可视化另设硬顶
- 读写分离或副本承担重分析
- 重算法(全图 PageRank)走离线作业,不走在线事务通道
3.3 导入
大批量用 bulk;增量保证幂等;导入窗口与备份窗口错开;导入后强制质量门禁。
3.4 容量
跟踪:节点/边增长率、度 P99、磁盘、堆外内存、页缓存命中率。为 3× 增长预留演练。
4. GraphRAG 准则
- 证据优先:无证据不生成断言。
- 边类型白名单:问答扩展只走可信关系。
- 跳数预算:默认 1~2 跳,例外审批。
- 双通道延迟 SLO:图与向量分开计量。
- 评测集版本化:与提示词、模型版本一起钉扎。
- 可回退:图失败时明确降级策略与用户提示。
- 引用可点击:回到三元组或原文,不造假链接。
5. GNN 准则
- 防泄漏划分(时间切分优先)。
- 报告对比基线(MLP/规则/流行度)。
- 记录图快照哈希与特征版本。
- 监控嵌入漂移与近邻稳定性。
- 在线用嵌入时保留规则/图查询解释通道。
- 不 把软预测当硬事实写入生产图,除非经过审批流。
6. 安全准则
- 查询参数化;禁用终端用户任意图查询语言(或强沙箱)
- 多租户:标签/属性隔离 + 强制过滤器,测试跨租户穿透
- 导出脱敏;生产图备份加密
- 最小权限服务账号;审计谁在何时读了哪些子图
- 对 LLM 工具调用图 API 做速率与范围限制,防代理被劫持扫图
7. 可靠性与演进
破坏性变更必须可回滚。图比表更怕「悄悄改边含义」。
8. 观测仪表盘(建议最小集)
- 查询 P95/P99 分边类型
- 慢查询 TopN
- 度分布分位数
- 导入滞后
- 约束违反
- GraphRAG 空子图率 / 引用缺失率
- 错误率按 API 意图分类