news 2026/9/2 14:54:07

SurrealDB:一条命令启动的多模型数据库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SurrealDB:一条命令启动的多模型数据库

SurrealDB:一条命令启动的多模型数据库

【免费下载链接】surrealdbA scalable, distributed, collaborative, document-graph database, for the realtime web项目地址: https://gitcode.com/GitHub_Trending/su/surrealdb

核心关键词:SurrealDB 多模型数据库

长尾关键词:SurrealDB 快速安装与启动、SurrealDB 内存存储与磁盘存储、SurrealDB 图查询 RELATE、SurrealDB 实时查询 live query、SurrealDB Docker 部署

你写一条"取某用户的帖子和好友"的查询,可用户表在 Postgres、关系在图数据库、标签在文档数据库,权限判断还得在 API 层手写一层。SurrealDB 是用 Rust 写的多模型数据库,把文档、图、关系型收进同一个引擎,权限与实时推送都内置。

📦 一句话说清 SurrealDB 是什么

SurrealDB 是一个多模型数据库:文档、图、关系型(可强制 schema 也可不强制)、时序、地理位置、键值,六种形态共用一套引擎和同一个查询语言 SurrealQL(一种 SQL 风格的查询语言,你可以把它理解为"会写图遍历的 SQL")。

它同时兼任 API 后端:行级权限写在表定义里,由数据库本身强制,客户端可以直接连上来查,不用你在中间再垫一层鉴权代码。边界也要说清楚——它不是托管平台,部署形态(嵌进应用里、单机服务、分布式集群)要你自己选,本文只讲自己部署这一侧。

🚀 从启动到第一条查询的最快路径

全程用 Docker,不用在本地装任何东西。

第 1 步,起一个内存版开发服务。memory表示数据放在内存里,不落盘、重启即失,正好用来试水:

docker run --rm --pull always --name surrealdb -p 8000:8000 \ surrealdb/surrealdb:latest start --log info --user root --pass root memory

--user/--pass顺手把 root 账号建好了,后面连接要用。

第 2 步,打开 SQL 交互终端连上去。镜像里自带 CLI,--ns--db是 SurrealDB 的两级命名空间,不先选定它们,你的数据就像没找到目录:

docker exec -it surrealdb /surreal sql -e http://localhost:8000 \ -u root -p root --ns demo --db demo --pretty

第 3 步,建表并插入第一条记录,直接键入 SurrealQL:

DEFINE TABLE person; CREATE person SET name = "Tobie", marketing = true;

第 4 步,查回来验证:

SELECT * FROM person;

看到刚写入的记录,就说明整条链路通了。如果你已经通过其他途径装好了surreal命令(安装方式以项目仓库 README 为准),上面第 1、2 步就简化成surreal start --log info --user root --pass root memorysurreal sql

🔍 它到底怎么 work 的

第一个关键点:同一个 Rust 代码库,跑法是可选的。它可以作为库嵌进你的应用进程,可以编译成 WebAssembly 在浏览器里跑,也可以像上面那样作为服务端单节点运行,甚至多个节点组成分布式集群。存储层是可插拔的后端:内存、RocksDB、TiKV 等,选哪个在启动时通过参数决定——相当于一个程序,既能当桌面应用装,也能当服务端跑,数据落在哪你自己挑。

第二个关键点:一切都写成 SQL 声明。表结构(DEFINE TABLE)、字段类型与校验(DEFINE FIELD ... TYPE string ASSERT ...)、唯一索引、变更事件(DEFINE EVENT)、权限(PERMISSIONS FOR select WHERE ...)全部用 SurrealQL 声明在 schema 里。schema 就是你和前端、客户端之间唯一的契约,改一处,所有连接方同时生效。

第三个关键点:关系是一等公民,而且能订阅。用RELATE建的是一条带属性的有向边,查询时用->边->直接做多级遍历,不需要 JOIN 也不要把数据拉到客户端再拼;再叠加 live query——订阅一次,之后这条数据变了,服务端会主动推给订阅方,做协作编辑、实时通知这类需求不用自己轮询。

RELATE user:tobie->write->article:surreal SET time.written = time::now();

⚙️ 四个真正影响体验的配置

