💻 MongoDB’da Tranzaksiyalar qanday ishlaydi?
Database’larda tranzaksiyalar – bu bir nechta operatsiyani birgalikda amalga oshirishga imkon beruvchi jarayonlardir. Tranzaksiya muvaffaqiyatli tugasa, uning o'zgartirishlari doimiy bo‘ladi, aks holda barcha o'zgartirishlar bekor qilinadi. Bu, ayniqsa, bank tizimlari kabi muhim sohalarda juda zarur.
MongoDB’da tranzaksiyalarni qanday ishlatishni ko'rib chiqamiz:
🔑 ACID tamoyili:
MongoDB tranzaksiyalari ACID tamoyilini qo'llaydi, ya’ni:
- Atomicity (Atomiklik): Tranzaksiya to'liq amalga oshadi yoki umuman bajarilmaydi.
- Consistency (Konsistensiya): Tranzaksiya amalga oshirilganidan keyin ma'lumotlar bazasi doimiy va to‘g‘ri holatda bo‘lishi kerak.
- Isolation (Izolyatsiya): Tranzaksiyalar bir-biriga ta’sir qilmasligi kerak.
- Durability (Barqarorlik): Tranzaksiya muvaffaqiyatli yakunlanishi bilan uning o'zgarishlari saqlanadi.
📝 Misol: MongoDB’da tranzaksiya bilan pul o'tkazma
Faraz qilaylik, bir bank foydalanuvchisidan pul chiqarish va boshqa foydalanuvchiga pul qo'shish jarayonini amalga oshirishimiz kerak. Agar jarayonning bir qismi muvaffaqiyatsiz tugasa, butun tranzaksiya bekor qilinadi.
import { MongoClient } from 'mongodb';
async function transferMoney() {
const client = new MongoClient('mongodb://localhost:27017');
const session = client.startSession(); // Tranzaksiya session yaratish
try {
session.startTransaction(); // Tranzaksiyani boshlash
const usersCollection = client.db('bank').collection('users');
// 1. Foydalanuvchidan pul chiqarish
await usersCollection.updateOne(
{ _id: 'user123' },
{ $inc: { balance: -100 } },
{ session }
);
// 2. Boshqa foydalanuvchiga pul qo'shish
await usersCollection.updateOne(
{ _id: 'user456' },
{ $inc: { balance: 100 } },
{ session }
);
// Tranzaksiyani muvaffaqiyatli yakunlash
await session.commitTransaction();
console.log('Tranzaksiya muvaffaqiyatli yakunlandi.');
} catch (error) {
// Xato bo'lsa, tranzaksiyani bekor qilish
await session.abortTransaction();
console.log('Xato yuz berdi, tranzaksiya bekor qilindi.');
} finally {
session.endSession(); // Sessionni tugatish
}
}
transferMoney().catch(console.error);
📌 Tranzaksiya jarayoni:
- Tranzaksiya boshlanishi: Tranzaksiya sessiyasi ochiladi.
- Operatsiyalarni bajarish: Pulni chiqarish va qo‘shish jarayonlari amalga oshiriladi.
- Commit: Agar barcha operatsiyalar muvaffaqiyatli bajarilsa, commitTransaction() orqali o‘zgartirishlar saqlanadi.
- Rollback: Agar biror narsa noto‘g‘ri bo‘lsa, abortTransaction() yordamida barcha o‘zgartirishlar bekor qilinadi.
🚀 Qanday foyda ko‘rasiz?
MongoDB’da tranzaksiyalar yordamida ma'lumotlar bazasidagi operatsiyalarni to‘liq nazorat qilishingiz mumkin. Agar sizning tizimingizda bir nechta o‘zgarishlarni birgalikda amalga oshirish kerak bo‘lsa, bu juda foydali bo‘ladi!
Database’larda tranzaksiyalar – bu bir nechta operatsiyani birgalikda amalga oshirishga imkon beruvchi jarayonlardir. Tranzaksiya muvaffaqiyatli tugasa, uning o'zgartirishlari doimiy bo‘ladi, aks holda barcha o'zgartirishlar bekor qilinadi. Bu, ayniqsa, bank tizimlari kabi muhim sohalarda juda zarur.
MongoDB’da tranzaksiyalarni qanday ishlatishni ko'rib chiqamiz:
🔑 ACID tamoyili:
MongoDB tranzaksiyalari ACID tamoyilini qo'llaydi, ya’ni:
- Atomicity (Atomiklik): Tranzaksiya to'liq amalga oshadi yoki umuman bajarilmaydi.
- Consistency (Konsistensiya): Tranzaksiya amalga oshirilganidan keyin ma'lumotlar bazasi doimiy va to‘g‘ri holatda bo‘lishi kerak.
- Isolation (Izolyatsiya): Tranzaksiyalar bir-biriga ta’sir qilmasligi kerak.
- Durability (Barqarorlik): Tranzaksiya muvaffaqiyatli yakunlanishi bilan uning o'zgarishlari saqlanadi.
📝 Misol: MongoDB’da tranzaksiya bilan pul o'tkazma
Faraz qilaylik, bir bank foydalanuvchisidan pul chiqarish va boshqa foydalanuvchiga pul qo'shish jarayonini amalga oshirishimiz kerak. Agar jarayonning bir qismi muvaffaqiyatsiz tugasa, butun tranzaksiya bekor qilinadi.
import { MongoClient } from 'mongodb';
async function transferMoney() {
const client = new MongoClient('mongodb://localhost:27017');
const session = client.startSession(); // Tranzaksiya session yaratish
try {
session.startTransaction(); // Tranzaksiyani boshlash
const usersCollection = client.db('bank').collection('users');
// 1. Foydalanuvchidan pul chiqarish
await usersCollection.updateOne(
{ _id: 'user123' },
{ $inc: { balance: -100 } },
{ session }
);
// 2. Boshqa foydalanuvchiga pul qo'shish
await usersCollection.updateOne(
{ _id: 'user456' },
{ $inc: { balance: 100 } },
{ session }
);
// Tranzaksiyani muvaffaqiyatli yakunlash
await session.commitTransaction();
console.log('Tranzaksiya muvaffaqiyatli yakunlandi.');
} catch (error) {
// Xato bo'lsa, tranzaksiyani bekor qilish
await session.abortTransaction();
console.log('Xato yuz berdi, tranzaksiya bekor qilindi.');
} finally {
session.endSession(); // Sessionni tugatish
}
}
transferMoney().catch(console.error);
📌 Tranzaksiya jarayoni:
- Tranzaksiya boshlanishi: Tranzaksiya sessiyasi ochiladi.
- Operatsiyalarni bajarish: Pulni chiqarish va qo‘shish jarayonlari amalga oshiriladi.
- Commit: Agar barcha operatsiyalar muvaffaqiyatli bajarilsa, commitTransaction() orqali o‘zgartirishlar saqlanadi.
- Rollback: Agar biror narsa noto‘g‘ri bo‘lsa, abortTransaction() yordamida barcha o‘zgartirishlar bekor qilinadi.
🚀 Qanday foyda ko‘rasiz?
MongoDB’da tranzaksiyalar yordamida ma'lumotlar bazasidagi operatsiyalarni to‘liq nazorat qilishingiz mumkin. Agar sizning tizimingizda bir nechta o‘zgarishlarni birgalikda amalga oshirish kerak bo‘lsa, bu juda foydali bo‘ladi!