M
Murad İsmayılovMüəllif
murad.ismailov@example.comPostgreSQL Tranzaksiyaları və ACID Prinsiplərinin Təmin Edilməsi
Maliyyə və e-ticarət sistemlərində məlumatların bütövlüyünü qoruyan tranzaksiya izolyasiyası və Prisma $transaction metodları.
Verilənlər bazası ilə işləyərkən ən qorxulu ssenarilərdən biri natamam qalmış əməliyyatlardır.
Klassik bank nümunəsi: A şəxsinin hesabından 100 AZN çıxılır, lakin elektrik kəsilməsi və ya şəbəkə xətası səbəbindən B şəxsinin hesabına bu məbləğ çatmır. Əgər tranzaksiya mexanizmi olmasa, 100 AZN havaya sovrulmuş olacaq.
Bunun qarşısını alan konsept ACID prinsipləridir.
📌 1. ACID Nədir?
- Atomicity (Bölünməzlik): Ya əməliyyatın bütün addımları 100% uğurla icra olunur, ya da heç biri baş vermir (hər şey əvvəlki vəziyyətinə geri qayıdır - Rollback).
- Consistency (Uyğunluq): Baza bütün məhdudiyyətləri (Foreign Keys, Unique Constraints) qoruyur.
- Isolation (Təcrid olunma): Eyni anda işləyən iki tranzaksiya bir-birinin natamam məlumatlarını görə bilməz.
- Durability (Davamlılıq): Tranzaksiya təsdiqləndisə ('COMMIT'), hətta server dərhal sönsə belə məlumat diskdə sağ qalır.
📌 2. Prisma-da $transaction İstifadəsi:
Prisma-da iki növ tranzaksiya mövcuddur:
1. Sequential (Massiv şəklində):
await prisma.$transaction([
prisma.user.update({ where: { id: senderId }, data: { balance: { decrement: 100 } } }),
prisma.user.update({ where: { id: receiverId }, data: { balance: { increment: 100 } } })
]);
Əgər ikinci addımda hər hansı xəta baş verərsə, birinci addım avtomatik ləğv edilir.
2. Interactive (Asinxron funksiya şəklində):
Birinci sorğunun nəticəsinə baxıb qərar vermək lazım gəldikdə:
await prisma.$transaction(async (tx) => {
const sender = await tx.user.findUnique({ where: { id: senderId } });
if (sender.balance < 100) throw new Error("Kifayət qədər balans yoxdur!");
await tx.user.update(...);
});
←Bütün yazılara qayıtKateqoriya: Database