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 应用需要一个支持向量检索的数据库,可以关注一下这个项目。