PlanetScale 简介 #

什么是无服务器数据库? #

在了解 PlanetScale 之前,我们需要先理解"无服务器数据库"(Serverless Database)的概念。无服务器数据库是一种云数据库服务模式,用户无需管理服务器基础设施,只需关注数据库本身的使用。

text
┌─────────────────────────────────────────────────────────────┐
│                    传统数据库 vs 无服务器数据库                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   传统数据库:                                                │
│   ┌─────────┐     ┌─────────┐     ┌─────────┐              │
│   │ 购买服务器│ ──> │ 安装配置 │ ──> │ 运维管理 │              │
│   └─────────┘     └─────────┘     └─────────┘              │
│   ❌ 需要预估容量                                            │
│   ❌ 需要运维人员                                            │
│   ❌ 扩展困难                                                │
│   ❌ 高可用复杂                                              │
│                                                             │
│   无服务器数据库:                                            │
│   ┌─────────┐     ┌─────────┐                               │
│   │ 创建数据库│ ──> │ 直接使用 │                               │
│   └─────────┘     └─────────┘                               │
│   ✅ 自动扩展                                                │
│   ✅ 无需运维                                                │
│   ✅ 按需付费                                                │
│   ✅ 内置高可用                                              │
│                                                             │
└─────────────────────────────────────────────────────────────┘

什么是 PlanetScale? #

PlanetScale 是一个无服务器 MySQL 数据库平台,专为现代云原生应用设计。它基于 Vitess 构建,提供了数据库分支、非阻塞 Schema 变更、自动扩展等强大功能。

核心定位 #

text
┌─────────────────────────────────────────────────────────────┐
│                      PlanetScale                             │
├─────────────────────────────────────────────────────────────┤
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │  无服务器    │  │  MySQL 兼容  │  │  数据库分支  │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │  零停机迁移  │  │  自动扩展    │  │  高可用性    │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
└─────────────────────────────────────────────────────────────┘

PlanetScale 的历史 #

发展历程 #

text
2010年 ─── Vitess 项目启动
    │
    │      YouTube 内部开发
    │      解决 MySQL 扩展问题
    │
2018年 ─── Vitess 开源
    │
    │      CNCF 孵化项目
    │      社区快速发展
    │
2021年 ─── PlanetScale 成立
    │
    │      Vitess 核心团队创建
    │      提供托管服务
    │
2022年 ─── PlanetScale 正式发布
    │
    │      数据库分支功能
    │      免费套餐推出
    │
至今   ─── 快速发展
    │
    │      企业客户增长
    │      功能持续完善

Vitess 的背景 #

Vitess 是 YouTube 开发的 MySQL 数据库集群管理工具,用于解决 YouTube 海量视频数据的存储和查询问题:

指标 数据
每日查询量 数十亿次
数据量 PB 级别
MySQL 实例 数千个
运行时间 10+ 年

PlanetScale 的核心特点 #

1. 数据库分支 #

PlanetScale 最具创新性的功能是数据库分支,类似于 Git 的代码分支:

text
┌─────────────────────────────────────────────────────────────┐
│                    数据库分支示意                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│                    ┌─────────────┐                          │
│                    │   main      │                          │
│                    │  (生产分支)  │                          │
│                    └──────┬──────┘                          │
│                           │                                 │
│           ┌───────────────┼───────────────┐                │
│           │               │               │                │
│           ▼               ▼               ▼                │
│    ┌─────────────┐ ┌─────────────┐ ┌─────────────┐        │
│    │  feature-a  │ │  feature-b  │ │  hotfix     │        │
│    │  (开发分支)  │ │  (开发分支)  │ │  (修复分支)  │        │
│    └─────────────┘ └─────────────┘ └─────────────┘        │
│                                                             │
│    每个分支可以独立进行 Schema 变更                          │
│    变更完成后通过 Deploy Request 合并到 main                 │
│                                                             │
└─────────────────────────────────────────────────────────────┘

分支的优势:

text
✅ 隔离开发
   - 开发分支不影响生产数据
   - 可以自由测试 Schema 变更
   - 团队成员并行开发

✅ 安全部署
   - 变更经过审核
   - 自动检测冲突
   - 支持回滚

✅ 版本控制
   - Schema 变更有历史记录
   - 可以追溯每次变更
   - 类似 Git 的工作流

2. 非阻塞 Schema 变更 #

传统的 MySQL DDL 操作会锁表,导致服务中断:

text
┌─────────────────────────────────────────────────────────────┐
│                    传统 DDL vs PlanetScale                   │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  传统 MySQL DDL:                                            │
│                                                             │
│  ALTER TABLE users ADD COLUMN age INT;                      │
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  表锁定中...  ████████████████████████  阻塞写入    │   │
│  │  大表可能需要数小时                                   │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  PlanetScale:                                              │
│                                                             │
│  创建分支 -> 执行 DDL -> Deploy Request -> 自动应用          │
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  在线变更  ░░░░░░░░░░░░░░░░░░░░░░░░░░░  不阻塞写入  │   │
│  │  后台执行,用户无感知                                 │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

3. 自动扩展 #

text
┌─────────────────────────────────────────────────────────────┐
│                    自动扩展机制                               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  读取扩展:                                                  │
│                                                             │
│  ┌─────────┐     ┌─────────┐     ┌─────────┐              │
│  │  App    │────>│ 读取副本1│     │ 读取副本2│              │
│  └─────────┘     └─────────┘     └─────────┘              │
│       │               │               │                    │
│       │          ┌────┴───────────────┘                    │
│       │          │                                         │
│       ▼          ▼                                         │
│  ┌─────────────────────────────────────────────────────┐  │
│  │                   主数据库                            │  │
│  └─────────────────────────────────────────────────────┘  │
│                                                             │
│  写入扩展:                                                  │
│  - 分片(Sharding)                                         │
│  - 自动数据分布                                              │
│  - 透明路由                                                  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

