Tigris:下一代无服务器数据库
先问一个问题:你用过 MongoDB 吗?如果用过,那你大概率也经历过分片集群配到崩溃、半夜被扩容告警叫醒的日子。
说实话,我第一次接触 Tigris 的时候,脑子里就一个想法——这不就是我一直想要的 MongoDB 替代品吗?完全兼容 MongoDB 协议,却自带无服务器架构和全球分布式能力,不用写一行分片配置。
引用
传统数据库运维有三座大山:扩缩容、高可用、全球部署。
MongoDB 虽然好用,但上了生产就得面对这些问题。分片键选错了,数据倾斜,热点问题把你折磨得死去活来。想做多区域部署,光是网络规划和副本集配置就能写一本操作手册。
更扎心的是成本。你得为峰值流量预留资源,可大部分时间这些机器都在摸鱼。根据 Flexera 2024 云状态报告,企业自建数据库的平均资源利用率只有 35% 左右。剩下的 65%,都是白白烧掉的钱。
开发者真正想要什么?一个能自动伸缩、按用量付费、全球部署还不用自己操心的数据库。Tigris 就是冲着这个来的。
Tigris 到底怎么做到的
Tigris 的核心架构分三层,每一层都值得细说。
存储层:FoundationDB 打底
Tigris 选择 FoundationDB 作为底层存储引擎,这个决策非常聪明。FoundationDB 是 Apple 开源的分布式 KV 存储,在金融和游戏中用了几十年,事务一致性经过充分验证。它自带确定性模拟测试框架,代码质量极高。
Tigris 把文档数据序列化后存入 FoundationDB,所有 CRUD 操作最终都转化为 KV 操作。这意味着 Tigris 天然继承了 FoundationDB 的 ACID 事务、自动分片和故障转移能力。
计算层:无服务器查询引擎
查询层是 Tigris 自己写的,用 Rust 开发。Rust 的选择也很讲究——零成本抽象、内存安全、极致性能,做数据库再合适不过。
查询引擎收到 MongoDB 协议的请求后,先做查询解析和优化,然后并行地从 FoundationDB 读取数据,在内存中完成过滤、排序、聚合,最后按 MongoDB 协议格式返回。
因为是计算存储分离架构,查询引擎可以独立扩缩容。流量上来时自动拉起更多实例,流量下去时自动回收。你完全不用管。
控制面:全局元数据管理
Tigris 的控制面负责数据库、集合、索引的创建与管理,以及多区域数据同步策略。
它把数据库抽象成"项目"(Project),每个项目可以关联多个"分支"(Branch)。分支概念借鉴了 Git,你可以给数据库创建开发分支、测试分支,改完后再合并到生产。这个设计对 CI/CD 流程极其友好。
对比分析:Tigris vs MongoDB Atlas vs PlanetScale
| 维度 | Tigris | MongoDB Atlas | PlanetScale |
|---|
| 开源协议 | Apache 2.0 | SSPL | Apache 2.0 |
| 无服务器 | 原生支持 | 有 Serverless 版 | 原生支持 |
| 协议兼容 | MongoDB 协议 | 原生 | MySQL 协议 |
| 全球分布 | 原生多区域 | 需额外配置 | 原生多区域 |
| 分支功能 | 原生 Git 风格分支 | 无 | 数据库分支 |
| 自托管 | 支持 | 企业版支持 | 不支持 |
Tigris 的独特卖点在于:它既兼容 MongoDB 协议(迁移成本极低),又原生支持无服务器和全球部署,同时还完全开源。
MongoDB Atlas Serverless 虽然也免运维,但底层架构还是传统副本集那一套,冷启动延迟较高,而且 SSPL 协议在有些场景下存在合规风险。
PlanetScale 也很优秀,但它绑定了 MySQL 协议。如果你的技术栈是 Node.js / MongoDB 生态,迁移成本会很高。
实践指南:5 分钟上手 Tigris
下面用 Docker 本地跑一个 Tigris 实例,然后用 MongoDB 客户端直接连接。
第一步:拉镜像并启动
docker run -d \
--name tigris \
-p 27017:27017 \
tigrisdata/tigris:latest
就这么简单,一个容器搞定。不需要配置副本集,不需要初始化分片,不需要创建用户——Tigris 默认无认证,本地开发直接连。
第二步:用 mongosh 连接
mongosh mongodb://localhost:27017
你会看到熟悉的 MongoDB Shell 提示符。但此时连的已经是 Tigris,不是 MongoDB。
第三步:创建数据库和集合
use myapp
db.users.insertOne({
name: "张三",
email: "zhangsan@example.com",
age: 28,
tags: ["python", "rust"]
})
db.users.find({ age: { $gte: 25 } })
增删改查、索引、聚合管道,MongoDB 的 API 基本都能用。Tigris 目前支持 MongoDB 5.0 协议的大部分操作。
第四步:创建索引
db.users.createIndex({ email: 1 }, { unique: true })
db.users.getIndexes()
索引创建也是标准的 MongoDB 语法,背后 Tigris 会自动在 FoundationDB 中建立对应的二级索引。
进阶:多区域部署
Tigris 的生产部署支持多区域数据同步,通过项目配置文件指定区域:
# tigris.yaml
name: myapp-prod
regions:
- aws-us-east-1
- aws-eu-west-1
- aws-ap-southeast-1
配置提交后,Tigris 控制面会自动在三个区域部署实例,并建立数据同步通道。写入请求会同步复制到所有区域,读请求就近访问,延迟降到最低。
适用场景
Tigris 特别适合这几类项目:
- Serverless 应用:部署在 Vercel / Netlify / Cloudflare Workers 上的应用,配合 Tigris 的无服务器特性,真正做到全栈免运维。
- 全球多区域 SaaS:用户分布在不同大洲,Tigris 原生多区域同步能显著降低读写延迟。
- 快速原型与 MVP:不用纠结数据库架构,一个容器/一个云实例就能跑起来,后续无缝扩展到全球。
- 现有 MongoDB 项目迁移:如果你已经在用 MongoDB,迁移到 Tigris 的成本极低,改个连接串就行。
局限与注意事项
Tigris 目前还在快速迭代中,有几个点需要注意:
事务支持局限在单文档和有限的多文档场景,复杂的跨集合事务还不如 MongoDB 成熟。部分聚合管道的 Stage 尚未完全支持,比如 $lookup 在跨区域场景下可能有性能问题。自托管方案文档还不够完善,生产环境建议优先使用 Tigris Cloud。
总结
Tigris 做对了一件事:它没有重新发明数据库,而是在成熟协议和成熟存储引擎之上,构建了一套真正云原生的无服务器架构。
你得到的是 MongoDB 的开发体验、FoundationDB 的可靠性、以及无需操心的弹性伸缩。这三样东西放在一起,对开发者的吸引力是致命的。
如果你正在选型下一款数据库,或者受够了 MongoDB 的运维负担,值得花一个下午试试 Tigris。
参考资料
GitHub:GitHub - tigrisdata-archive/tigrisdb: Tigris is a globally distributed, multi-cloud object storage service with built-in support for the S3 API. It uses Dynamic Data Placement and Access-Based Rebalancing to deliver low-latency access worldwide — without the need to manage replication or caching. · GitHub官网:https://www.tigrisdata.com
更多推荐



所有评论(0)