
概述关系型、nosql、向量数据库、嵌入式、简介官网用Rust写的开源GitHub32.8K Star1.3K Fork多模型数据库把文档、图、关系、时序、地理空间和向量全塞进同一个引擎里对外暴露SurrealQL查询语言语法接近SQL但能同时表达图遍历、向量相似搜索和实时订阅官网文档。功能特性减少开发时间将数据库、查询层、API和认证层整合到一个平台减少对传统后端组件的依赖实时协作API后端服务既是数据库也是API后端服务支持实时协作支持多种查询语言支持从客户端设备进行SQL查询、GraphQL即将推出、ACID事务、WebSocket连接、结构化和非结构化数据、图查询、全文索引和地理空间查询支持WebSocket客户端可订阅数据变化用于实时协同场景细粒度访问控制提供行级权限控制可直接在数据库层定义哪类用户能读写哪些记录精确管理数据访问多模型支持允许开发者使用多种技术存储和建模数据无需预先选择特定方法高级文档间关系通过记录链接和图边连接实现高效的关联查询避免复杂JOIN操作简单模式定义统一数据库和API模式定义简化前端和后端开发直接从客户端连接允许Web浏览器和客户端设备直接连接并查询无需额外API服务层内置权限控制schema支持无模式、严格模式以及混用通过DEFINE TABLE定义支持RELATE关键词建立有向图边图路径查询语法-follows-支持MTREE、HNSW算法创建向量索引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、WSSLocal包括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},],featuredfunction(){returnthis.ratings.filter(r{returnr.rating7;}).map(r{return{...r,rating:r.rating*10};});};SurrealQL-- 建表CREATEcategorySETnameTechnology,created_attime::now();-- 创建指定ID的记录CREATEperson:johnSETnameJohn Doe,age30,admintrue,signup_attime::now();CREATEarticleSETtitleMy First Article,category(SELECTidFROMcategoryWHEREnameTechnology)[0];-- 查询SELECT*FROMarticle;SELECT*FROMperson:john;SELECTtitle,author.name.fullFROMarticleWHEREauthor.age30FETCHauthor;-- 修改UPDATEperson:johnSETage31;UPDATEuserWHEREstatusactiveMERGE{ last_logintime::now()};UPSERTuser:aliceSETemailaliceexample.comONDUPLICATEKEYUPDATElast_updatedtime::now();-- 删除DELETEperson:johnRETURNBEFORE;SurrealDB支持强类型数据包括布尔值、字符串、数字decimal、int、float、日期时间、持续时间、数组、嵌套对象和GeoJSON地理空间数据。UPDATEpersonSETwaistint34,heightfloat201,scoredecimal0.30.30.30.1;动态计算字段将字段定义为future类型其值仅在查询时计算。CREATEproductSETnameSurrealDB,launch_atdatetime2021-11-01,countdownfuture{ launch_at-time::now()};可定义表的模式schemafull或schemaless并为字段添加类型、断言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,timetime::now(),value$after.email,actionemail_changed);图关系使用RELATE语句在记录之间创建图边连接。RELATEuser:tobie-write-article:surrealSETtime.writtentime::now();为表定义细粒度的访问权限控制用户对数据的选择、创建、更新和删除操作。DEFINETABLEpost SCHEMALESS PERMISSIONSFORselect-- 已发布的帖子可以被选择WHEREpublishedtrue-- 用户可以查看自己的所有帖子ORuser$auth.idFORcreate,update-- 用户可以创建或更新自己的帖子WHEREuser$auth.idFORdelete-- 用户可以删除自己的帖子WHEREuser$auth.id-- 或者管理员可以删除任何帖子OR$auth.admintrue;向量-- 定义表{ DEFINETABLEdocuments;DEFINE FIELDtextONdocumentsTYPEstring;DEFINE FIELD embeddingONdocumentsTYPEarrayfloat,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: arrayfloat){RETURNSELECT*,(1-vector::distance::knn())ASscore OMIT embeddingFROMdocumentsWHEREembedding|2,40|$vector;};RETURNfn::search([1f,2f,3f,4f]);CLI官方提供Surrealist官方提供Surrealist可视化管理客户端在图形界面里写SurrealQL、浏览数据、检查执行计划。官网TypeScript编写、开源GitHub1.3K Star116 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。