PathFinder: A unified approach for handling paths in graph query languages
本文介绍了 PathFinder,这是一种用于处理现代图语言中路径查询的统一且高效的方法,它利用紧凑的路径表示和流水线执行来实现稳定的性能,并使性能超越现有图引擎一个数量级。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象你正在探索一座名为 Graph City(图之城) 的宏大魔法城市。在这座城市里,每一个人都是一栋建筑(节点),而他们之间的每段关系都是一条路(边),并且每条路上都有特定的路标,比如“关注”、“居住”或“工作”。
多年来,这座城市的导游们(旧的数据库引擎)有一个奇怪的规则:如果你问,“请展示所有我从乔(Joe)到埃菲尔铁塔的路径,且只能通过‘关注’这条路”,导游只会指着终点说,“好的,你可以到达那里!”然后就停下了。他们只给了你目的地,却不会向你展示旅途的地图。
这对侦探们来说是个问题。如果你试图解决一个谜团(比如发现洗钱行为或追踪谣言),你不仅需要知道谁与谁相连,还需要看到他们所走的完整路径。他们是直达的吗?还是绕了三圈才到?或者是走了捷径?
于是,PathFinder 登场了。这是一个由 Benjamín、Wim、Carlos 和 Domagoj 构建的超级智能新导游。这篇论文介绍了 PathFinder,它是第一个不仅能告诉你谁与谁相连,还能亲手递给你每一条可能路径的精确地图的导游,无论规则多么复杂。
“乘积图”的魔力
PathFinder 是如何在不迷失在迷宫中的呢?想象你有一张普通的城市地图,同时你还有一个微小的、神奇的清单(自动机),上面写着:“你必须走一条‘关注’的路,再走一条‘关注’的路,然后走一条‘工作’的路。”
PathFinder 不仅仅是在城市中行走;它构建了一个影子城市(称为乘积图 Product Graph),在这里,每一栋建筑都是一个真实城市建筑加上清单上的一步。
- 如果你在“乔”这里且尚未进行任何步骤,你就处于
(乔, 步骤 0)。 - 如果你走过一条“关注”的路到达“保罗”,你就移动到了
(保罗, 步骤 1)。
通过在这个影子城市中行走,PathFinder 可以瞬间识别出哪些路径符合你的清单。这就像拥有一个 GPS,它只会在你被允许行驶的道路上亮起,忽略其余部分。
27 种行走方式
论文解释说,在 Graph City 中共有 27 种不同的规则(称为“模式”)。PathFinder 是第一个能够处理所有 27 种模式的引擎。以下是其中一些风格:
- WALK(漫步): 你可以去任何地方,即使你在同一个地方转圈或者两次访问同一栋房子。(这最简单,但会导致无限循环!)。
- TRAIL(小径): 你可以两次访问同一栋房子,但不能两次走在同一条路上。
- SIMPLE(简单路径): 你不能两次访问同一栋房子(除非起点和终点是同一个地方)。这是最难遵守的规则,因为可能的路径数量会爆炸式增长。
- ANY SHORTEST(任意最短路径): 只给我提供一条最快的路径。
- ALL SHORTEST(所有最短路径): 把所有最快的路径都给我。
- SHORTEST k GROUPS(k 组最短路径): 给我最快的路径,然后是第二快的路径组,依此类推,直到第 组。
作者展示了,虽然某些规则(如寻找“简单路径”)在理论上是非常困难的——难到计算机在面对巨大的地图时通常会放弃——但 PathFinder 在现实世界中处理得非常出色。
“无限循环”问题
Graph City 中的一个大麻烦是,如果存在一个环路(比如乔关注保罗,而保罗又关注乔),你可能会在这个环路中永远走下去。如果你要求“所有的漫步路径”,答案将是无限的!
为了解决这个问题,GQL 和 SQL/PGQ 标准(这些语言的规则书)允许你选择一种模式,如“Simple”或“Trail”来停止无限循环。PathFinder 完美地遵守了这些规则。它准确地知道何时停止探索一条路径,以免陷入无尽的循环,同时仍能找到你请求的所有有效路径。
速度测试:PathFinder 对阵其他选手
作者不仅构建了 PathFinder,还将其投入测试,与行业内的巨头进行了对比:Neo4j、Nebula、Kuzu、Jena、Blazegraph 和 Virtuoso。
他们在三种场景下进行了测试:
- Pokec: 一个中型社交网络,拥有 160 万人和 3000 万个连接。
- Wikidata: 一个巨大的现实世界知识图谱,拥有 3.64 亿个节点和 12.57 亿条边。
- Diamond(钻石图): 一个精心构造的数学图,旨在产生指数级的路径数量(具体为 条路径)。
测试结果:
- 速度: 在几乎所有的测试中,PathFinder 比其他引擎快 10 到 100 倍。
- 稳定性: 当路径变得更长或更复杂时,其他引擎开始崩溃或超时(放弃),而 PathFinder 依然能稳步运行。
- “不可行性”的惊喜: 对于“Simple”和“Trail”模式,理论上说计算机需要花费极长时间才能找到答案。但在现实世界的测试中(如在 Wikidata 上),PathFinder 快速找到了 10 万条路径。作者认为这是因为现实世界的数据通常不会出现让数学计算发生爆炸的特定“完美风暴”式的连接。
PathFinder 暂时还做不到的事
了解这篇论文没有声称做到的事情也很重要:
- 它并没有说 PathFinder 是魔法。如果你在一个有环路的图中要求获取每一条路径,答案仍然是无限的,没有任何计算机能打印出来。PathFinder 只是会在你设置的限制内停止(例如 10 万条结果)。
- 它没有声称已经解决了所有可能图谱中的“简单路径”问题。论文承认,在最坏的理论场景下,寻找简单路径仍然是 NP-complete(一个表示“计算极其困难”的术语)。PathFinder 只是在处理我们实际使用的图谱时表现得比其他人好得多。
- 它还没有声称已经修复了针对 RDF(一种特定数据格式)的“Simple”模式。作者表示他们还没有实现针对 RDF 的“Trail”模式,因为当边没有唯一名称时,很难定义什么是“trail”。
总结
PathFinder 是一个全新的引擎,它扮演着超级强力导游的角色。它可以接受一套复杂的规则(例如“找出所有从乔到 ENS Paris,且遵循‘关注’后接‘工作’模式的路径”),并返回这些旅程的实际地图。
作者在真实数据上衡量了这一点,发现 PathFinder 比目前的顶尖图数据库快得多且更稳定。他们甚至展示了如何将 PathFinder 添加到现有系统(如 SPARQL 引擎)中,从而赋予它们这种新的超能力。虽然数学理论说这些任务快速完成是不可能的,但在混乱的现实世界中,PathFinder 证明了它可以以惊人的速度完成这些任务。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。