Mongoose ile Birden Fazla Sunucudan Veri Almak (Express.js)

Merhaba arkadaşlar, uzun zamandır bir şeyler karalayamıyordum. Bugün sizlerle mongoose ile Express serverda nasıl birden fazla MongoDB sunucusuna bağlanabiliriz onu göstereceğim. Hatalarım, eksiklerim olabilir veya daha kolay uğraş gerektirmeyen bir çözümü var ise bilmek ve yazıma eklemek isterim. Lütfen yazının altına yorum olarak girin ki, okuyucuları yanlış yönlendirmeyelim.

Ne zaman ihtiyaç duyarım?

MongoDB sunucusuna epey bir yük bindiği için, bazı raporlama sorgularında artık yetersiz kalmaya başlamıştı. Aklımıza verilerin bir kısmını ana sunucudan bir kısmını replika sunucumuzdan çekmek geldi fakat sorgularımız tek bir MongoUrl üzerinden gidip geliyordu. Sorguların replika sunucumuza gitmesi için Express serverda birkaç değişiklik yapmamız gerekti. Bu tarz 2. bir sunucuya ihtiyaç duyduğunuz zamanlarda, aşağıda göstereceğim yöntemi kullanabilirsiniz.

Nasıl kullanabilirim?

Express serverda bildiğiniz gibi normal şartlarda server başlangıç dosyamızda aşağıdaki gibi MongoDB’ye bağlanabiliyoruz.

Farklı bir MongoDB sunucusuna daha bağlanmak için ise bir db_connect.js dosyası oluşturalım. İsmi önemli değil, tamamen tercihinize bağlı. Bu dosyayı mongoose import ettiğimiz yerde, mongoose yerine kullanacağız.

db_connect.js içeriği

Gördüğünüz üzere 2 farklı bağlantı oluşturup mongooseu export ediyoruz. Fakat burada önemli bir nokta var. Eğer 2 farklı sunucudan model kullanarak veri çekecekseniz, yukarıda oluşturduğumuz primary veya secondary bağlantıyı kullanan farklı model dosyaları oluşturmalısınız.

Hemen bir örnek yapalım. Users ve Products adında 2 modeliniz olduğunu varsayıyorum. Users modeli primary bağlantıyı, Products modeli ise secondary bağlantıyı kullanacağını düşünelim. O halde, model dosyalarımızın içeriği şu şekilde olmalıdır;

Users Model İçeriği

Products Model İçeriği

Bu kadar basit, şu an verileri farklı sunuculardan çekebiliriz :)

Replika Konusunda Ufak Bir Not

Bu konuda benim karşılaştığım bir sorun şu oldu; Sorguları replika sunucuna gönderdiğim halde, otomatik olarak ana sunucuya gitti. Burada db_connect dosyasında replika sunucusuna giden Mongo URL’e 2 tane parametre eklemek gerekiyor.

  1. replicaSet=replName
    Replikasyonu kurarken kullandığımız replika setin adını vermek gerekiyor. Fakat bunu vermek yetmiyor, hala primary olan node hangisi ise ona gidiyor.
  2. readPreference=secondaryPreferred
    Bu parametre bütün sihri gerçekleştiren kısım. Verileri getirirken öncelikle secondary olan node hangisi ise, ondan getir. Eğer okuyamazsan ise primary olan node üzerinden getir diyoruz.

Yani toparlarsak, eğer replika sunucunuzdan veri çekmek isterseniz temelde şöyle bir connection URL’e sahip olmanız gerekiyor.

Umarım anlattıklarım faydalı olmuştur ve birilerine faydalı olur. Sağlıcakla kalın.

Written by

Full-Stack Front End Developer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store