正在加载,请稍候…

Neon Serverless PostgreSQL:自动缩零与数据库分支

Neon 将计算与存储分离,实现自动缩零(空闲时零费用)和即时数据库分支,支持自动扩缩容与只读副本,适合预览部署、开发和低流量项目。

Neon Serverless PostgreSQL:自动缩零与数据库分支

Neon:Serverless PostgreSQL

Neon 将计算与存储分离,实现自动缩零(空闲时零费用)和即时数据库分支。

Neon Serverless PostgreSQL:自动缩零与数据库分支 插图

关键特性

  • 自动缩零:无活动后暂停,约 500ms 恢复
  • 分支:秒级创建时间点数据库副本
  • 自动扩缩容:0.25 到 16 CU 自动调整
  • 只读副本:即时创建只读副本

连接

import { neon } from '@neondatabase/serverless'

// 直接连接(适用于边缘/Serverless)
const sql = neon(process.env.DATABASE_URL!)

const users = await sql`SELECT * FROM users LIMIT 10`
const user = await sql`SELECT * FROM users WHERE id = ${userId}`

// 带事务
const result = await sql.transaction([
  sql`INSERT INTO orders (user_id, total) VALUES (${userId}, ${total})`,
  sql`UPDATE users SET order_count = order_count + 1 WHERE id = ${userId}`,
])
// 使用 pg(连接池)
import { Pool } from 'pg'
import { neonConfig } from '@neondatabase/serverless'
import ws from 'ws'

neonConfig.webSocketConstructor = ws  // Node.js 必需

const pool = new Pool({
  connectionString: process.env.DATABASE_URL,
  ssl: true,
})

Neon Serverless PostgreSQL:自动缩零与数据库分支 插图

数据库分支

# 安装 Neon CLI
npm install -g neonctl

# 为功能开发创建分支
neonctl branches create --name feature/new-schema --parent main

# 获取分支的连接字符串
neonctl connection-string feature/new-schema

# 合并后删除分支
neonctl branches delete feature/new-schema
// CI/CD 中根据环境选择分支
const DATABASE_URL = process.env.CI
  ? process.env.NEON_BRANCH_URL  // 当前 PR 的分支
  : process.env.DATABASE_URL     // 主数据库

Next.js App Router 集成

// lib/db.ts
import { neon } from '@neondatabase/serverless'
import { drizzle } from 'drizzle-orm/neon-http'
import * as schema from './schema'

const sql = neon(process.env.DATABASE_URL!)
export const db = drizzle(sql, { schema })

// app/api/users/route.ts
import { db } from '@/lib/db'
import { users } from '@/lib/schema'

export async function GET() {
  const allUsers = await db.select().from(users).limit(20)
  return Response.json(allUsers)
}

Neon Serverless PostgreSQL:自动缩零与数据库分支 插图

冷启动优化

// Neon 在首次连接时约 500ms 唤醒
// 使用连接池 URL (pooler.neon.tech) 保持连接活跃

const sql = neon(process.env.DATABASE_POOLER_URL!)  // 使用池化端点

// 预热:应用启动时 ping
await sql`SELECT 1`

成本模型

使用情况 费用
计算(暂停) $0
计算(运行) $0.102/小时 每 CU
存储 $0.000164/GiB-小时
免费套餐 0.5 CU, 3 GiB 存储

适用于:预览部署、开发、低流量项目。