Sizin gibi okuyucular MUO'yu desteklemeye yardımcı oluyor. Sitemizdeki bağlantıları kullanarak bir satın alma işlemi gerçekleştirdiğinizde, bir ortaklık komisyonu kazanabiliriz.

Üretime hazır bir web uygulaması oluşturmak, bunun güvenli ve ölçeklenebilir olduğundan emin olmanızı gerektirir.

Veritabanları hakkında bilinmesi gereken en önemli şeylerden biri, atomiklik, tutarlılık, yalıtım ve dayanıklılık anlamına gelen ACID ilkesidir. MySQL gibi ilişkisel veritabanları, ACID işlemlerini yerel olarak destekler. Ancak MongoDB bir NoSQL veritabanıdır ve varsayılan olarak ACID işlemlerini desteklemez.

Bir programcı olarak, ACID özelliklerini MongoDB veritabanlarınıza nasıl ekleyeceğinizi bilmelisiniz.

Veritabanı İşlemleri Nedir?

Bir veritabanı işlemi, bir görevi tamamlamak için tek bir birim olarak birlikte yürütülen bir veritabanı sorguları veya işlemleri dizisidir.

Veritabanı işlemleri ACID özellikleri kavramlarına uygundur. Bu, tüm işlemler başarılı olmadıkça hiçbir değişikliğin olmamasını sağlamaya yardımcı olur. Ayrıca veritabanının tutarlı olmasını da sağlar.

instagram viewer

Açıklanan ASİT Özellikleri

ASİT ilkelerini oluşturan dört özellik şunlardır:

  • Atomiklik işlemleri bir programın küçük birimleri olarak kavramsallaştıran özelliktir. Bu, tüm sorguların birlikte başarılı bir şekilde çalıştığı veya başarısız olduğu anlamına gelir.
  • Tutarlılık veritabanı kayıtlarının her işlemden önce ve sonra tutarlı kalması gerektiğini belirtir.
  • İzolasyon aynı anda birden fazla işlem yapıldığında birinin diğerini etkilememesini sağlar.
  • dayanıklılık sistem arızalarına veya arızalarına odaklanır. Bir sistem arızası durumunda taahhüt edilen bir işlemin kaybolmamasını sağlar. Bu, sistem tekrar açıldığında verileri bir yedekten otomatik olarak geri yüklemek için gerekli teknikleri içerebilir.

Mongoose Kullanarak Node.js'de MongoDB Veritabanı İşlemlerini Uygulama

MongoDB, yıllar içinde yaygın olarak kullanılan bir veritabanı teknolojisi haline geldi. NoSQL doğası ve esnek belge tabanlı model. Ayrıca, verilerinizi SQL veya ilişkisel veritabanlarından daha esnek bir şekilde daha iyi düzenleme yeteneği sunar.

Veritabanı işlemlerini MongoDB'de uygulamak için, bir kullanıcının bir işi gönderebileceği, güncelleyebileceği veya silebileceği bir iş listeleme uygulamasında örnek bir senaryo düşünebilirsiniz. İşte bu uygulama için basit bir veritabanı şeması tasarımı:

Devam etmek için, bu bölüm Node.js programlama ve MongoDB hakkında temel bilgi gerektirir.

Bağımsız MongoDB kurulumlarında işlemler desteklenmez. kullanmanız gerekecek MongoDB çoğaltma seti veya MongoDB parçalı küme İşlemlerin çalışması için. Bu nedenle, işlemleri kullanmanın en kolay yolu, bulutta barındırılan bir MongoDB örneği oluşturun (MongoDB Atlası). Varsayılan olarak, her Atlas veritabanı eşgörünümü bir kopya kümesi veya parçalanmış bir kümedir.

Çalışan bir Node.js ve MongoDB projesi kurduktan sonra, Node.js'de bir Mongo veritabanına bağlantı kurabilirsiniz. Şimdiye kadar yapmadıysanız, çalıştırarak firavun faresini kurun npm mongoose'u kur terminalinizde.

içe aktarmak firavun faresi itibaren 'firavun faresi'