存储参数memory还是rocksdb:/路径→ 决定数据放内存还是写成本地磁盘文件 → 感受:内存版最快,但容器一停数据全没;切到rocksdb:前缀后重启还在,本地开发想留数据就换它。

--user/--pass→ 指定 root 账号凭据(也可用环境变量SURREAL_USER/SURREAL_PASS)→ 感受:忘了设,连接时就没有能登录的人;生产环境务必改掉默认的root/root

表级SCHEMAFULL/SCHEMALESS→ 声明后是否强制校验字段定义 → 感受:SCHEMAFULL的表会拒绝写入未声明的字段,前后端共用同一份结构约束;SCHEMALESS则随意写,适合探索期数据。

--log info(或SURREAL_LOG→ 日志详细程度 → 感受:排查查询卡在哪时提到debug/trace,日常跑info就够,避免日志刷爆终端。

🧭 环境兼容与已知边界

  • 运行形态:macOS、Linux、Windows 单节点均可,也可分布式集群;同时支持嵌入进程和 WASM 浏览器内运行。
  • 从源码构建:官方 CI 覆盖 macOS、Ubuntu、Windows;Windows 下编译需要管理员权限,musl、树莓派等交叉编译目标目前尚未打通,具体以仓库 doc/BUILDING.md 实际状态为准。
  • 存储后端:memory、RocksDB、TiKV、SurrealKV 等,通过构建特性与启动参数选择(详见仓库Cargo.toml的 features 列表)。
  • 许可:核心代码为 BSL 1.1,SDK 与相关库为 Apache 2.0 / MIT。
  • 版本号:以项目仓库实际为准,当前工作区标注为 3.1.0-alpha,说明仍处于快速迭代期,升级前先看发布说明。

🛠️ 踩坑了先看这里

现象:服务重启后数据没了→ 大概率原因:启动时用的是memory引擎,数据只存在 RAM 里 → 处理动作:把存储参数换成rocksdb:/你的数据目录再启动。

现象:surreal sql连上了,查询却返回空→ 大概率原因:没选 NS/DB,或者和你写数据时用的命名空间不是同一套 → 处理动作:连接时带上--ns--db,核对账号一致。

现象:连接 8000 端口被拒或端口被占用→ 大概率原因:端口映射或绑定地址被别的服务占用 → 处理动作:换映射-p 8080:8000并同步修改连接地址,或查一下主机上 8000 端口的占用情况。

🔁 让它持续可用

  • 升级与回滚:CLI 自带surreal upgrade处理数据升级(参数以仓库surrealdb/server/src/cli/upgrade.rs为准);Docker 部署时回滚就是改回旧镜像 tag 重启。
  • 数据出入与体检surreal export/surreal import做数据迁移,surreal validate校验 schema。
  • 日志与遥测--log管普通日志,--log-otel-level单独管 OpenTelemetry 追踪粒度;仓库dev/docker目录里有一套现成的可观测栈(Prometheus + Grafana + Tempo),开发时直接docker compose拉起来。

如果你的项目现在要同时伺候几个数据库、再垫一层 API 代码做权限和拼装,SurrealDB 的思路是把这份胶水收进一份 schema 声明里——少维护的系统,往往比多一套更少的出问题的系统。

【免费下载链接】surrealdbA scalable, distributed, collaborative, document-graph database, for the realtime web项目地址: https://gitcode.com/GitHub_Trending/su/surrealdb

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 14:52:27

FLIR Research Studio专业红外热成像分析软件:部署、功能与应用指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/2 14:52:17

ws1830S NFC读卡模块实战:从选型、天线匹配到程序调通

简介:面向NFC应用开发者的完整工程资料包,整合了WS1830S芯片手册、原理图、PCB设计文件及基于SPI接口的通信程序,覆盖读写功能开发的关键环节,适合需要快速上手近场通信项目的硬件工程师或嵌入式开发者。压缩包共158个文件&#x…

作者头像 李华
网站建设 2026/9/2 14:51:26

谷歌Antigravity支持WSL:Win11本地Linux环境直连云端AI开发

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/2 14:49:57

基于WebGPU的浏览器本地LLM推理完整实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华