Surrealism -- SurrealDB 的 WASM 扩展
SurrealDB 3 的新特性。用 Rust 编写自定义函数,编译为 WebAssembly (WASM),并作为原生数据库模块部署,可通过 SurrealQL 调用。
先决条件
- Rust 工具链(稳定版),包含
wasm32-unknown-unknown目标 - SurrealDB CLI v3.1.4+(包含
surreal module子命令的surreal二进制文件) - 熟悉 SurrealQL 的
DEFINE MODULE和DEFINE BUCKET
开发工作流
1. 注解 -- surrealism.toml + 在 Rust 函数上添加 #[surrealism]
2. 编译 -- surreal module compile (生成 .wasm 二进制文件)
3. 注册 -- 在 SurrealQL 中执行 DEFINE BUCKET + DEFINE MODULE
快速开始
# 创建新的 Surrealism 项目
cargo new --lib my_extension
cd my_extension
# 添加 WASM 目标
rustup target add wasm32-unknown-unknown
# 创建 surrealism.toml(必需的清单文件)
cat > surrealism.toml << 'TOML'
[package]
name = "my_extension"
version = "0.1.0"
TOML
# 编写你的扩展(使用 #[surrealism] 注解)
cat > src/lib.rs << 'RUST'
use surrealism::surrealism;
#[surrealism]
fn greet(name: String) -> String {
format!("Hello, {}!", name)
}
RUST
# 使用 SurrealDB CLI 编译为 WASM
surreal module compile
# 在 SurrealDB 中注册
surreal sql --endpoint http://localhost:8000 --user root --pass root --ns test --db test
-- 授予对 WASM 文件的访问权限
DEFINE BUCKET my_bucket;
-- 注册模块函数
DEFINE MODULE my_extension FROM 'my_bucket:my_extension.wasm';
-- 在查询中使用函数
SELECT my_extension::greet('World');
使用场景
- 可从 SurrealQL 调用的自定义标量函数
- 用于测试的模拟/伪造数据生成
- 领域特定逻辑(语言处理、量化金融、自定义编码)
- 访问过于专用于 SurrealDB 核心的 Rust crate 功能
- 用于全文搜索的自定义分析器
状态
Surrealism 正在积极开发中,尚未稳定。API 可能在 SurrealDB 3.x 版本间发生变化。请通过 GitHub Issues/PR 在 surrealdb/surrealdb 仓库提交反馈。
完整文档
关于完整指导,请参见主技能的规则文件:
- rules/surrealism.md -- 项目设置、Rust 函数签名、WASM 编译、DEFINE MODULE/BUCKET 语法、部署、测试和最佳实践
- SurrealDB 扩展文档 -- 官方文档
- CLI 模块命令 --
surreal module参考