MONGO_URL = process.env olsun. MONGO_URL || 'sizin-mongo-veritabanı-url'niz';

izin vermek bağlantı;
sabit bağlantıDb = zaman uyumsuz () => {
denemek {
beklemek mongoose.connect (MONGO_URL, {
useNewUrlParser: doğru,
UnifiedTopology kullanın: doğru,
});

konsol.log("VERİTABANI BAĞLI");
bağlantı = firavun faresi.bağlantı;
} yakalamak (hata) {
konsol.hata("VERİTABANI BAĞLANTISI BAŞARISIZ!");
konsol.hata(hata.İleti);
işlem.çıkış(1); // veritabanı bağlantısı başarısız olursa uygulamayı kapatın
}
};

Programın ilerleyen bölümlerinde bir işlem başlatmak için kullanabilmeniz için bağlantıyı bir değişkende saklamanız gerekir.

Kullanıcıları ve iş koleksiyonlarını şu şekilde uygulayabilirsiniz:

sabit kullanıcı Şeması = yeni firavun faresi Şema({
isim: Sicim,
e-posta: Sicim,
Meslekler: [firavun faresi. Şema. Türler. Nesne Kimliği]
});

sabit iş Şeması = yeni firavun faresi Şema({
başlık: Sicim,
konum: Sicim,
maaş: Sicim,
afiş: firavun faresi.Şema.Türler.Nesne Kimliği
});

const userCollection = firavun faresi.model('kullanıcı', kullanıcı Şeması);
const jobCollection = firavun faresi.model('', iş Şeması);

Veritabanına bir kullanıcı eklemek için şu şekilde bir işlev yazabilirsiniz:


sabit kullanıcı oluştur = zaman uyumsuz (kullanıcı) => {
sabit yeniKullanıcı = beklemek userCollection.create (kullanıcı);
konsol.log("Kullanıcı veritabanına eklendi");
konsol.log (yeni Kullanıcı);
}

Aşağıdaki kod, bir iş yaratma ve onu bir veritabanı işlemi kullanarak gönderen iş listesine ekleme işlevini gösterir.


sabit İş oluştur = zaman uyumsuz (iş) => {
sabit { userEmail, unvan, konum, maaş } = iş;

// kullanıcıyı DB'den al
sabit kullanıcı = beklemek userCollection.findOne({ e-posta: Kullanıcı e-postası });

// işlem oturumunu başlat
sabit oturum = beklemek bağlantı.startSession();

// tüm veritabanı sorgularını bir try-catch bloğunda çalıştırın
denemek {
beklemek session.startTransaction();

// iş oluştur
sabit yeniİş = beklemek jobCollection.create(
[
{
başlık,
konum,
maaş,
gönderen: user._id,
},
],
{ oturum }
);
konsol.log("Oluşturuldu yeni iş başarıyla!");
konsol.log (yeniİş[0]);

// gönderilen işlerin kullanıcı listesine iş ekle
sabit yeniİşKimliği = yeniİş[0]._İD;
sabit AddToUser = beklemek userCollection.findByIdAndUpdate(
Kullanıcı kimliği,
{ $addToSet: { Meslekler: yeniİş Kimliği } },
{ oturum }
);

konsol.log("İş, kullanıcının iş listesine başarıyla eklendi");
konsol.log (addToUser);

beklemek session.commitTransaction();

konsol.log("Veritabanı işlemi başarıyla gerçekleştirildi");
} yakalamak (e) {
konsol.hata (e);
konsol.log("Veritabanı işlemleri tamamlanamadı");
beklemek session.abortTransaction();
} Sonunda {
beklemek session.endSession();
konsol.log("İşlem oturumu sonlandırıldı");
}
};

A yaratmak Bir işlemde çalışan sorgu genellikle bir diziyi alır ve döndürür. Bunu, oluşturduğu yukarıdaki kodda görebilirsiniz. yeni iş ve saklar _İD mülkiyetyeniİş Kimliği değişken.

