SurrealDB:一个数据库搞定所有数据模型
文章目录
- SurrealDB:一个数据库搞定所有数据模型
- 它到底能干什么
- 部署方式灵活
- SDK 覆盖面广
- 适合什么场景
- 不足之处
- 写在最后
SurrealDB:一个数据库搞定所有数据模型
做后端开发的人大概都经历过这种痛苦:项目里同时要用关系型数据库存结构化数据,用文档数据库存 JSON,用图数据库处理关系查询,再加个 Redis 做缓存。光是维护这些数据库的连接、同步数据、处理一致性问题,就够头疼的。
SurrealDB 想解决的就是这个问题。它用 Rust 写的,把文档、图、关系、时序、地理空间、键值这六种数据模型塞进了一个引擎里。项目在 GitHub 上拿了 3.2 万 Star,关注度不低。
它到底能干什么
SurrealDB 的定位是 multi-model 数据库,但不是那种每样都沾点、每样都不精的类型。它的核心卖点是用一套查询语言 SurrealQL 把所有数据操作统一了。
举个例子,你可以在同一个查询里既做关系型的 JOIN 操作,又走图遍历,还能对文档做嵌套查询。不用在多个数据库之间来回倒腾数据。
它还内置了全文搜索和向量检索,做 AI 应用的时候可以直接在数据库里做相似度计算,不用再单独搭一套 Elasticsearch 或者向量数据库。
权限控制也做得比较细,支持行级别的访问控制。每个用户能看到哪些数据、能改哪些字段,都可以在数据库层面直接定义,不用在业务代码里写一堆 if-else。
部署方式灵活
SurrealDB 是单个 Rust 二进制文件,部署方式很多:
- 直接嵌入到应用里当库用
- 通过 WebAssembly 跑在浏览器里
- 作为独立服务端节点运行
- 组成分布式集群
macOS 用 Homebrew 一行命令装好,Linux 用 curl 脚本安装,Windows 也有对应的安装命令。Docker 也能直接跑,一条命令起来就能用。
对于小项目,单节点内存模式就够了。等业务量上来,再切到分布式集群模式,不用换数据库。
SDK 覆盖面广
官方提供了 Rust、JavaScript、Python、Golang、.NET、PHP、Java 的 SDK,前端也有 WebAssembly 和 Node.js 的支持。基本上主流技术栈都能用。
查询方面,除了自家的 SurrealQL,还支持 GraphQL(开发中)、REST API、WebSocket 上的 JSON-RPC。客户端可以直接连数据库做查询,不用再过一层后端 API,这在实时应用里比较有用。
适合什么场景
从官方文档看,SurrealDB 适合这几类场景:
数据类型复杂的系统。比如电商项目里同时有商品结构化数据、用户行为日志、社交关系图谱,用 SurrealDB 一个库就能覆盖。
AI 应用的数据层。内置向量检索意味着你可以把 embedding 直接存数据库里,做 RAG 的时候不用额外组件。
实时应用。WebSocket 连接加上 live query,数据变了客户端立刻收到推送,适合做协作编辑、实时监控这类功能。
边缘计算。单个二进制加上低内存占用,嵌入到 IoT 设备或者 CDN 节点都行。
不足之处
社区里反馈的问题主要有两个。一是学习成本,SurrealQL 虽然基于 SQL,但扩展了不少语法,需要时间适应。二是生态成熟度,跟 PostgreSQL、MongoDB 这些老牌数据库比,工具链、文档、第三方集成还有差距。
另外,分布式模式目前还在迭代中,生产环境大规模部署的案例不算多。如果你的场景对高可用要求很高,建议先做充分测试。
写在最后
SurrealDB 的思路是对的:用一个数据库统一多种数据模型,减少基础设施的复杂度。Rust 写的性能有保障,部署方式也够灵活。3.2 万 Star 说明社区对这个方向是认可的。
如果你正在被多数据库维护的问题困扰,或者在做 AI 应用需要一个支持向量检索的数据库,可以关注一下这个项目。
认可的。
如果你正在被多数据库维护的问题困扰,或者在做 AI 应用需要一个支持向量检索的数据库,可以关注一下这个项目。