Surrealism -- Extensions WASM pour SurrealDB
Nouveau dans SurrealDB 3. Écrivez des fonctions personnalisées en Rust, compilez-les en WebAssembly (WASM), et déployez-les en tant que modules de base de données natifs appelables depuis SurrealQL.
Prérequis
- Chaîne d'outils Rust (stable) avec la cible
wasm32-unknown-unknown - CLI SurrealDB v3.1.4+ (binaire
surrealavec la sous-commandesurreal module) - Connaissance de SurrealQL :
DEFINE MODULEetDEFINE BUCKET
Flux de développement
1. Annoter -- surrealism.toml + #[surrealism] sur les fonctions Rust
2. Compiler -- surreal module compile (produit un binaire .wasm)
3. Enregistrer -- DEFINE BUCKET + DEFINE MODULE dans SurrealQL
Démarrage rapide
# Créer un nouveau projet Surrealism
cargo new --lib my_extension
cd my_extension
# Ajouter la cible WASM
rustup target add wasm32-unknown-unknown
# Créer surrealism.toml (manifeste requis)
cat > surrealism.toml << 'TOML'
[package]
name = "my_extension"
version = "0.1.0"
TOML
# Écrire votre extension (annoter avec #[surrealism])
cat > src/lib.rs << 'RUST'
use surrealism::surrealism;
#[surrealism]
fn greet(name: String) -> String {
format!("Hello, {}!", name)
}
RUST
# Compiler en WASM en utilisant la CLI SurrealDB
surreal module compile
# Enregistrer dans SurrealDB
surreal sql --endpoint http://localhost:8000 --user root --pass root --ns test --db test
-- Accorder l'accès au fichier WASM
DEFINE BUCKET my_bucket;
-- Enregistrer les fonctions du module
DEFINE MODULE my_extension FROM 'my_bucket:my_extension.wasm';
-- Utiliser la fonction dans des requêtes
SELECT my_extension::greet('World');
Cas d'utilisation
- Fonctions scalaires personnalisées appelables depuis SurrealQL
- Génération de données factices/mockées pour les tests
- Logique spécifique à un domaine (traitement du langage, finance quantitative, encodage personnalisé)
- Accès à des fonctionnalités de crates Rust trop spécifiques pour le cœur de SurrealDB
- Analyseurs personnalisés pour la recherche en texte intégral
Statut
Surrealism est en cours de développement actif et n'est pas encore stable. L'API peut changer entre les versions de SurrealDB 3.x. Signalez les retours via les issues/PR GitHub sur le dépôt surrealdb/surrealdb.
Documentation complète
Consultez le fichier de règle principal de la compétence pour des instructions complètes :
- rules/surrealism.md -- configuration du projet, signatures de fonctions Rust, compilation WASM, syntaxe DEFINE MODULE/BUCKET, déploiement, tests et bonnes pratiques
- Documentation des extensions SurrealDB -- documentation officielle
- Commande CLI module -- référence de
surreal module