多模态数据库SurrealDB:简介、实战
2026/8/20 2:20:48 网站建设 项目流程

概述

关系型、nosql、向量数据库、嵌入式、

简介

官网,用Rust写的开源(GitHub,32.8K Star,1.3K Fork)多模型数据库,把文档、图、关系、时序、地理空间和向量全塞进同一个引擎里;对外暴露SurrealQL查询语言,语法接近SQL但能同时表达图遍历、向量相似搜索和实时订阅,官网文档。

功能特性:

  • 减少开发时间:将数据库、查询层、API和认证层整合到一个平台,减少对传统后端组件的依赖
  • 实时协作API后端服务:既是数据库,也是API后端服务,支持实时协作
  • 支持多种查询语言:支持从客户端设备进行SQL查询、GraphQL(即将推出)、ACID事务、WebSocket连接、结构化和非结构化数据、图查询、全文索引和地理空间查询
  • 支持WebSocket,客户端可订阅数据变化,用于实时协同场景
  • 细粒度访问控制:提供行级权限控制,可直接在数据库层定义哪类用户能读写哪些记录,精确管理数据访问
  • 多模型支持:允许开发者使用多种技术存储和建模数据,无需预先选择特定方法
  • 高级文档间关系:通过记录链接和图边连接实现高效的关联查询,避免复杂JOIN操作
  • 简单模式定义:统一数据库和API模式定义,简化前端和后端开发
  • 直接从客户端连接:允许Web浏览器和客户端设备直接连接并查询,无需额外API服务层,内置权限控制
  • schema支持无模式、严格模式以及混用,通过DEFINE TABLE定义;
  • 支持RELATE关键词建立有向图边,图路径查询语法:->follows->
  • 支持MTREEHNSW算法创建向量索引,K近邻搜索:<|>
  • 实时查询和数据变更:实时同步数据修改到客户端,支持高级过滤和高效的数据格式(如DIFFing和PATCHing)
  • 轻松扩展:可作为单节点内存数据库运行,也可扩展到分布式集群,提供高可用性和可伸缩性
  • 通过JS函数扩展:支持嵌入式JS函数,将计算逻辑移至数据层
  • 可嵌入或云端部署:完全用Rust构建,可作为嵌入式库或分布式数据库服务器使用
  • MCP:作为服务器,可对接AI Agent工作流;
  • SDK:覆盖Rust、JavaScript/TypeScript、Python、Go、.NET、PHP、Java等主流语言

安装

官方提供单一Rust二进制文件,可内嵌进应用进程(通过Rust Crate或WebAssembly),也可在边缘节点以单机模式跑,以分布式集群运行在云上。

支持多种部署安装方式,对于Windows系统来说,最简单的可能是从GitHub Release页面下载surreal-v3.2.0.windows-amd64.exe,和执行iwr https://windows.surrealdb.com -useb | iex命令的区别在于,前者是稳定版本,版本号略滞后;命令行方式安装永远是最新版,并附带日期+CommitId信息:

通过命令行方式安装:

# Mac、Linuxcurl-sSfhttps://install.surrealdb.com|shbrewinstallsurrealdb/tap/surreal# Windowsiwr https://windows.surrealdb.com-useb|iex# Docker:默认基于内存dockerrun--rm--pullalways--namesurrealdb-p8000:8000 surrealdb/surrealdb:latest start# 带认证dockerrun--rm--pullalways--namesurrealdb-p8000:8000 surrealdb/surrealdb:latest start--loginfo--userroot--passroot memory# 持久化到RocksDB存储引擎dockerrun--rm--pullalways-p8000:8000--user$(id-u)-v$(pwd)/mydata:/mydata surrealdb/surrealdb:latest start rocksdb:/mydata/mydatabase.db

安装截图

命令行使用:

surreal start surreal start--userdev--passroot memory

解读:

  • 指定存储引擎,支持:memory(内存,默认)、rocksdb(单节点磁盘)或tikv(多节点集群)
  • 默认情况下,用户名和密码都设置为root

执行surreal start,效果图

浏览器打开http://localhost:8000,自动跳转到https://surrealdb.com/studio

先点击【Download for Windows】,得到surrealdb-studio-1.0.5.exe

SurrealDB Studio

