SurrealDB - 多模型数据库
Rust 编写的多模型数据库,统一文档、图谱、关系型、时序数据,支持实时查询、向量搜索和嵌入式部署
GitHub: surrealdb/surrealdb (31,863 stars)
2026年4月15日
databaserustdistributed
什么是 SurrealDB?
SurrealDB 是一个用 Rust 编写的多模型数据库,将文档、图谱、关系型、时序、地理空间和键值数据统一到单一引擎,并具备强大的搜索和检索功能(全文、向量、混合检索)以及实时事件驱动能力。
安装
Docker(推荐)
docker run --rm -p 8000:8000 surrealdb/surrealdb:latest start
编程语言 SDK
npm install surrealdb.js # JavaScript/TypeScript
pip install surrealdb # Python
go get github.com/surrealdb/surrealdb.go # Go
快速开始
USE NS mynamespace DB mydb;
CREATE user SET name = "Alice", email = "alice@example.com", age = 30;
SELECT * FROM user WHERE age > 18;
数据模型
文档模型
CREATE article SET
title = "Getting Started",
content = "This is the content...",
tags = ["tutorial", "surreal"];
图模型(无 JOIN)
-- 创建关系
RELATE person:alice ->knows-> person:bob;
-- 图查询
SELECT ->knows->person.name FROM person:alice;
实时查询(Live Query)
LIVE SELECT * FROM user WHERE active = true;
数据库变化会实时推送到应用(通过 WebSocket)。
SDK 使用
JavaScript
import Surreal from 'surrealdb.js';
const db = new Surreal('http://127.0.0.1:8000/rpc');
await db.signin({ user: 'root', pass: 'root' });
await db.use({ namespace: 'myns', database: 'mydb' });
const user = await db.create('user', { name: 'Alice', email: 'alice@example.com' });
const users = await db.select('user');
部署方式
| 方式 | 场景 |
|---|---|
| 嵌入式 (WASM) | 边缘计算、浏览器 |
| 单节点 | 中小型项目 |
| 分布式集群 | 大规模、高可用 |
| SurrealDB Cloud | 托管服务 |
与传统数据库对比
| 特性 | SurrealDB | PostgreSQL | MongoDB | Neo4j |
|---|---|---|---|---|
| 多模型 | ✅ | ❌ | ❌ | ❌ |
| 图查询 | ✅ | ❌ | ❌ | ✅ |
| 向量搜索 | ✅ | 需扩展 | 需扩展 | ❌ |
| 实时推送 | ✅ | ❌ | ❌ | ❌ |
最佳实践
- 从 Docker 快速体验:无需安装
- 善用 Live Query:实时应用场景替代轮询
- 图查询替代多表 JOIN:多对多关系用
RELATE - SCHEMAFULL 生产环境:确保数据一致性
参考
- GitHub: surrealdb/surrealdb
- 官方文档: https://surrealdb.com/docs