返回 文章 学习 CMS 文章

sparqlite:用 Rust 在 SQLite 中实现 SPARQL 1.1

在 SQLite 内部原生运行 SPARQL 1.1 的 Rust 扩展,性能与兼容性俱佳。

SPARQLSQLiteRust图数据库
成长分 / 100 63 综合收获、行动、留存与影响

为什么值得读了解如何将 SPARQL 1.1 查询引擎嵌入 SQLite,扩展 SQLite 的图数据查询能力。

学习 Rust 实现的高性能技巧:整数编码术语、覆盖索引、基于成本的优化器、批量连接等。

关键洞察
  1. sparqlite 将 RDF 四元组存储在普通 SQLite 表中,并直接在 SQLite 进程内执行 SPARQL 查询和更新。
  2. 通过整数编码术语、覆盖索引、基于成本的规划器、批量连接和可选的直接 SQLite B-tree 读取器,在计数模式下比 SQL 翻译快 3.5 倍,返回完整结果时快 2.8 倍。
  3. 通过了 639 个适用 W3C 评估测试中的 636 个,并经历了数百万次差分模糊测试。
转成行动

深入阅读

正文与原文对照

原文保真覆盖:全文原文字符:2350

研究 sparqlite:用 Rust 编写的 SQLite 内 SPARQL 1.1 — sparqlite 是一个基于 Rust 的 SQLite 可加载扩展,它将 RDF 四元组存储在普通的 SQLite 表中,并在 SQLite 进程内原生执行 SPARQL 1.1 查询和更新。其整数编码的术语、覆盖索引、基于成本的规划器、批量连接以及可选的直接 SQLite B-tree 读取器,在计数模式下比 SQL 翻译快 3.5 倍,在返回完整结果时快 2.8 倍,同时通过了 639 个适用 W3C 评估测试中的 636 个以及数百万次差分模糊测试……

这个研究任务实际上是一个实验:在“Ultracode”模式下运行 Claude Code for web,正如 Claude Code 文档中使用动态工作流大规模编排子代理所述。

开启 Ultracode 后,Claude Code 会积极使用动态工作流——它生成 JavaScript 来定义和协调一个子代理网络,以处理复杂问题。

我最初的提示词是这样的——我的意思是“直接命中这些行”,“delete”这个词是我在手机上不小心打错的:

Write a SQLite extension in Rust that implants SPARQL and runs really fast because it can hit the delete rows directly

这导致 Claude Code for web 连续运转了超过 12 个小时。第二天我查看了它的进度,当我注意到它构建了多少个 Rust crate 时,发送了一条后续提示:

Every folder in the crates/ directory needs a README

Include a tutorial.md teaching users how to install the extension and how to run it in the SQLite CLI and then teaching them SPARQL in addition to how to use the SQLite extension

Include a script with the tutorial for populating a SQLite database with useful and realistic example data for that tutorial

这个项目感觉像是下一级别的氛围编程——审查这里生成的代码根本不可行,甚至阅读文档也是一项重大的工作投入。我不完全确定该如何处理这件事——我现在似乎已经在 SQLite 内用 Rust 实现了一个完整的 SPARQL,但如果我是一时兴起创建的,并且不能(或不愿)投入必要的时间去理解它能做什么,那它有多大价值呢?