数据库知识篇
什么是云数据库BaaS
不想自己装数据库?
传统方式用数据库,你需要:安装数据库软件、配置端口和权限、管理备份、处理扩容……对新手来说门槛不低。云数据库 / BaaS 帮你把这些全搞定,你只管用。
💡 类比:自己装数据库就像自己买服务器放家里,云数据库就像用云盘——注册账号就能用,不用操心硬件。
BaaS = Backend as a Service(后端即服务)
加载图表中...
主流云数据库 / BaaS 平台
| 平台 | 底层数据库 | 特点 | 免费额度 |
|---|---|---|---|
| Supabase | PostgreSQL | 开源、功能全面 | ✅ 慷慨 |
| PlanetScale | MySQL | 分支管理、无停机迁移 | ✅ 有 |
| Neon | PostgreSQL | Serverless、按用付费 | ✅ 有 |
| Firebase | NoSQL | Google 出品、实时同步 | ✅ 有 |
| MongoDB Atlas | MongoDB | 官方托管、全球分布 | ✅ 有 |
| 阿里云 RDS | MySQL/PG | 国内首选 | 付费 |
| 腾讯云 | MySQL/PG | 国内常用 | 付费 |
加载图表中...
Supabase:开源的 Firebase 替代品
Supabase 是目前最受欢迎的 BaaS 平台之一,基于 PostgreSQL:
加载图表中...
使用 Supabase
# 安装 SDK
npm install @supabase/supabase-js
// lib/supabase.ts
import { createClient } from "@supabase/supabase-js";
export const supabase = createClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
);
// 查询数据
const { data: users, error } = await supabase
.from("users")
.select("*")
.order("created_at", { ascending: false });
// 插入数据
const { data, error } = await supabase
.from("users")
.insert({ name: "张三", email: "zhang@mail.com" })
.select();
// 更新数据
const { data, error } = await supabase
.from("users")
.update({ name: "张三丰" })
.eq("id", 1);
// 删除数据
const { error } = await supabase
.from("users")
.delete()
.eq("id", 1);
Supabase 的数据流
加载图表中...
BaaS vs 自建后端
| 对比 | BaaS(如Supabase) | 自建后端 |
|---|---|---|
| 开发速度 | ⚡ 极快 | 🐢 较慢 |
| 学习成本 | 低 | 高 |
| 灵活性 | 中(受平台限制) | 高(完全自定义) |
| 成本 | 免费起步,用量大后收费 | 服务器费用 |
| 运维 | 平台负责 | 自己负责 |
| 适合 | 个人项目、快速原型、MVP | 大型企业项目 |
加载图表中...
Supabase 用户认证
Supabase 内置了完整的用户认证系统:
// 注册
const { data, error } = await supabase.auth.signUp({
email: "user@example.com",
password: "password123",
});
// 登录
const { data, error } = await supabase.auth.signInWithPassword({
email: "user@example.com",
password: "password123",
});
// 获取当前用户
const { data: { user } } = await supabase.auth.getUser();
// 登出
await supabase.auth.signOut();
// 第三方登录(GitHub)
const { data, error } = await supabase.auth.signInWithOAuth({
provider: "github",
});
环境变量配置
# .env.local
NEXT_PUBLIC_SUPABASE_URL=https://xxxxx.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
NEXT_PUBLIC_前缀的环境变量可以在前端使用,但ANON_KEY是公开的,安全性由 Supabase 的行级安全策略(RLS)保证。
🎯 AI编程小贴士:想快速搭建一个有用户系统的全栈应用?告诉 AI"帮我用 Next.js + Supabase 实现用户注册登录和文章管理",它会帮你从创建 Supabase 项目到前端页面一步步完成。
小结
- 云数据库/BaaS 帮你免去安装、配置、运维数据库的麻烦
- Supabase 是最推荐的 BaaS 平台,基于 PostgreSQL,功能全面
- Supabase 提供数据库、认证、存储、实时订阅等一站式服务
- BaaS 适合个人项目和快速原型,大型项目可以考虑自建
- 不确定怎么选?先用 BaaS 快速上线,后续再迁移