Biff.graph — Resolver 模式与代码库图查询

概述

Biff.graph 是一个约 600 行的轻量级图查询引擎(Clojure),允许将数据模型(数据库+业务逻辑)统一为可查询的图。查询引擎核心仅约 200 行代码。

核心模式:Resolver Chain

每个 resolver 声明输入/输出形状,查询引擎自动链式调用:

;; Resolver 定义
(defresolver user-by-id
  {::resolver/input [:user/id]
   ::resolver/output [:user/name :user/email]})
 
;; 查询引擎自动编排 chain
;; 查询 {:user/id "123"} → resolver 返回 {:user/name "Alice" :user/email "alice@..."}

技术特点

  • 使用 EQL / Datomic pull pattern 描述查询形状
  • Resolver = 纯函数 + 关联的 input/output query
  • 支持 batch resolver(批量数据库查询优化)
  • 无查询规划步骤(比 Pathom 简单但低效)
  • 缓存和验证通过 middleware 实现
  • 支持可选属性(:? 前缀)、join 属性(嵌套 map)

意义

  1. 600 行实现可用图查询引擎 — 证明在合适抽象层次可以做到简洁而不简单
  2. Resolver 模式直接适用于 codebase-memory MCP — codebase-memory 的图查询也面临类似的”如何从多个数据源自动组装结果”问题
  3. 知识图谱查询 — gbrain 的查询层可以借鉴这种 resolver-chain 模式

关联

链接