В сентябре 2023-го мы попробовали Drizzle на одном проекте - больше из любопытства. Год спустя на нём уже четыре наших проекта. Без хайпа, по делу - что мы выиграли по сравнению с Prisma и где есть нюансы.
Что выиграли
Прозрачность SQL
В Drizzle вы пишете запросы на SQL-подобном DSL и видите ровно то, что уйдёт в БД. С Prisma часто возникали ситуации, когда отлаживали странный план запроса и обнаруживали, что под капотом сгенерировалось три раунд-трипа вместо одного. С Drizzle - что написал, то и поехало.
Edge-совместимость
Drizzle работает на Cloudflare Workers, Vercel Edge, Bun, Deno без бубна. Prisma долго был «толстым» из-за движка на Rust. На наших edge-функциях это было причиной №1 миграции.
Размер бандла
Prisma Client в bundle весил 6+ МБ из-за wasm-движка. Drizzle - десятки килобайт чистого TS. Для serverless, где cold start считается миллисекундами, это ощутимо.
Типизация
Это вкусовое, но многие в команде отметили: Drizzle типы выводятся быстрее в IDE и сообщения об ошибках понятнее. На проектах с 200+ таблицами разница в скорости работы TS-сервера заметна.
Что потеряли (или сложнее)
- Prisma Studio - приятный UI для базы. У Drizzle есть Drizzle Studio, но он ощутимо проще.
- Prisma generator-ы для zod/typescript-types/etc - мощная экосистема. У Drizzle проще, но беднее.
- Сложные глубокие include с агрегациями - в Prisma писались декларативно, в Drizzle нужно явное JOIN или сабквери.
- Документация Prisma была эталонной. У Drizzle она хорошая, но на сложных кейсах приходится читать исходники или Discord.
Миграции
drizzle-kit генерирует SQL-миграции по diff схемы. Это проще и предсказуемее, чем Prisma Migrate, но требует больше дисциплины: каждая миграция - это сырой SQL, который нужно прочитать перед применением. Это хорошо, на самом деле.
Когда Prisma всё ещё лучше
- Команды, для которых Prisma уже стек, и нет проблем с edge или bundle size.
- Проекты, где много нестандартной агрегационной логики, удобно описанной декларативно.
- Команды, где не у всех сильный SQL - Prisma скрывает базу лучше.