刚看到 SurrealDB 完成 2300 万美元新一轮融资的消息,我第一反应不是“又一个数据库拿到钱了”,而是觉得:这个从个人开发者圈子里一直口碑不错的多模型数据库,终于要往更核心的基础设施方向冲了。过去几年我折腾过不少数据库方案,从传统关系型到文档型,再到后来为了AI项目搭过一套“Postgres + 向量插件 + Redis缓存”的组合拳。说实话,这套组合能用,但真的很累。SurrealDB 一直想做的是把文档、关系、向量这些模型塞进同一个存储引擎里,再用一套类 SQL 查询语言统一操作,顺带还内置了实时订阅和权限控制。这次融资明确写着用于扩展 AI 原生能力,说明团队不是在蹭概念,而是要在多模型这条路上继续加深。
这篇文章我会从产品设计、核心语法、AI 原生化落地方案、选型对比和融资背后的行业信号这几个角度展开,尽量还原一个从业者的观察,也分享一些我实测下来的体会和踩坑心得。不管你是后端开发、全栈爱好者,还是正在做 AI 应用落地项目的工程师,应该都能从中找到有价值的信息。
1. 这笔融资背后,我在关注什么
1.1 从开发者工具到基础设施的关键一步
这次融资最值得注意的不是金额本身,而是它的用途方向。公告里反复提到一个词:AI 原生。如果说 SurrealDB 早期靠“多模型 + 实时 + 权限”吸引了一波技术尝鲜者,那这一轮的定位显然更明确:要做 AI 时代的数据底座。
在我看来,多模型数据库能拿大额融资,本身就说明了一个问题:开发者对“拼装式数据架构”已经开始疲劳了。过去做一个带 AI 功能的业务系统,你得同时维护关系型数据库存业务数据、向量数据库存 Embedding、Redis 做缓存和实时状态,还要在应用层写一堆同步逻辑。这套架构不是不能跑,但每一层之间都有沟通成本,数据一致性、部署复杂度、运维成本都会跟着涨。
SurrealDB 的思路是把这个栈收编成一个产品。文档记录和关系可以用同一套语法操作,向量搜索直接建立在记录之上,实时的需求则交给内建 Live Query 去处理。对中小团队和独立开发者来说,这种收敛非常友好,因为它把“架构选型”这件事从组合题变成了填空题。融资之后,团队有钱扩充引擎性能、分布式能力和周边生态了,这对于想在生产环境使用的人来说是个积极信号。
1.2 AI原生不是营销词,而是工程选择
很多人听到“AI原生数据库”会觉得是个营销标签,但如果你拆开看 SurrealDB 对 AI 原生支持的技术布局,会发现它确实是一个工程选择,不是贴上去的时髦词。
核心在于,AI 应用的数据需求通常是三类混合的:一类是业务实体之间的复杂关系,比如用户、订单、商品;一类是非结构化内容,比如文章的正文、评论的文本;还有一类是语义信息,也就是把文本或图片转成的向量 Embedding。传统数据库擅长处理第一类和第二类的某一个侧面,但很少原生支持第三类。你通常需要引入额外组件,把向量数据放在另一个存储里。
SurrealDB 直接引入了向量索引的类型,在同一个表结构里可以定义普通的string字段,也可以定义VECTOR字段。这意味着“业务数据”和“语义数据”从创建的第一刻就拥有同一个生命周期,不需要在应用层去同步两份数据。这个设计对 AI 项目的意义很大,尤其是做 RAG(检索增强生成)或者语义搜索的时候。向量不再是一个附属品,而是业务模型的一部分,天然随记录一起更新、一起查询。
另外,它的 Live Query 能力也不是传统数据库那种“定时轮询 + 心跳检查”的伪实时。它支持在客户端发起一个持续查询,当数据变更时服务器主动推送变更结果,这正好适合 AI 应用里常见的聊天消息推送、流式响应状态更新、推荐结果刷新等场景。一个数据库同时把查询、实时、向量、权限做完,这才是我理解的“AI 原生”。
2. 多模型数据库到底多在哪里
2.1 文档、关系、向量在一个存储层里共存
多模型数据库不是一个特别新的概念,但过去很多实现是“多个引擎包装成一个入口”,底层依然是各管各的存储。SurrealDB 比较有意思的点是:它让不同的数据模型在同一个记录(Record)上共存,这会让数据建模方式发生质的变化。
你可以这样理解:在传统设计里,一个用户资料如果有标签、地址、社交关系三种不同类型的数据,你通常要拆成三张表,然后用外键关联,查询时要 JOIN。在 SurrealDB 里,一个用户 Record 本身就可以是一个复杂文档,可以带OBJECT类型的字段,也可以直接关联其他 Record。更关键的是,这条记录还能被当作图结构里的一个节点,通过RELATE语句和另一条记录建立带类型的关系。
这种设计的好处在于,当你做 AI 类应用时,数据的自然形态往往就是混合的。比如一个聊天记录,既需要结构化的 sender、timestamp 字段,也需要保存完整的消息文本,还需要给这条消息一个向量用于语义检索。如果你用传统方案,可能要建两张表或者三个存储,而在 SurrealDB 里,这只是一个记录上的不同字段。索引可以加到这些字段上,查询也可以在一条语句里把结构化条件、向量距离、关联关系全部表达出来。
2.2 实时能力不是附加功能,而是核心设计
我第一次接触 SurrealDB 的 Live Query 时,第一感受是“这不就是给数据库加了事件订阅吗”。后来真正在项目里用起来才明白,它其实是把“被动查询”和“主动推送”统一到了一套语法里。
设想一个在线 AI 客服场景:客户端发来一条消息,服务端调用大模型生成回复,回复内容逐步写下数据库;同时,后台需要实时更新一个“当前会话状态”的面板。如果是传统架构,你要么轮询数据库,要么让服务端处理完大模型调用后主动推送 WebSocket 消息。无论哪种,数据库本身并不感知“实时”的存在,实时逻辑全在应用层手工维护。
SurrealDB 的 Live Query 让数据库自己参与这个环节。你可以写一句持续查询,订阅某个条件下的记录变化,数据一变,客户端立刻就能收到新数据。这里的实现细节我不展开,但方向上,它把实时能力从“组件组合”变成了“数据库内置能力”。好处不仅是少写代码,更重要的是逻辑变得简单,你不会遇到“轮询太频繁导致数据库压力大”还是“轮询太稀疏导致体验延迟”这类两难问题。
2.3 权限内置:数据库自己就能守住业务边界
还有一个容易被低估的设计:记录级权限。我在早期用 SurrealDB 的时候,对这个能力印象最深,因为它直接把“数据归属”的概念做进了数据库内核。
很多 NoSQL 数据库做权限只能到表级别,甚至只有“可读 / 可写”两种账号权限。这种粗粒度权限对业务型应用来说远远不够。SurrealDB 允许你在定义一张表时,直接为 select、create、update、delete 各写一套条件,比如用户只能查询自己创建的内容,删除时必须满足某个字段等于当前登录用户 ID。这套权限判断发生在数据库内部,不依赖应用层过滤,也不依赖复杂的中间件。
对于 AI 应用来说,这一点非常关键。因为 AI 项目经常要暴露一个面向终端用户的操作接口,比如聊天记录查询、个性化推荐内容,如果数据库底层没有记录级隔离,你就得在应用层仔细地给每个查询附加 “where user_id = 当前用户” 条件。一旦漏掉一个,就是数据泄露事故。SurrealDB 把这道防线下沉到了数据库层,减少了很多心智负担。而且权限可以与 Live Query 一起使用,意味着实时推送的内容也经过权限校验,订阅者只会收到自己有权看到的数据。
3. 从一个查询说起:SurrealQL 的体验
3.1 为什么需要一套统一的查询语言
SurrealDB 没有沿用 MongoDB 的 JSON 查询风格,也没有完全照搬 SQL,而是推出了自己的 SurrealQL。第一次接触的人可能会觉得多学一门语言是成本,但我用下来反而觉得是收益。
原因在于,JSON 查询对象在表达复杂关系时会变得非常绕,尤其当你要同时处理嵌套文档和图关系时,一层套一层的对象非常难读。SQL 虽然表达能力强,但它是为关系型范式设计的,处理嵌套文档时会显得别扭,而且标准 SQL 对图的表达几乎为零。SurrealQL 走的是“语法上接近 SQL,语义上同时覆盖文档和关系”的路线。你可以用它写类似 SQL 的过滤条件,也可以用->friend->这样的语法直接沿着关系链取数据。
从这个设计能看出团队的目标:尽量降低关系型数据库开发者的迁移成本,同时避免在文档型和图型之间做笨拙的翻译层。我自己在从 PostgreSQL 迁移一个小项目时,大部分查询语句只需要微调就能跑起来,这种“迁移低摩擦”是实实在在的体验优势。
3.2 定义一个带向量的表到底有多简单
直接在 SurrealDB 里定义一张带向量字段和索引的表,整个过程可以用一段 SurrealQL 描述清楚。我用一段示意代码来说明,注意不同版本对向量索引的具体写法可能稍有差异,动手之前先对照官方文档。
DEFINE TABLE message SCHEMAFULL; DEFINE FIELD user_id ON message TYPE string; DEFINE FIELD chat_id ON message TYPE string; DEFINE FIELD content ON message TYPE string; DEFINE FIELD embedding ON message TYPE VECTOR DIM 1536; DEFINE INDEX idx_embedding ON message FIELDS embedding TYPE VECTOR DIM 1536; DEFINE INDEX idx_chat_time ON message FIELDS chat_id, created_at;这段代码做了什么?第一,创建一张message表并指定为严格模式,字段必须按定义写入。第二,定义embedding为 1536 维的向量字段,这正好是很多常见 Embedding 模型的默认输出维度。第三,创建一个向量索引,后续做相似度搜索时就能用到。第四,创建一个普通索引,用于按会话和时间快速检索。
如果放在传统方案里,你需要做的是:在一张业务库建一张表,又在向量数据库里建一个 collection,然后把主键和向量对应同步起来。这里只需要一段 SurrealQL,数据的所有语义都在同一个地方,后续写入或者更新一条记录,向量字段自动跟着记录走,不需要额外的同步代码。这个体验对 AI 应用开发来说真的很加分。
3.3 实时订阅与权限共同作用的形态
下面是一段示意 Live Query 和权限共同使用的 SurrealQL 表达,展示它们在工程里如何配合。
DEFINE TABLE message PERMISSIONS FOR select, update WHERE user_id = $auth.id FOR create WHERE $auth.id != NONE FOR delete WHERE false; LIVE SELECT * FROM message WHERE chat_id = "room_1";我把 Live Query 写在了已经定义权限的表上。从业务角度理解,这个查询的用户只能收到属于自己的消息,即使订阅条件写的是chat_id = "room_1",底层权限也会根据当前登录用户的身份进行过滤。这套机制对 AI 聊天室、协同编辑、实时推荐场景都很实用,因为实时通道最容易因为忘记过滤而把不该公开的数据推给外部。
从工程维护角度考虑,把权限集中在数据库层还有一个隐藏好处:你的服务端代码里不需要到处检查“这个人能不能看到这条记录”。业务代码专注于业务逻辑,安全边界交给数据库。这不是说应用层可以完全不校验,而是说多了一个坚实的兜底防线,出问题的概率会小很多。
4. AI 原生能力是怎么落地的
4.1 向量索引与最近邻搜索的原理
要让 AI 原生能力在数据库里真正落地,光能存向量是没有意义的,核心是要能高效地做最近邻搜索(ANN,Approximate Nearest Neighbor)。传统数据库的索引比如 B-Tree,擅长的是精确查找和范围查找,但向量搜索要求的是“在高维空间里找到距离最近的 k 个点”,这是一种完全不同形态的检索需求。
SurrealDB 对向量索引的支持意味着它的存储引擎里加入了专门为高维向量设计的数据结构。我不过度展开内部实现,但从使用者的角度,你只需要知道:创建 VECTOR 索引之后,查询系统可以用“近似最近邻”的方式快速召回与目标向量最接近的记录。这种检索不需要遍历全表,速度会比暴力扫描快几个数量级。
实际项目中,你会在写入记录时同时写入一段文本的 Embedding。当用户输入一个问题时,先用同一个 Embedding 模型把问题转成向量,然后用这个向量去数据库里做最近邻搜索,召回最相关的文档片段。这个流程是 RAG 的核心链路,SurrealDB 把链路里最容易出问题的“向量存储与检索”直接内置了。
4.2 从静态查询到动态更新
传统做法里,向量数据的更新是个麻烦事。比如一篇文章被编辑了,文本变了,Embedding 要重新生成,然后要找到向量数据库里对应的记录更新。如果更新逻辑写得不好,就可能出现业务库里文章已经是新版本,向量库里还是旧版本的尴尬情况,检索结果自然也不准确。
SurrealDB 里,向量字段只是记录的一个普通字段。当业务逻辑更新一条记录时,向量字段也会随之更新。这意味着你可以非常自然地把“Embedding 重新生成”这个动作挂在记录的更新流程里:服务端拿到新版文本,调用模型生成新向量,通过一条 UPDATE 语句更新到对应记录上,所有索引同步调整。不需要你在两个系统里做“双写”。
这个设计的价值在 AI 应用里是持续的。比如知识库类产品的文档经常会被修改,如果每次修改都要同步到外部向量库,你要维护一套清晰的同步机制。而 SurrealDB 把这个机制消灭掉了,更新记录和更新向量是同一个原子操作,一致性天然有保障。
4.3 一个 RAG 场景的完整数据流
为了更容易理解 AI 原生多模型数据库在真实系统中的角色,我画了一条数据流来描述一个知识库问答应用的工作方式。
- 文档入库阶段:一篇新文档进入系统,服务端提取文本,调用 Embedding 模型生成向量,然后用一条 CREATE 语句把文本、标题、向量、作者等字段一起写入 SurrealDB。
- 检索阶段:用户提出一个问题,服务端先用 Embedding 模型把问题转成向量,再用向量距离函数在文档表里查找与问题语义最接近的若干篇文档。
- 权限过滤阶段:如果文档需要按用户可见范围控制,查询结果会基于记录级权限自动过滤,用户只能看到自己有权限访问的内容。
- 上下文构建阶段:把检索到的文档片段连同用户问题一起拼接成 Prompt,发送给大模型。
- 结果回写阶段:大模型生成的回答可以写入对话记录表,同时为这条回答生成向量,方便后续“相关推荐”和“相似问题自动归类”等功能使用。
在这个数据流里,SurrealDB 承担了业务数据存储、向量检索、权限控制、实时推送等多项职责。你会发现,一个完整的 RAG 应用,居然可以做到只用一套存储系统就把核心链路串起来,这在之前是需要“多套系统 + 大量胶水代码”才能实现的事情。用我的话说,就是“复杂度被数据库本身消化了,而不是转移给了开发者”。
5. 横向对比:新老方案怎么选
5.1 传统组合方案的代价
在 SurrealDB 这类产品成熟之前,大家做 AI 应用的数据层普遍是“拼装”思路。我用一个表格来对比几种常见方案的特点,方便你看清各自的优劣。
| 方案组合 | 优点 | 主要代价 |
|---|---|---|
| 关系型数据库 + 独立向量库 | 关系型数据管理成熟,向量库专注度高 | 两套存储的同步逻辑复杂,事务一致性难保证 |
| 文档数据库 + 独立向量库 | 文档模型灵活,适合快速迭代 | 关系表达弱,数据访问需要应用层处理 |
| 云数据库 + 插件式向量扩展 | 复用现有运维体系,上手快 | 写入放大、索引资源消耗控制需要调优 |
| 全托管后端平台 | 交付速度快,免运维 | 灵活性受限,数据模型可能不够贴近业务 |
| SurrealDB 类型的多模型方案 | 一套存储、一套查询,天然支持向量与实时 | 生态相对年轻,周边工具链还在建设中 |
看到这个表格,我并不是说传统组合方案没有价值,而是想强调复杂度取舍。如果你的团队有很强的数据基础设施能力,拼装方案完全可行;但如果你更希望“让数据库自己把事干了”,多模型方案会在减少系统数量方面带来明显收益。
5.2 什么场景适合直接上 SurrealDB
我把适合直接选 SurrealDB 的场景整理了一下,供你对照参考。
- AI 聊天与消息系统:需要记录聊天气泡的结构化信息、保存完整文本、为语义记忆生成向量、实时推送新消息,这些需求正好命中多模型与 Live Query 的能力范围。
- 知识库与 RAG 应用:需要把文档正文、元数据和向量放在一起管理,更新链路要短,权限边界要清晰,SurrealDB 的向量字段和记录级权限非常合适。
- 实时仪表盘与监控面板:需要订阅数据变更并实时刷新前端展示,Live Query 直接推数据,省掉了 WebSocket 服务端推送那一坨逻辑。
- 中小型业务系统:既有用户、订单这类关系数据,又有商品描述、评论等非结构化内容,还希望未来能加语义搜索,一套数据库搞定可以先跑起来再演进。
对于这些场景,我的建议是先把核心表和查询逻辑用 SurrealQL 写出来验证一遍,不需要很久,你就能直观感受到“少维护一个系统”是否值得。
5.3 什么情况建议再等等
也有几种情况,我会建议你再观望,不要贸然迁移。
- 已经全面依赖某一种数据库的成熟生态,比如用了大量存储过程、复杂事务脚本、专有的备份恢复工具,迁移成本会比较高。
- 需要非常细粒度、经过长时间验证的分布式运维能力,比如跨地域强一致、超大规模分区,需要确认 SurrealDB 的集群方案在这个阶段是否完全匹配你的运维标准。
- 工具链依赖很深,比如团队已经习惯了某套 BI 报表系统直接连业务库,换了查询语言后报表工具无法直接适配,需要评估额外开发量。
这不是说 SurrealDB 做不到这些,而是说任何技术选型都要考虑“迁移成本 + 团队熟悉度”。新项目、小项目可以大胆用,存量复杂系统建议先用旁路方式做试点,验证没问题后再逐步扩大范围。
6. 融资 2300 万美元背后的行业风向
6.1 资本为什么盯上“开发者体验型数据库”
这次融资释放的一个信号,是资本越来越愿意为“开发者体验型基础设施”买单。过去,数据库融资往往集中在性能指标上,比如 TPS、延迟、容量。但这一轮 SurrealDB 强调的重点是 AI 原生的多模型体验,这更像是为下一个开发者时代的入口占位。
我理解这个逻辑:AI 应用开发的最大瓶颈不是模型能力,而是“把模型接进业务系统”的工程复杂度。如果你能让开发者用一个数据库就把数据、向量、实时、权限全搞定,相当于降低了 AI 应用开发的整体门槛。这样一来,数据库就不只是存储工具,而是 AI 应用的操作系统底座。资本看中的正是这份“入口价值”。
换句话说,融资不是终点,是加速器。拿到钱之后,SurrealDB 大概率会在分布式能力、性能优化、周边文档和工具生态上投入更多,让我们这些使用者受益。
6.2 应用场景正在被 AI 应用快速拉大
融资新闻里提到 AI 原生的定位,我想提供一些真实场景作为佐证。除了之前反复提的知识库问答,还有几个方向值得关注。
AI 个性化推荐是一个例子。推荐系统需要把用户的行为序列、商品属性和向量化兴趣偏好放在一起联合查询。在 SurrealDB 里,用户行为记录可以是文档,商品之间的关联可以是图关系,用户的兴趣偏好可以通过向量字段表示,三者在同一条查询语句里可以统一处理。
另一个场景是智能助手。这类产品往往需要保存多轮对话状态、按用户维度做实时会话推送,同时还要支持“语义记忆”,也就是事后根据内容相似度召回相关历史对话。如果分多个存储,代码会非常散;而 SurrealDB 的原生多模型能力正好匹配会话数据、语义向量、实时推送的三重特征。
第三个场景是复杂网络分析,比如安全告警关联、社交网络传播路径分析。传统的建表加 JOIN 方式在图谱深链查询上非常痛苦,而 SurrealDB 的图关系语法在这种场景下会节省很多 SQL。虽然纯图数据库重,但如果你只是在一个多模型数据库里用到轻量级图能力,这其实是性价比非常高的选择。
6.3 现实中要坦诚面对的坑
最后我想说几句实在话。再好的技术方案也有它当前阶段的局限性,不把这些讲清楚,选型参考就没意义。
第一个坑是生态成熟度。相比耕耘多年的老牌数据库,SurrealDB 的周边工具、第三方接入、教程案例数量还有差距。遇到冷门问题时,你可能要依赖官方文档和社区讨论,而不是随便一搜就能找到答案。遇到这种情况,我的建议是先在本地环境反复试验,把不确定的点通过官方仓库的 issue 或 Discord 社区确认了再上生产。
第二个坑是性能预期管理。多模型数据库的功能丰富必然意味着某些单一路径上不如专用数据库极致,比如超大规模向量场景下的检索吞吐,可能不如专门优化的向量数据库。但我认为关键是看你的实际数据量级,90% 的项目根本到不了性能瓶颈程度,在这之前,“简单好用”带来的开发效率收益会更大。
第三个坑是 SurrealQL 的版本演进。这门语言还比较年轻,不同版本间可能存在语法调整。升级版本前要仔细看变更记录,甚至先在测试环境把核心查询都跑一遍。我自己就有过升级小版本后某些索引写法需要修改的经历,所以提醒每一位准备认真使用的人,把版本变更当回事。
综合来看,2300 万美元融资是 SurrealDB 走向更大舞台的注脚,但对普通开发者来说,最有价值的是它代表的技术路线:数据、向量、实时、权限,正在收敛到同一个系统里。
我个人在实际使用中的体会是:不要一开始就想着用它替换所有存量系统,选择一个新项目或者一个独立模块作为试验田,把文档、向量、实时这三者的组合体验跑起来,你会很快感受到多模型数据库的魔力。等到你习惯了“一条查询同时搞定业务条件和语义相似度”之后,再回头看那些需要维护两套存储的日子,大概就很难回去了。
最后分享一个小经验:从零开始接触 SurrealDB 时,可以先不着急写业务代码,花半小时把官方自带的沙箱环境玩清楚,尤其是多模型定义和 Live Query 的部分。理解这几个概念后,再去写应用会顺很多。等真正上手了你就会发现,数据库原来也可以为 AI 时代设计得这么顺手。