İşte yukarıdaki işlevlerin nasıl çalıştığının bir gösterimi:

sabit sahte Kullanıcı = {
isim: "Timmy Omolana",
e-posta: "[email protected]",
};

sabit sahteİş = {
başlık: "Satış Müdürü",
yer: "Lagos, Nijerya",
maaş: "$40,000",
userEmail: "[email protected]", // oluşturulan kullanıcının e-postası
};

sabit sunucuyu başlat = zaman uyumsuz () => {
beklemek connectDb();
beklemek kullanıcı oluştur (sahte Kullanıcı);
beklemek iş yarat (sahte iş);
};

sunucuyu başlat()
.Daha sonra()
.catch((hata) => konsol.log (hata));

Bu kodu kaydeder ve kullanarak çalıştırırsanız Npm başlangıç ya da düğüm komutu, şöyle bir çıktı üretmelidir:

Mongoose kullanarak MongoDB'de ACID işlemlerini gerçekleştirmenin başka bir yolu da withTransaction() işlev. Bu yaklaşım, işleve bağımsız değişken olarak ilettiğiniz bir geri arama işlevi içindeki tüm sorguları çalıştırdığından çok az esneklik sağlar.

Kullanmak için yukarıdaki veritabanı işlemini yeniden düzenleyebilirsiniz. withTransaction() bunun gibi:

sabit İş oluştur = zaman uyumsuz (iş) => {
sabit { userEmail, unvan, konum, maaş } = iş;

// kullanıcıyı DB'den al
sabit kullanıcı = beklemek userCollection.findOne({ e-posta: Kullanıcı e-postası });

// işlem oturumunu başlat
sabit oturum = beklemek bağlantı.startSession();

// tüm veritabanı sorgularını bir try-catch bloğunda çalıştırın
denemek {
sabit işlem Başarısı = beklemek session.withTransaction(zaman uyumsuz () => {
sabit yeniİş = beklemek jobCollection.create(
[
{
başlık,
konum,
maaş,
gönderen: user._id,
},
],
{ oturum }
);

konsol.log("Oluşturuldu yeni iş başarıyla!");
konsol.log (yeniİş[0]);

// gönderilen işlerin kullanıcı listesine iş ekle
sabit yeniİşKimliği = yeniİş[0]._İD;
sabit AddToUser = beklemek userCollection.findByIdAndUpdate(
Kullanıcı kimliği,
{ $addToSet: { Meslekler: yeniİş Kimliği } },
{ oturum }
);

konsol.log("İş, kullanıcının iş listesine başarıyla eklendi");
konsol.log (addToUser);
});

eğer (işlem Başarısı) {
konsol.log("Veritabanı işlemi başarıyla gerçekleştirildi");
} başka {
konsol.log("İşlem başarısız");
}
} yakalamak (e) {
konsol.hata (e);
konsol.log("Veritabanı işlemleri tamamlanamadı");
} Sonunda {
beklemek session.endSession();
konsol.log("İşlem oturumu sonlandırıldı");
}
};

Bu, önceki uygulama ile aynı çıktıyı üretecektir. MongoDB'de veritabanı işlemlerini uygularken hangi stili kullanacağınızı seçmekte özgürsünüz.

Bu uygulama kullanmaz commitTransaction() Ve İptal İşlemi() fonksiyonlar. Bunun nedeni, withTransaction() işlev, başarılı işlemleri otomatik olarak gerçekleştirir ve başarısız olanları iptal eder. Her durumda çağırmanız gereken tek işlev, session.endSession() işlev.

ASİT Veritabanı İşlemlerini MongoDB'de Uygulama

Veritabanı işlemleri doğru yapıldığında kullanımı kolaydır. Artık Veritabanı işlemlerinin MongoDB'de nasıl çalıştığını ve bunları Node.js uygulamalarında nasıl uygulayabileceğinizi anlamalısınız.

ACID işlemleri fikrini ve bunların MongoDB'de nasıl çalıştığını daha fazla keşfetmek için bir fintech cüzdanı veya blog uygulaması oluşturmayı düşünün.