Isaac.

Prisma with CockroachDB

Build distributed applications with Prisma and CockroachDB.

By EMEPublished: February 20, 2025
prismacockroachdbdistributedsql

A Simple Analogy

CockroachDB is like a distributed database roach - hard to kill, scales everywhere, always available.


Why CockroachDB + Prisma?

  • Distributed: Automatic replication
  • Consistency: Strong ACID guarantees
  • Scaling: Horizontal scale
  • Resilience: Survives region failures
  • SQL: Familiar SQL syntax

Setup

datasource db {
  provider = "cockroachdb"
  url      = env("DATABASE_URL")
}

generator client {
  provider = "prisma-client-js"
}
postgresql://user:password@host:port/dbname?sslmode=require

Schema with CockroachDB

model User {
  id    String  @id @default(uuid())
  email String  @unique
  name  String
  
  // CockroachDB uses SERIAL for auto-increment
  posts Post[]
  
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

model Post {
  id      String @id @default(uuid())
  title   String
  userId  String
  user    User   @relation(fields: [userId], references: [id])
  
  createdAt DateTime @default(now())
}

Distributed Queries

// Basic query
const users = await prisma.user.findMany();

// With pagination
const users = await prisma.user.findMany({
  take: 10,
  skip: 0,
  orderBy: { createdAt: 'desc' }
});

// Transactions for consistency
await prisma.$transaction(async (tx) => {
  await tx.user.create({ data: { email, name } });
  await tx.post.create({ data: { title, userId } });
});

Best Practices

  1. UUIDs: Use for distributed systems
  2. Transactions: Atomic operations
  3. Replication: Multi-region strategy
  4. Indexes: Create for queries
  5. Monitoring: Track latency

Related Concepts

  • Distributed systems
  • Database replication
  • Sharding
  • ACID compliance

Summary

Use Prisma with CockroachDB for distributed, resilient applications with strong consistency.