MongoDB’de Transaction işlemlerini yapabilmemiz için MongoDB Cluster’ın ‘Standalone’ versiyonda değil, ‘Primary’ versiyonda çalıştırılması gerekmektedir. Bu işlemi yapmak için MongoDB’ye ‘ReplicaSet’ ayarı yapılması gerekmektedir.
Replica set, master-slave replikasyonu ve aralarında yapılandırılmış bir otomatik yük devretme ile çoklu düğümlerden oluşan veri tabanı kümesini tanımlamak için kullanılan bir terimdir.
MongoDB ‘ReplicaSet’ veri tabanının yedekli olmasını sağlar ve farklı veri tabanı sunucularında birden çok veri kopyasıyla veri kullanılabilirliğini artırır. Çoğaltma ayrıca donanım arızalarından ve hizmet kesintilerinden kurtulmanıza da olanak tanır.
Tek bir MongoDb sunucusunuda ‘ReplicaSet’ olarak ayarlayabilir. Bunun için aşağıda ki adımları takip etmemiz gerekmektedir.
Öncelikle MongoDb sunucumuzu Docker üzerinde ayağa kaldırıyoruz.
docker run -d --name "mongo" -p 27017:27017 mongo --replSet "rs0"
Eğer MongoDB’yi yedekli çalışacaksak portlar farklı olmak üzere 2 tane daha Container oluşturmamız gerekmektedir.
Daha sonra eğer tek MongoDB üzerinde çalışmayacaksak önce ‘Primary’ olacak olanda, eğer tek bir MongoDB sunucusu olacaksa aşağıda ki kodla Mongo’ya bağlanmak gerekir.
docker exec -it mongo mongosh
Bu işlemi yaptıktan sonra Mongo içine girmiş oluyoruz ve aşağıdaki kodları çalıştırıyoruz.
> db = (new Mongo('localhost:27017')).getDB('test')
db adında ki değişkene Db’yi attıktan sonra bu db’de ‘ReplicaSet’ için config ayarlıyoruz.
> config = {
"_id" : "rs0",
"members" : [
{
"_id" : 0,
"host" : "mongo:27017"
}
]
Config tanımladıktan sonra ReplicaSet’i başlatmamız gerekiyor.
> rs.initiate(config)
Bu kodu yazdıktan sonra ekrana aşağıda ki gibi bir response gelmesi gerekiyor.
İşlemler bu kadar, buradan sonra mongosh üzerinden dilediğimiz komutu çalıştırabiliriz.
İlk olarak servis işlemlerine başlamadan önce session tanımlamamız gerekiyor. Bunu MongoDB’de connection başlattığımız yerde yapabiliriz.
Session başlattıktan sonra servis kısmında Transaction başlatmamız gerekiyor.
const session = await db.getSession((err) => {
if (err) {
return {
type: false,
message: Lang['tr'].Global.hoopMessage
};
});
Burada session başlattıktan sonra transaction başlatabiliriz. Transaction başlatmanın 2 yolu var. Callback ve API olarak. Hangisini seçeceğiniz ihtiyaçlara göre farklılık gösteriyor. Eğer esneklik isteniyorsa API şeklinde kullanmak daha mantıklı.
Callback olarak başlatmak için aşağıda ki gibi kullanılabilir. Session yazdıktan sonra withTransaction() yazmak yeterli. Eğer callBack olarak kullanırsak ekstra herhangi bir şey yazmamıza gerek yok. Bir hata olduğunda hata fırlatıyor ve catch bloğunun içine giriyor. Eğer bir sorun olmazsa çalışmaya devam ediyor.
Bütün db isteklerinde options kısmına ‘session’ parametresi girilmek zorunda. Eğer Session içinde yapılan değişilikleri iptal etmek istersek ‘session.abortTransaction()’ fonksiyonunu kullanabiliriz.
API şeklinde kullanmak için ise yine session’ı tanımlıyoruz.
Daha sonra burada ‘withTransaction()’ ile değil direkt session’ı başlatıyoruz.
> await session.startTransaction()
Session başlattıktan sonra yine bütün db işlemlerinin options kısmına parametre olarak ‘session’ vermemiz gerekmektedir.
Bu yöntemle kullanırken en son bütün işlemler bittiğinde ve herhangi bir hata alınmadıysa aşağıda ki komutu çalıştırarak Transaction commit edilmelidir.
> await session.commitTransaction()
Eğer herhangi bir yerde hata alındıysa ve servis Catch bloğuna takıldıysa aşağıda ki kodla transaction’u iptal etmemiz lazım.
> await session.abortTransaction()
Bütün işlemlerin sonunda transaction’u kapatmamız gerekiyor. Bunun için aşağıda ki kodu kullanabiliriz.
> await session.endTransaction()
Yazılım Geliştiricisi
SAP S/4 HANA ile Dijital Dünyayı Yakalayın
SAP S/4 HANA, SAP HANA üzerinde çalışan, yapay zekâ ve öğrenen makineler gibi akıllı teknolojileri içeren, entegre bir ERP sistemidir. SAP,...
SAP Signavio Ne İçin Kullanılır?
SAP Signavio, işletmelerin süreçlerini tasarlamasına, analiz etmesine, iyileştirmesine ve süreç değişikliklerini yönetmesine yardımcı...
Yeni e-Beyan Sistemi: Damga Vergisi Beyanında Yeni Dönem
Gelir İdaresi Başkanlığı (GİB), mükelleflerin beyanname süreçlerini kolaylaştırmak ve dijital dönüşüme hız kazandırmak için yeni...
Fiori Hızlı Aktivasyonu (Fiori Rapid Activation) Nedir?
SAP Fiori, çeşitli cihazlarda SAP kullanıcı arayüzünü sadeleştirmek ve modernize etmek için tasarlanmış bir kullanıcı deneyimi (UX)...
SAPUI5’te OData V2 ve V4 Karşılaştırması
SAPUI5 tabanlı Fiori uygulamalarının çoğu uzun süre OData V2 protokolü ile geliştirildi. Ancak SAP’nin modern geliştirme paradigması olan...
SAP AI Core Nedir? Özellikleri ve Avantajları
SAP AI Core, işletmelerin makine öğrenimi (ML) modellerini geliştirmesine, yönetmesine ve dağıtmasına olanak tanıyan bulut tabanlı bir...
Otomotiv Tedarikçileri SAP S/4HANA Dönüşümünde Nasıl Başarı Sağlar?
Bu blog yazısında otomotiv tedarikçilerinin başarılı bir S/4HANA dönüşümü için nasıl ilerlemeleri gerektiğini, nelere dikkat etmeleri...
Çevik Proje Yönetimi Nedir?
Proje yöneticilerinin projeleri en iyi şekilde yürütmek için seçebilecekleri birçok proje yönetimi metodolojisi bulunmaktadır. Bu...
SAP Cloud Integration Nedir? Avantajları Nelerdir?
SAP Cloud Integration'ı TanıyalımGüvenlik, maliyet ve yönetim ihtiyaçları nedeniyle uygulamalarını buluta taşıyan şirketlerin oranı her...
Mailiniz başarıyla gönderilmiştir en kısa sürede sizinle iletişime geçilecektir.
Mesajınız ulaştırılamadı! Lütfen daha sonra tekrar deneyin.