Surrealism -- SurrealDB 的 WASM 擴充功能
SurrealDB 3 的新功能。以 Rust 編寫自訂函式,編譯為 WebAssembly (WASM),並部署為可從 SurrealQL 呼叫的原生資料庫模組。
先決條件
- Rust 工具鏈(穩定版)並包含
wasm32-unknown-unknown目標 - SurrealDB CLI v3.1.4+(內含
surreal二進位檔及surreal module子指令) - 熟悉 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/PRs 在 surrealdb/surrealdb 儲存庫提交意見回饋。
完整文件
請參閱主要技能的規則檔案以取得完整指南:
- rules/surrealism.md -- 專案設定、Rust 函式簽章、WASM 編譯、DEFINE MODULE/BUCKET 語法、部署、測試與最佳實務
- SurrealDB Extensions Docs -- 官方文件
- CLI module command --
surreal module參考