PlanetScale

Serverlose MySQL-Plattform - Git-Branching, Zero-Downtime-Migrationen, unbegrenzte Skalierung

TL;DR

Was: Eine serverlose MySQL-Plattform mit Branching und nicht-blockierenden Schema-Änderungen.

Warum: Git-ähnliches Branching für Datenbanken, Zero-Downtime-Migrationen, unendliche Skalierbarkeit.

Quick Start

Registrieren: Gehen Sie zu planetscale.com und erstellen Sie ein Konto.

CLI installieren:

brew install planetscale/tap/pscale  # macOS
# or
scoop install pscale  # Windows

Datenbank erstellen:

pscale auth login
pscale database create myapp --region us-east

Verbinden:

pscale shell myapp main

Tabelle erstellen:

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  email VARCHAR(255) UNIQUE
);

Cheatsheet

BefehlBeschreibung
pscale database create nameDatenbank erstellen
pscale shell db branchMit Branch verbinden
pscale branch create db nameBranch erstellen
pscale deploy-request create db branchDeploy-Request erstellen
pscale connect db branchLokaler Verbindungsproxy
pscale password create db branch nameVerbindungspasswort erstellen

Gotchas

Branching-Workflow

# Entwicklungs-Branch erstellen
pscale branch create myapp add-orders

# Mit Branch verbinden
pscale shell myapp add-orders

# Schema-Änderungen vornehmen
CREATE TABLE orders (
  id INT AUTO_INCREMENT PRIMARY KEY,
  user_id INT,
  total DECIMAL(10,2)
);

# Deploy-Request erstellen
pscale deploy-request create myapp add-orders

# In Produktion deployen (via UI oder CLI)
pscale deploy-request deploy myapp 1

Verbindungsstrings

# Verbindungsstring generieren
pscale password create myapp main production-password

# In Anwendung verwenden
DATABASE_URL="mysql://user:password@host/database?ssl=true"

Mit Frameworks verwenden

// Prisma
// schema.prisma
datasource db {
  provider     = "mysql"
  url          = env("DATABASE_URL")
  relationMode = "prisma"  // Required for PlanetScale
}

// Drizzle
import { drizzle } from 'drizzle-orm/planetscale-serverless';
import { connect } from '@planetscale/database';

const connection = connect({
  url: process.env.DATABASE_URL
});
const db = drizzle(connection);

Keine Fremdschlüssel (Anwendungsebene verwenden)

// PlanetScale unterstützt keine Fremdschlüssel für Online-Migrationen
// Beziehungen im Anwendungscode behandeln

// Mit Prisma relationMode: "prisma"
model User {
  id     Int     @id @default(autoincrement())
  orders Order[]
}

model Order {
  id     Int  @id @default(autoincrement())
  userId Int
  user   User @relation(fields: [userId], references: [id])
}

Next Steps