多模态数据库SurrealDB:简介、实战
概述关系型、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。

相关新闻

Nginx安全配置实战:从基础代理到多层拉黑策略

Nginx安全配置实战:从基础代理到多层拉黑策略

1. 项目概述:从“拉黑”需求看Nginx在前端架构中的核心价值 最近在部署一个基于Nuxt.js的服务端渲染应用时,我遇到了一个挺典型的运维需求:如何在前端服务器层面,高效、精准地拦截恶意请求?这个需求在社区里常被简称为…

2026/9/25 13:34:31 阅读更多 →
金融级AI应用实战:从零构建可复现的信用评分预测服务

金融级AI应用实战:从零构建可复现的信用评分预测服务

在实际金融科技项目中,银行和金融机构对人工智能(AI)的投入早已超越概念验证阶段,进入如何将AI能力安全、合规、高效地融入核心业务流程的深水区。无论是用于风险控制的智能风控模型,还是提升客户体验的智能客服&#…

2026/9/25 13:34:27 阅读更多 →
Java Web调试端口冲突:从JPDA原理到Tomcat/WildFly实战解决

Java Web调试端口冲突:从JPDA原理到Tomcat/WildFly实战解决

1. 项目概述:调试端口冲突的典型困境 “无法打开调试器端口 (java.net.SocketException ‘Interrupted function c’)”,这个报错对于任何使用 Tomcat 或 WildFly(现名 WildFly,曾用名 JBoss AS)进行 Java Web 开发的工…

2026/9/23 10:03:30 阅读更多 →

最新新闻

七星卫通技术专业吗

七星卫通技术专业吗

从北斗卫星导航系统完成全球组网,到天通一号卫星移动通信系统建成,国产卫星通信产业从追赶到并跑,从单点突破到体系成型,走过了十余年的攻坚旅程。在这片关乎信息安全、关乎极端场景通信保障的蓝海中,北京七星卫通科技…

2026/9/25 22:58:20 阅读更多 →
太阳能电池板缺陷检测数据集构建与YOLOv8训练避坑指南

太阳能电池板缺陷检测数据集构建与YOLOv8训练避坑指南

简介:太阳能电池板缺陷检测数据集面向计算机视觉研究者与新能源质检开发者,提供2624张300300像素8位灰度图像,覆盖44个太阳能模块的功能性与缺陷电池样本,缺陷包含内在类型(裂纹、断栅、污染等)与外在退化类…

2026/9/25 22:58:20 阅读更多 →
UNSW-NB15网络攻击检测毕设源码实战:从环境配置到部署排坑

UNSW-NB15网络攻击检测毕设源码实战:从环境配置到部署排坑

简介:面向计算机相关专业毕业设计、课程设计与入门实践的机器学习项目资源,围绕 UNSW-NB15 数据集提供网络攻击检测的完整算法实现。数据集涵盖多种现代攻击流量,项目基于经典监督学习思路,集中展示决策树二分类、逻辑回归与 KNN …

2026/9/25 22:58:20 阅读更多 →
OpenClaw-China-Docker微信官方插件接入教程:如何把AI助手装进微信聊天

OpenClaw-China-Docker微信官方插件接入教程:如何把AI助手装进微信聊天

OpenClaw-China-Docker微信官方插件接入教程:如何把AI助手装进微信聊天 【免费下载链接】openclaw-china-docker OpenClaw 的中国IM平台整合Docker版本,预装并配置了飞书、钉钉、QQ机器人、企业微信等主流中国IM软件的插件,让您可以快速部署一…

2026/9/25 22:58:20 阅读更多 →
LDA主题模型关键词提取实战:从分词到gensim调参与避坑指南

LDA主题模型关键词提取实战:从分词到gensim调参与避坑指南

简介:面向文本挖掘与自然语言处理学习者打造的LDA主题建模资源包,聚焦利用潜在狄利克雷分配模型完成关键词与主题词提取,适合需要理解主题模型原理、动手实现文本分析的初学者及研究者,也可应用于新闻聚类、舆情分析与文档主题挖掘…

2026/9/25 22:58:20 阅读更多 →
Nasiko A2A Registry 设计解析:把“Agent 发现“本身做成一个 A2A Agent

Nasiko A2A Registry 设计解析:把“Agent 发现“本身做成一个 A2A Agent

【免费下载链接】nasiko Developer Control Plane for your AI Agents 项目地址: https://gitcode.com/gh_mirrors/na/nasiko 点击查看 免费下载 在 Nasiko(Developer Control Plane for your AI Agents)中,Agent 之间的通信、发…

2026/9/25 22:57:20 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/25 19:27:14 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/25 20:29:09 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/25 19:27:26 阅读更多 →