一次多跳查询的复盘:图不搬出库,GraphRAG 怎么落地

各位,我是老张。今天从一次实战出发,往下拆一层。

前年做过一次多跳查询的优化,场景是供应链溯源。一条物料要追到三级供应商,当时的写法是三次 join 套一个递归 CTE。数据量到千万级之后,这条 SQL 跑一次要四十多秒。后来上了独立的图库,秒级出结果,但同步链路成了新的麻烦。10 月 30 日金仓那场发布会,主题是「Hello,AI数据库」,会上讲到库内知识化。我第一个反应是问一句:图到底怎么不搬出去还能跑。

一、AI数据库 的图,为什么不必建在库外

先说结论。GraphRAG 的图知识,来源本来就是关系表。既然来源在库里,那把它抽出来再建一套,图的就是「查询形态更顺手」。

这个顺手有代价。代价有三处:同步链路、第二套权限、两份存储。所以判断这件事的标准很简单。如果库内能把图查询做得够用,外挂那一套的必要性就下降一大截。发布会第 32 页给了两句原话:「零搬迁·零冗余」「表变 ➡ 图即变」。这两句我拆了三天,下面是我拆出来的东西。

维度 库外建图库 库内图化
数据来源 抽取后重建 直接读取关系表
数据新鲜度 取决于同步频率 与表实时一致
权限 第二套规则 沿用库内行级与语义级权限
存储 图与表各存一份 一份数据两种视图
运维 多一套备份监控 不增加系统数量

表格最后一行最容易被忽略。它跟性能无关,跟你要养几套系统有关。那次优化最后怎么收的,我说一下。图库上了,查询从 40 秒降到 2 秒,业务满意。但半年后复盘,同步链路出过四次问题,每次都是一天。

这事对我有影响。从那以后我看任何方案,先看它要不要多养一套东西,再看它快多少。金仓把图化做进内核,动的就是这笔账。不是把图查得更快,是让你少一套系统。

二、AI数据库里,二维表怎么变成图

这一层是关键。关系表是二维的,图是节点加边,中间怎么接上。我的理解是这样:内核里存的仍然是表。图不是另一份数据,是按语义对象推导出来的视图。语义层里的实体、属性、关系,正好对应图的节点、标签、边。口径和规则对应的是边的方向与过滤条件,标签对应的是节点的分类。

换句话说,图化不是复制,是映射。映射规则写在语义对象里,随时可改。这也解释了「表变 ➡ 图即变」为什么成立:底层只有一份数据,映射是实时算的。表改了,图就是新的。

sql 复制代码
-- 示意:图视图从关系表推导,不产生第二份存储
-- 节点来自供应商表,边来自供货关系表
SELECT s.supplier_id   AS node_id,
       s.supplier_name AS label,
       r.parent_id     AS parent
FROM   supplier s
JOIN   supply_rel r ON r.child_id = s.supplier_id
WHERE  r.rel_type = 'supply'
  AND  r.valid_to IS NULL;   -- 只取当前有效关系

这段 SQL 的重点在最后一行。关系表天然带有效期,图库通常没有这个概念。带时间维度的图,在库外建就得自己补字段。放在库里,就是一次过滤。

这里补一句我的理解,不一定严谨,有不同看法的欢迎拍砖。映射层做得好不好,看一件事:改一个语义对象,图视图是不是立刻跟着变。如果改完还要重建一次图,那就不是视图,是物化。物化就要同步,同步就又回到外挂那套问题。

发布会那页写的原话是「表变 ➡ 图即变」。我理解重点是那个「即」字。AI数据库这条链路上,语义对象是定义源,只有一份。金仓把六要素放进语义层,为的就是让映射有据可依。没有实体和关系的定义,表变不出图。

三、AI数据库的多跳推理怎么跑

以前慢,不是因为图难算,是因为 join 次数随跳数线性增长。跳三层三次 join,跳五层五次 join。每次 join 都要扫一遍,成本叠加得非常快。

图库的做法是预建邻接表,跳数不再转成 join 次数。代价是图得单独存,还得跟着表更新。AI数据库的做法介于两者之间。数据仍在表里,但图视图给了优化器一条更短的路。

我的判断是:这条路对三到五跳、边数中等的场景够用。再深、再密的图,交给专业图库更省事。这是实话,也是选型时该问清的地方。工程上最怕的不是边界,是不知道边界在哪。

再补一个观察。图库快,是因为它把关系预先存成了邻接表,查的时候不用 join。这一步预建本身要花时间,也要占空间。库内省掉的正是这一步预建,代价是每次查询时多一次映射计算。

这两者在不同数据量下各有胜负。数据在千万级以下,库内基本够用。上到亿级、跳数又深,专业图库更合适。我不认为这是缺点。选型本来就是在数据量和系统数量之间做交换。

四、零搬迁的边界在哪

发布会讲的是能力,我补一段边界。这三条是我自己的判断,官方没写。写出来不为挑刺,是让你评估的时候手上有张清单。

第一,图关系必须能从表推导出来。 如果关系藏在文档里、藏在日志里,那推不出来,还是得先入库。

第二,多跳深度别指望无限。 五跳以内是常态,十跳以上建议另想办法。

第三,复杂图算法不是这条路的强项。 社区发现、中心度计算这类,专业图库的库更全。

三条合起来看,说的是适用范围,不是能力高低。AI数据库这条路线解决的是「图要不要单独存」,不是「图能不能取代图库」。任何方案都有适用区间,把区间说清楚,比只讲能力更让人敢用。我在别的项目上吃过反过来的亏。方案讲得全能,上线后发现三个场景不支持,返工比重做还贵。