4. 高可用性 #

text
┌─────────────────────────────────────────────────────────────┐
│                    高可用架构                                 │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                      应用层                          │   │
│  └───────────────────────┬─────────────────────────────┘   │
│                          │                                  │
│                          ▼                                  │
│  ┌─────────────────────────────────────────────────────┐   │
│  │              PlanetScale 代理层                      │   │
│  │         (自动故障转移、负载均衡)                      │   │
│  └───────────────────────┬─────────────────────────────┘   │
│                          │                                  │
│           ┌──────────────┼──────────────┐                  │
│           │              │              │                  │
│           ▼              ▼              ▼                  │
│    ┌─────────────┐ ┌─────────────┐ ┌─────────────┐        │
│    │   主节点     │ │   副本1     │ │   副本2     │        │
│    │  (Primary)  │ │  (Replica)  │ │  (Replica)  │        │
│    └─────────────┘ └─────────────┘ └─────────────┘        │
│                                                             │
│    主节点故障时自动切换到副本                                │
│    99.95% SLA 可用性保证                                    │
│                                                             │
└─────────────────────────────────────────────────────────────┘

PlanetScale vs 其他数据库服务 #

对比分析 #

特性 PlanetScale AWS RDS Google Cloud SQL Supabase
数据库分支
非阻塞 DDL
自动扩展 部分 部分
MySQL 兼容 ❌ (PostgreSQL)
无服务器
免费套餐

选择建议 #

text
┌─────────────────────────────────────────────────────────────┐
│                    选择指南                                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  选择 PlanetScale 的场景:                                   │
│  ✅ 需要数据库分支功能                                      │
│  ✅ 频繁进行 Schema 变更                                    │
│  ✅ 团队协作开发                                            │
│  ✅ 需要零停机迁移                                          │
│  ✅ Serverless / JAMstack 应用                              │
│  ✅ 与 Vercel/Netlify 集成                                  │
│                                                             │
│  选择其他方案的场景:                                        │
│  ✅ 需要存储过程、触发器(PlanetScale 不支持)              │
│  ✅ 需要 PostgreSQL 特有功能                                │
│  ✅ 已深度绑定 AWS/GCP 生态                                 │
│                                                             │
└─────────────────────────────────────────────────────────────┘

PlanetScale 的限制 #

不支持的功能 #

text
⚠️ 外键约束
   - 为了支持分片,不强制外键
   - 需要在应用层处理关系

⚠️ 存储过程和触发器
   - 不支持存储过程
   - 不支持触发器
   - 业务逻辑应在应用层

⚠️ 某些 SQL 特性
   - 不支持 SAVEPOINT
   - 不支持 XA 事务
   - 部分函数受限

解决方案 #

text
┌─────────────────────────────────────────────────────────────┐
│                    替代方案                                   │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  外键约束:                                                  │
│  - 在应用层验证数据关系                                      │
│  - 使用事务保证一致性                                        │
│  - 使用 ORM 的关联功能                                       │
│                                                             │
│  存储过程:                                                  │
│  - 将逻辑移到应用代码                                        │
│  - 使用云函数处理复杂逻辑                                    │
│  - 更易于测试和维护                                          │
│                                                             │
│  触发器:                                                    │
│  - 使用应用事件系统                                          │
│  - 使用消息队列处理异步任务                                  │
│  - 使用 CDC (变更数据捕获)                                   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

PlanetScale 的应用场景 #

1. JAMstack 应用 #

text
┌─────────────────────────────────────────────────────────────┐
│                    JAMstack 架构                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   ┌─────────────┐                                          │
│   │   前端      │  Next.js / Nuxt.js / Astro               │
│   │  (静态)     │                                          │
│   └──────┬──────┘                                          │
│          │                                                  │
│          ▼                                                  │
│   ┌─────────────┐                                          │
│   │   API       │  Vercel / Netlify Functions              │
│   │  (Serverless)│                                         │
│   └──────┬──────┘                                          │
│          │                                                  │
│          ▼                                                  │
│   ┌─────────────┐                                          │
│   │ PlanetScale │  无服务器 MySQL                          │
│   └─────────────┘                                          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

2. SaaS 应用 #

text
多租户架构:
- 每个租户独立数据
- 自动扩展支持增长
- 分支功能支持定制开发

3. 微服务架构 #

text
服务解耦:
- 每个服务独立数据库
- 数据库分支支持独立开发
- 自动扩展应对流量波动

定价模式 #

免费套餐 #

资源 免费额度
数据库 1 个
存储 5 GB
行读取 10 亿行/月
行写入 1000 万行/月
分支 2 个

付费套餐 #

text
Scout Plan: $29/月起
- 更多存储空间
- 更高读写配额
- 多区域支持
- 优先支持

Business Plan: 自定义定价
- 无限数据库
- 企业级 SLA
- 专属支持
- 高级安全功能

学习路径 #

text
入门阶段
├── PlanetScale 简介(本文)
├── 快速开始
└── 核心概念

基础阶段
├── 数据库管理
├── 分支操作
└── Schema 变更

进阶阶段
├── 数据库连接
├── 数据迁移
├── 性能优化
└── 安全配置

下一步 #

现在你已经了解了 PlanetScale 的基本概念,接下来学习 快速开始,创建你的第一个 PlanetScale 数据库!

最后更新:2026-03-29