双击文件,安装过程略,打开应用,Google或GitHub登录,需勾选用户信息,方能使用,有点烦啊,不填写信息不让用

界面大致摸索一下,找到【连接】管理,新增连接:

先去看看【实例】管理,实际上就是在使用SurrealDB Cloud,下滑查看。

回到连接,支持2种类型:Remote(包括4种协议类型,HTTP、HTTPS、WS、WSS),Local(包括Memory):

此处选择Memory,点击下一步即可。

连接沙箱和下面的实例菜单,几乎差不多;可这样理解,连接归属于实例,一个实例可创建多个连接。

看到熟悉的SQL编辑框

点击【Combined】查看数据展示样式

支持5种视图:

  • Combined(组合):在单个列表中查看所有结果
  • Individual(独立):逐一检查每个结果
  • Table(表格):以表格形式渲染查询结果
  • Graph(图表):以图形化方式可视化查询结果
  • Live(实时):订阅实时查询结果

点击【Table】可看到刚从创建的表,Schema也是

新增API

添加Handler,选择HTTP方法(GET、PUT、POST、PATCH、DELETE、TRACE),方法支持多选。但API定义好后,如何使用呢?

分析器

SurrealDB Cloud


点击【部署】,提供超多种定价计划:

页面底部,可找到更多定价方案。此处当然选择【Free】档位,进入详情页,部分参数不一致

支持选择5个地区

支持2个大版本的最新版本号:

查看实例,由于Cloud和Studio版本界面差别不大,此处截图Studio。开看到实例概览、Schema、认证、查询、表、函数、参数、API、分析器、指标和日志、设置多个入口菜单。

SurrealDB Web

打开上面提到的Launch in the browser,即打开在线SaaS,界面、布局、功能啥的和SurrealDB Studio一模一样。

推荐使用本地版Studio,数据在本地。

JS SDK

在数据库中编写自定义JS函数,将计算逻辑移至数据层。

CREATE film SET ratings=[{rating:6,user:user:bt8e39uh1ouhfm8ko8s0},{rating:8,user:user:bsilfhu88j04rgs0ga70},],featured=function(){returnthis.ratings.filter(r=>{returnr.rating>=7;}).map(r=>{return{...r,rating:r.rating*10};});};

SurrealQL

-- 建表CREATEcategorySETname='Technology',created_at=time::now();-- 创建指定ID的记录CREATEperson:johnSETname='John Doe',age=30,admin=true,signup_at=time::now();CREATEarticleSETtitle='My First Article',category=(SELECTidFROMcategoryWHEREname='Technology')[0];-- 查询SELECT*FROMarticle;SELECT*FROMperson:john;SELECTtitle,author.name.fullFROMarticleWHEREauthor.age<30FETCHauthor;-- 修改UPDATEperson:johnSETage=31;UPDATEuserWHEREstatus='active'MERGE{ last_login=time::now()};UPSERTuser:aliceSETemail='alice@example.com'ONDUPLICATEKEYUPDATElast_updated=time::now();-- 删除DELETEperson:johnRETURNBEFORE;

SurrealDB支持强类型数据,包括布尔值、字符串、数字(decimal、int、float)、日期时间、持续时间、数组、嵌套对象和GeoJSON地理空间数据。

UPDATEpersonSETwaist=<int>"34",height=<float>201,score=<decimal>0.3+0.3+0.3+0.1;

动态计算字段:将字段定义为future类型,其值仅在查询时计算。

CREATEproductSETname="SurrealDB",launch_at=<datetime>"2021-11-01",countdown=<future>{ launch_at-time::now()};

可定义表的模式(schemafullschemaless),并为字段添加类型、断言(ASSERT)和默认值。

-- 创建一个带模式的表DEFINETABLEuserSCHEMAFULL;-- 指定用户表的字段DEFINE FIELD nameONTABLEuserTYPEobject;DEFINE FIELD name.firstONTABLEuserTYPEstring;DEFINE FIELD name.lastONTABLEuserTYPEstring;DEFINE FIELD emailONTABLEuserTYPEstring ASSERT string::is::email($value);-- 在 email 字段上添加唯一索引,防止重复值DEFINEINDEXemailONTABLEuserCOLUMNSemailUNIQUE;-- 当用户邮箱地址改变时创建一个新事件DEFINE EVENT emailONTABLEuserWHEN$before.email!=$after.emailTHEN(CREATEeventSETuser=$value,time=time::now(),value=$after.email,action='email_changed');