金仓这次讲的多是具体做法,很少堆优势词,这种写法我认。讲得具体就能被验证:它说什么,你抬脚就能去试。

五、六个容易读漏的细节

第一个,语义对象是图化的前提。 没有实体和关系的定义,表变不出图。所以这条路的第一件事是把语义建起来,不是先建索引。

第二个,图化不产生新存储。 这一点决定了备份、容灾、扩容都不用翻倍。它是库内和库外最大的结构差异,也是成本差的主要来源。

第三个,权限跟着数据走。 图查询走的是库内权限,行级策略照样生效。不用在第二套系统里重配一遍,也不用担心两边规则对不上。

第四个,语义要建全,不是建个实体就完事。 只建实体不建关系,图查出来全是孤点。这不是工具的问题,是定义没做完。六要素是并列着讲的,实体、属性、关系、口径、规则、标签,缺一样语义层就不完整。建语义也没法一口气做完,我的建议是按问题倒推,业务问什么就建什么,用不上的先放着。

第五个,关系字段得干净。 关系表里用字符串存的关系最容易出问题,同一条边写成两个值,图就断了。我在一个项目上统计过,一张关系表里百分之七的记录,父节点字段带前后空格。

第六个,表的约束会被继承。 早年在图库里把一条边建重了,同一个供应商两条关系,多跳时结果翻倍。这类错误在关系表里很难发生,有主键和外键拦着。库内图化接了这份遗产,原来的清洗脚本和校验规则,一样都不用重写。

前三条讲结构,后三条讲工程,六条连起来其实是一件事。AI数据库 这条路把能力收回内核,连带把运维的复杂度也收了回去。这也是我看这套方案时最看重的一点。

六、AI数据库里,图和向量怎么配合

GraphRAG 里,图和向量不是二选一。向量解决「哪段内容和问题最像」,图解决「这些内容之间怎么连」。两条一起用,才能回答那种既要语义又要关系的问题。比如「和这家供应商有共同上游的企业,还供过哪些同类物料」。

这类问题只靠向量答不了,只靠图也答不准。先召回再扩展,是常规打法。发布会上给的是一套组合:库内向量化、库内图化、库内语义。三样都在一个引擎里。顺序也有讲究,向量先缩区间,图再扩关系。反过来做,节点数会先爆炸。

这一点在库内实现里不新鲜。AI数据库 把两件事放进同一个执行引擎,省掉的是一次跨系统搬运。写 SQL 的人感受不明显。你写的是一条带向量条件的图查询,先走哪一步由优化器决定。对一个运维来说,这个组合最大的好处是只有一套监控要盯。三样能力一套备份,一套权限,一套告警。

最后给三条我自己的判断,供参考。第一,看你的问题里多跳占多少,一半以上是多跳,图化值得做。第二,看关系能不能从表里推,推不出来就先解决入库。第三,看团队愿不愿意维护语义,不愿意的话,这套东西用不起来。

这三条比任何跑分都实在。能力再强,也得有人把定义写对。定义写错,图化只会把错误放大得更快。金仓这一轮把工具链铺好了,剩下的活还是人的。

写在最后

图不在库外建,靠的不是把图塞进数据库,是把图看成表的一种视图。想通这一点,后面的事都顺了。数据只有一份,视图可以有很多种,这也是它比库外方案省事的地方。

这个视角一变,很多争论就没意义了。比如「图库要不要上」,问题该换成「现有查询能不能用视图表达」。能表达的部分留在库里,不能表达的部分再上专用工具,这才是我理解的零搬迁。放到 AI数据库 这个语境里,它的意义更清楚。RAG 要的不是图本身,是图提供的多跳关系。关系能在库内算出来,就不必为了它再养一套系统。

AI数据库 这个词容易被讲虚,原因也在这儿。虚的不是概念,是没往下拆到存储那一层。金仓这一步真正动的是内核,不是包装。视图、语义、权限三样都在原来的位置上。

你们现在那张图,是单独存的还是从表推的?评论区说说。

我是底层玩家老张。咱不聊概念,只聊源码和压测跑出来的东西。

相关推荐
程序员果子6 小时前
本体构建方法
人工智能·python·知识图谱·agent框架·本体
小林ixn21 小时前
GraphRAG 实战:用 Neo4j 知识图谱,让 RAG 从“找货“进化到“梳理关系“
人工智能·知识图谱·neo4j
龙腾AI白云2 天前
仿真到现实(Sim-to-Real)迁移:跨越仿真与现实鸿沟
数据库·机器学习·plotly·知识图谱·tornado
奶油话梅糖3 天前
2,615 个知识点、3,003 条先修边:6,800 Star 的开源知识图谱,能顺着错题从高中回溯到小学
人工智能·知识图谱
奥惟斯6 天前
GEO 上线前,先把这 3 类实体信号地基补上
人工智能·深度学习·机器学习·自然语言处理·数据挖掘·数据分析·知识图谱
Allen_LVyingbo7 天前
NVIDIA CUDA Tile 在医疗计算中的算子形式化、算法重构与内核实现
大数据·python·算法·重构·知识图谱·健康医疗·数据库架构
骑着蜗牛撵大象3277 天前
Spring Boot 4.1 + Spring AI 2.0:RAG 供文、图谱供关系、MCP 供工具的 Java Agent 平台
java·spring boot·spring·微服务·知识图谱·rag·mcp
底层玩家老张8 天前
RAG向量库拆分复盘:内存、延迟与权限的三笔账
数据库·向量数据库·向量检索·ai数据库
数据库小学妹9 天前
AI Agent连数据库怎么控权限?只读账号的4个缺口
数据库·人工智能·安全·数据库权限·审计·ai数据库·只读账号