控制台

k 跳邻域与两点最短路的原型 — 交互只在浏览器内,不写回任何系统
原型A3 neighborhood / path_between
选好两端后点「找最短路」。

子图

点任意节点看它的 k 跳邻域
原型A2 kg_node / kg_edge
门户GitLabK8s代码DMSApollo 跨域桥weak最短路 节点文字过长已截断,鼠标悬停看全名

邻域节点(按跳数) · 点一行把它设为新起点

kg_edge 行(RelationAssertion 包络,A2 要物化的形态)

原型
这些列就是 RelationAssertion 契约的包络——relation_key / cardinality / confidence / evidence / observed_at(完整契约还有 valid_from / env / conflict_ref)。A2 把注册表 79 条关系实例化成这样的行,每条边带着"从哪条查询、哪一行推出来"的证据指纹。derived 表示由命名查询逻辑推导、注册表尚无对应登记键——这类边正是 B3 推荐边的候选来源(候选 → 人审 → 留出集实测,传播仅驳回)。

等价的递归 CTE(A3 的查询形态)

示意,非仓内已有对象
规划A3

neighborhood(:node_id, :k ≤ 3, :kinds, :budget)

WITH RECURSIVE nb(node_id, hop, path) AS (
  SELECT :node_id, 0, ARRAY[:node_id]
  UNION ALL
  SELECT CASE WHEN e.from_id = nb.node_id THEN e.to_id ELSE e.from_id END,
         nb.hop + 1,
         nb.path || CASE WHEN e.from_id = nb.node_id THEN e.to_id ELSE e.from_id END
  FROM nb
  JOIN onto.kg_edge e ON nb.node_id IN (e.from_id, e.to_id)
  WHERE nb.hop < :k                          -- 跳数上限 ≤ 3
    AND e.relation_key = ANY(:kinds)          -- 按边类型过滤
    AND e.confidence <> 'retired'
    AND NOT (CASE WHEN e.from_id = nb.node_id
                  THEN e.to_id ELSE e.from_id END) = ANY(nb.path)
)
SELECT n.node_id, n.node_type, n.label, MIN(nb.hop) AS hop
FROM nb JOIN onto.kg_node n USING (node_id)
GROUP BY 1, 2, 3
ORDER BY hop, n.node_type
LIMIT :budget;   -- 行预算与 statement_timeout 由命名查询 lint 钉死

path_between(:a, :b),≤ 4 跳,命中即止

WITH RECURSIVE walk(node_id, hop, path) AS (
  SELECT :a, 0, ARRAY[:a]
  UNION ALL
  SELECT CASE WHEN e.from_id = w.node_id THEN e.to_id ELSE e.from_id END,
         w.hop + 1,
         w.path || CASE WHEN e.from_id = w.node_id THEN e.to_id ELSE e.from_id END
  FROM walk w
  JOIN onto.kg_edge e ON w.node_id IN (e.from_id, e.to_id)
  WHERE w.hop < 4
    AND NOT (CASE WHEN e.from_id = w.node_id
                  THEN e.to_id ELSE e.from_id END) = ANY(w.path)
)
SELECT path, hop
FROM walk
WHERE node_id = :b
ORDER BY hop
LIMIT 1;         -- 无行 = 不连通或超 4 跳,如实返回空、不猜

验收:在 kg 两表上 p95 ≤ 5 s,并替换 ≥3 个 heavy 视图的用途。闸门:p95 不达 → 退回按用途物化视图,不建图。

13 条跨域桥在本图里的出场

注册表已实现

hit_rate 是登记时基线,非当前值;没出场的桥只是本页选的几条查询没走到它(网络接入层、ECS、Feign 侧的桥要用 v_ingress_chain / v_conn_to_ecs 一类用途拉动)。

子图从哪来

真实查询返回,按行拼装
已实现MCP query

Snowflake 对位与缺口

Snowflake Knowledge GraphOntoOS 现状(本页)规划条目
KG_NODE / KG_EDGE 两张仓内表,本体就是表节点 / 边由 7 次命名查询临时拼装,仓里没有;注册表 79 条关系只是边类型定义A2 onto.kg_node / kg_edge 进 ADR-0017 发布层集,关系实例化为 RelationAssertion 行
递归 CTE 做多跳,SQL 主线7 张 heavy 视图各写各的 JOIN(共享库故障传播、2 跳 Feign 上游各一张)A3 neighborhood / path_between 两条命名查询,p95 ≤ 5 s,替换 ≥3 个 heavy 视图
GraphRAG:取邻域当 Agent 上下文Agent 只能沿登记关系 drill 一跳,多跳要自己串A3 + A4 Manifest 把邻域接口写进交接路由
Term Mappings:术语 → 节点的映射表search 的别名等价类(工作负载名 / spring.application.name / feign_name / app_id),有损、无同义词表B2 同义词与域级概念索引;B3 derived 边进推荐边候选
(Snowflake 也不上图数据库)—不做图数据库(红线):kg 两表在 ADB,跳数上限 ≤ 3,statement_timeout 预算,超出走离线 job