图关系:使用RELATE语句在记录之间创建图边连接。

RELATEuser:tobie->write->article:surrealSETtime.written=time::now();

为表定义细粒度的访问权限,控制用户对数据的选择、创建、更新和删除操作。

DEFINETABLEpost SCHEMALESS PERMISSIONSFORselect-- 已发布的帖子可以被选择WHEREpublished=true-- 用户可以查看自己的所有帖子ORuser=$auth.idFORcreate,update-- 用户可以创建或更新自己的帖子WHEREuser=$auth.idFORdelete-- 用户可以删除自己的帖子WHEREuser=$auth.id-- 或者管理员可以删除任何帖子OR$auth.admin=true;

向量:

-- 定义表{ DEFINETABLEdocuments;DEFINE FIELDtextONdocumentsTYPEstring;DEFINE FIELD embeddingONdocumentsTYPEarray<float,4>;};-- 向量索引DEFINEINDEXOVERWRITE documents_vec_indexONTABLEdocumentsFIELDSembedding HNSW DIMENSION4DIST COSINETYPEF32;{CREATEdocuments CONTENT {text:"foo",embedding:[1f,2f,3f,4f]};CREATEdocuments CONTENT {text:"bar",embedding:[2f,2f,2f,2f]};CREATEdocuments CONTENT {text:"zar",embedding:[5f,4f,3f,2f]};};-- 查询LET $vector=[1f,1f,1f,1f];SELECT*,// knn() uses the distance function from the index(1-vector::distance::knn())ASscore// while the following gets computed independently from the index// vector::similarity::cosine(embedding, $vector) AS similarityOMIT embedding// 忽略embedding字段FROMdocumentsWHEREembedding<|2,40|>$vector;-- 等价函数DEFINEFUNCTIONOVERWRITE fn::search($vector: array<float>){RETURNSELECT*,(1-vector::distance::knn())ASscore OMIT embeddingFROMdocumentsWHEREembedding<|2,40|>$vector;};RETURNfn::search([1f,2f,3f,4f]);

CLI

官方提供

Surrealist

官方提供Surrealist可视化管理客户端,在图形界面里写SurrealQL、浏览数据、检查执行计划。

官网,TypeScript编写、开源(GitHub,1.3K Star,116 Fork)专为SurrealDB设计的数据可视化管理利器,以其直观的操作界面和全面的功能,简化数据库管理的复杂度。

内置变量定义、查询历史记录管理等;强调安全性与灵活性,支持多种认证方式和数据库配置,确保数据安全的同时,赋予用户高度自定义的权限管理能力。

特点

  • 全功能的Web与Desktop体验:通过web app或桌面客户端,用户可随时随地访问和管理数据库
  • 交互式的查询与结果展示:强大的查询视图,支持变量、保存查询和历史追踪
  • 图形化数据库设计:直观的设计师视图,简化复杂模式的设计过程
  • 全面的安全控制:细化的认证与权限管理系统,保证数据的安全性
  • 便捷的本地服务器启动:桌面版允许一键启动SurrealDB本地实例,方便调试与开发
  • 学习与实验友好:内置Sandbox模式,提供零成本的学习环境

打开GitHub Release页面,以Windows系统为例,下载Surrealist_3.9.10_x64-setup.exe,双击安装失败的话,打开PowerShell,手动安装:

实际上就是得到2个.exe文件,一个二进制文件,一个用于卸载。

自带示例数据集这点深得我心

点击下载数据集。遇到的问题,下载失败:

点击注册,使用Google登录,跳转回GUI客户端又失败。

点击概览-连接

点击内置的沙箱(Sandbox),功能设置真贴心:

AI功能主要有2个入口,点击第一个按钮:

有4种方式:

新增连接,和SurrealDB Studio稍微不同

客户端工具点击Memory类型时,认证方式默认切换到匿名(Anonymous)。

由于个人知识误区,切换到【Root】,如上图,并输入默认用户名密码root,遇到问题

SQL当然也执行异常

实际上切换到【匿名】,即可连接到本地内存数据库,执行SQL。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询