advanced
Transactions
Выбирайте nested writes, batch transactions или interactive transactions по correctness, latency и retry behavior.
Prisma поддерживает nested writes, массив `$transaction([...])` и интерактивный `$transaction(async (tx) => ...)`. Выбирайте минимальный API под инвариант.
await prisma.$transaction(async (tx) => {
await tx.account.update({ where: { id }, data: { balance: { decrement: amount } } });
await tx.account.update({ where: { id: target }, data: { balance: { increment: amount } } });
});
На интервью: сравнение API транзакций, retries, изоляция, вложенные сервисы, побочные эффекты вне БД внутри interactive transaction.
Типовые ошибки: interactive transaction держит соединение во время кода приложения; retry без идемпотентности дублирует эффекты.
Компромисс — выразительные nested writes против времени удержания соединения.
Чеклист:
- API под форму инварианта.
- Короткое тело транзакции.
- Retry-safe операции.
- Commit до внешнего IO, когда возможно.