Yükleniyor...

Birazdan kaldığınız yerden devam edeceksiniz.

Node.js - MongoDb veritabanındaki bir collection'dan diğer MongoDb veritabanlarına veri taşıma işlemi (mongoose-truck & mongoose)

YayınlandıGüncellendi

Merhabalar, bugün sizlere MongoDb cluster'ları ve veritabanları üzerinde veri taşıma imkanı sunan yeni açık kaynak kütüphanemi tanıtacağım. Açık kaynak kodlu kütüphanemin ismi mongoose-truck'dır.

Node.js - MongoDb veritabanındaki bir collection'dan diğer MongoDb veritabanlarına veri taşıma işlemi (mongoose-truck & mongoose)

Merhabalar sayın okucular, bugün sizlere yeni açık kaynak kodlu projemi anlatmak istiyorum. Öncelikle bu projenin nasıl çıktığından bahsetmem gerekiyor. Proje tam olarak bir ürün MongoDb veritabanından belirli bir veri setini başka bir test, geliştirme veritabanına veri taşırken yaşadığım stresten ortaya çıktı. Elimde bir MongoDb bağlantı text’i vardı. Buna MongoSh ile bağlanıp her seferinde sayfalandırma için gerekli olan script ’leri ekrana yapıştırmam gerekiyordu. Bunun yerine bir Node.js script’i ile bunu çözebileceğimi bilirken bunu yapmak gereksiz bir şeydi. Sonra spesifik bir Schema üzerinde çalışan bir model devreye aldım fakat bunu her Schema için tekrar etmem gerekiyordu. Buna ek olarak ürün mongoose.connect kullanıyordu bu da kodu herhangi bir route’a bağladığımda veya ürünün herhangi bir yerinde çalıştırdığımda mongoose bana hata verecekti. Çünkü ayrı bir script dosyası kullanılmazsa aynı Schema üzerinden yeni bir model başlatılınca mongoose sana bir engel oluşturur.

Ben de MongoDb ’lere dinamik şekilde bağlantı oluşturacak bir paket ve bağlantıyı gerçekleştirecek bir modül oluşturdum. Bu modül bağlantı string ‘ini alır ve size içerisinde dependency olarak bulunan mongoose üzerinden bir veritabanı bağlantısı döner. Bu bağlantıları kullanarak Schema ’lar üzerinden dinamik modeller oluşturulur. Veri taşıma işlemi bu dinamik modeller üzerinden gerçekleştir. Tabii ki bu yapıyı kafamda oturtmak benim için uzun bir süre (2 gün?) aldı.

Modülü 1 gün içinde yazmayı becerebildim ve kendisi şu anda hem GitHub registry hem de npm registry üzerinde açık kaynak kod ve paket olarak bulunmaktadır. Buna ek olarak bu modül üzerinde çalışmak istediğim ve farklı multi-threaded işlemler için geliştirmeler bazı geliştirmeler var. Bunları da GitHub projeler özelliğini kullanarak herkesin görmesini sağlamak istiyorum.

Şimdi birazcık paketin nasıl çalıştığından bahsetmek istiyorum. Paket genel olarak bir yükün bir kamyonla taşınması gibi bir analoji kullanıyor. Önce kaynak ve hedef noktalarla bağlantı kuruluyor. Daha sonrasında kaynaktan yük yükleme işlemi için direktifler veriliyor. Bundan hemen sonra yükün hedef noktalara nasıl döküleceği ile ilgili direktifler veriliyor ve işlemler başlatılıyor.

İlk olarak modülü npm ile yüklememiz gerekiyor

npm i mongoose-truck

snippet.js
javascript1 satırUTF-8
snippet.js
javascript3 satırUTF-8

Yukarıdaki kodda paketi çağırıyoruz. conn1 bizim için kaynak bağlantısını sembolize ediyor. conn2 ve conn3 ise yükü boşaltacağımız noktaları temsil etmektedir

snippet.js
javascript26 satırUTF-8

Bu kısım ise en basit şekli ile conn1'den .loadFrom ile yüklemeye başla .emptyTo ile conn2 ve conn3 'teki boşaltılacak yeri belirle ve .start ile işleme başla olarak düşünülebilir. .loadFrom içerisindeki key ‘ler verilerin ne şekilde çekileceğini belirler.

snippet.js
javascript9 satırUTF-8

Birden fazla kaynaktan veri çekilerek de bu işlemler gerçekleştirilebilir. Örneğin: Kullanıcı collection ‘larım var birden fazla ben ikisini de kullanmak istiyorum. Başka bir örnek olarak aynı collection ‘dan iki farklı query kullanarak veri çekmek istiyorum. Bu durumda ise

snippet.js
javascript54 satırUTF-8

Görüldüğü gibi .loadFrom içerisine bir array alabilir. Farklı collection ‘lardaki verileri tek bir yere toplarken veya tek bir collection ‘dan farklı query ’lerle veri çekilmek istenildiğinde bu şekilde array haline getirilebilir.

.start işlemi içerisine parse isimli bir key alır. Bu key ise veri geçişleri tamamlandığında verinin koda getirilip getirilmeyeceğini belirler. parse:false olarak kullanılırsa boş array dönülür.

Bu bölümde de author’u olduğum mongoose kullanan Node.js uygulamalardaki iki veya daha çok MongoDb veritabanı arasındaki veri taşımanın kolay yolunu görmüş bulunmaktayız. Paketin GitHub sayfasına ulaşmak için

GitHub - cangokceaslan/mongoose-truck: mongoose-truck is a Node.js package for handling with data transaction between different MongoDb clusters.

Npm sayfası:

mongoose-truck