TypeScript / Database

    Prisma i Drizzle ORM

    Schema-first Prisma vs SQL-first Drizzle — TypeScript ORMs, migracje, connection pooling i edge deployment w 2024.

    Prisma
    Schema-first TS
    Drizzle
    SQL-first 7KB
    PgBouncer
    Connection pooling
    Accelerate
    Edge cache

    6 ORM dla TypeScript

    Prisma, Drizzle, TypeORM, MikroORM, Sequelize i Kysely — każdy ORM reprezentuje inny model mentalny i kompromis między DX a kontrolą.

    ORM Podejście Type Safety Bundle Size Edge Kiedy
    Prisma Schema-first (PSL) Generowane typy 5MB+ Prisma Accelerate Nowe projekty TS, DX priorytet, fullstack
    Drizzle SQL-first (TypeScript) InferSelectModel 7KB (treeshakeable) Natywny (CF Workers) Edge computing, bundle size, SQL kontrola
    TypeORM Data Mapper / Active Record Dekoratory Duży Nie Legacy projekty, Java-like patterns
    MikroORM Unit of Work + Identity Map Dekoratory Duży Nie TypeORM alternative, enterprise
    Sequelize Active Record Przez plugin Duży Nie Legacy JavaScript, istniejące projekty
    Kysely Query builder (TS) Pełen (compile time) Mały Tak SQL kontrola + type safety, bez magic

    Często zadawane pytania

    Co to jest Prisma ORM i jak działa schema-first approach?

    Prisma: nowoczesny ORM dla TypeScript i Node.js (Prisma Data, 2019). Schema-first approach: definiujesz model w schema.prisma (Prisma Schema Language). Prisma generuje TypeScript typy automatycznie. Trzy komponenty Prisma: Prisma Client — auto-generated, type-safe query builder. Prisma Migrate — migracje bazy danych z schema. Prisma Studio — GUI do przeglądania danych. Przykład schema: model User {id Int @id @default(autoincrement()). name String. email String @unique. posts Post[]}. Prisma Client query: const user = await prisma.user.findUnique({where: {email: 'test@test.pl'}, include: {posts: true}}). TypeScript zna typ user: User & {posts: Post[]}. Relacje Prisma: one-to-one, one-to-many, many-to-many. @relation dekorator. Implicit many-to-many (join table automatyczna). Filtry: where: {AND, OR, NOT, contains, startsWith, gt, gte, lt, lte, in, notIn}. Zagnieżdżone queries: include (eager loading), select (projekcja). Raw queries: prisma.$queryRaw, prisma.$executeRaw. Transakcje: prisma.$transaction([...]). Interactive transactions. Bazy danych: PostgreSQL, MySQL, SQLite, SQL Server, MongoDB, CockroachDB. Prisma Accelerate: connection pooling + global edge cache. Prisma Pulse: real-time database events.

    Drizzle ORM — co to jest i dlaczego jest alternatywą dla Prisma?

    Drizzle ORM: TypeScript ORM z SQL-first approach (2022). Filozofia: 'If you know SQL, you know Drizzle'. Minimalistyczny, bez magic. SQL-like API zamiast abstrakcji. Drizzle Schema (TypeScript): const users = pgTable('users', {id: serial('id').primaryKey(), name: text('name').notNull(), email: varchar('email', {length: 255}).notNull().unique()}). Queries: db.select().from(users).where(eq(users.email, 'test@test.pl')). db.insert(users).values({name: 'Jan', email: 'jan@example.pl'}). db.update(users).set({name: 'Nowe'}).where(eq(users.id, 1)). Joins: db.select().from(users).innerJoin(posts, eq(posts.userId, users.id)). SQL-like, czytelny. Drizzle Kit: CLI do migracji. drizzle-kit generate — generuj SQL migration. drizzle-kit push — push schema do DB bez migracji (dev). drizzle-kit migrate — uruchom migracje. Zalety Drizzle vs Prisma: Bundle size: Drizzle 7KB (treeshakeable), Prisma 5MB+. Edge ready (Cloudflare Workers, Vercel Edge). Brak osobnego CLI binarnego (Prisma wymaga). SQL transparent (zero magic). Szybszy (mniej overhead). Wady Drizzle vs Prisma: Mniej dojrzały ekosystem. Mniej integracji. Pisanie w SQL-style mniej intuicyjne dla beginnerów. Bazy danych: PostgreSQL (postgres-js, node-postgres). MySQL (mysql2). SQLite (better-sqlite3, libsql, Bun). Turso (libSQL — SQLite na edge). Neon, PlanetScale, CockroachDB.

    Prisma Migrate vs Drizzle Kit — zarządzanie migracjami bazy danych?

    Prisma Migrate: workflow declaratywny. Edytujesz schema.prisma. npx prisma migrate dev -- name add_user_role. Prisma generuje SQL migration. Git tracking migracji. prisma migrate deploy — produkcja (bez interaktywności). Zalety Prisma Migrate: automatyczne generowanie SQL. Bezpieczne (shadow database do porównania). Historia migracji. Baseline dla istniejących baz (prisma migrate resolve). Problemy Prisma Migrate: shadow database wymagana (nie zawsze możliwa). Niektóre operacje nieobsługiwane (custom SQL w migracji). Drizzle Kit migracje: drizzle-kit generate — generuj SQL based on schema changes. Ręczna kontrola nad SQL. drizzle-kit push — dev only (push bez migracji). Wspólne zasady bezpiecznych migracji: addytywne zmiany (dodawaj kolumny nullable). Nigdy nie usuwaj kolumn bez najpierw deploymentu. expand-contract pattern. Prisma Studio: GUI do przeglądania i edycji danych. npx prisma studio. Port 5555. Zarządzanie rekordami. Drizzle Studio: drizzle-kit studio. Podobna funkcjonalność. TypeScript integracja: Prisma — generowane typy w @prisma/client. Drizzle — typy z InferSelectModel, InferInsertModel. Oba dostarczają pełen type safety dla queries.

    Prisma vs Drizzle vs TypeORM vs Sequelize — kiedy co wybrać?

    TypeORM: dojrzały ORM (2016), Active Record i Data Mapper pattern. Dekoratory TypeScript (@Entity, @Column, @PrimaryGeneratedColumn). Duży ekosystem. Problemy: wolny development, bugi, brak maintainera. 2024: TypeORM nadal używany w legacy. MikroORM: alternatywa TypeORM. Unit of Work pattern. Identity Map. Lepiej maintainowany. Sequelize: ORM dla JavaScript (2010). Promise-based. Nie-TypeScript-first (typy przez sequelize-typescript). Legacy choice. 2024 kiedy co wybrać: Prisma: nowe projekty TypeScript gdzie developer experience priorytetem. Fullstack (Next.js, Remix, SvelteKit). Chcesz Prisma Studio i Prisma Accelerate. Dobre dokumentacja ważna. Drizzle: edge computing (Cloudflare Workers, Vercel Edge Functions). Bundle size krytyczny. Chcesz SQL kontrolę i transparentność. Performance-critical. TypeORM/MikroORM: istniejące projekty. Decorator-based approach preferowany. Enterprise Java-like patterns. Sequelize: legacy JavaScript projekty. Nie TypeScript. Prisma + T3 Stack: Prisma integracja z tRPC + Next.js + Prisma + NextAuth. create-t3-app. Drizzle + Hono: lightweight API. Edge deployment. Bun + SQLite: Drizzle z libSQL/Bun sqlite.

    Connection pooling i wydajność ORM — PgBouncer, Prisma Accelerate i Neon?

    Problem connection pooling z ORM: każda serverless function tworzy nowe połączenie z DB. PostgreSQL limit connections (domyślnie 100). Bez pooling: connection exhaustion. PgBouncer: zewnętrzny connection pooler. Transaction mode (serverless friendly). Session mode (stateful). Statement mode (ograniczenia). Prisma Accelerate: Prisma managed connection pooler + edge cache. Globalnie dystrybuowany. Stale-while-revalidate cache per query. Prisma.$extends(withAccelerate()). cache({ttl: 60, swr: 10}) per query. Neon serverless driver: @neondatabase/serverless. WebSocket-based connection (edge compatible). Łaczy się przez HTTP dla single queries (zero connection overhead). Serverless-native PostgreSQL. Supabase: PostgreSQL + PostgREST + Realtime + Auth + Storage. Wbudowany connection pooler (Supavisor). SDK dla Next.js. Drizzle + Neon: import {neon} from '@neondatabase/serverless'. drizzle(neon(DATABASE_URL)). Edge-ready. Turso (libSQL): SQLite na edge. Distributed SQLite. Drizzle integration. Embedded replicas. Rekomendacje 2024: Serverless/Edge + Prisma -> Prisma Accelerate. Serverless/Edge + Drizzle -> Neon serverless driver lub Turso. Traditional server -> PgBouncer transaction mode. Supabase -> własny pooler (Supavisor).

    Czytaj dalej

    Powiązane artykuły

    Kontakt

    Skontaktuj się z nami

    Porozmawiajmy o Twoim projekcie. Bezpłatna wycena w ciągu 24 godzin.

    Wyślij zapytanie

    Bezpłatna wycena w 24h
    Bez zobowiązań
    Indywidualne podejście
    Ekspresowa realizacja

    Telefon

    +48 790 814 814

    Pon-Pt: 9:00 - 18:00

    Email

    adam@fotz.pl

    Odpowiadamy w ciągu 24h

    Adres

    Plac Wolności 16

    61-739 Poznań

    Godziny pracy

    Pon - Pt9:00 - 18:00
    Sob - NdzZamknięte

    Wolisz porozmawiać?

    Zadzwoń teraz i porozmawiaj z naszym specjalistą o Twoim projekcie.

    Zadzwoń teraz