MongoDB tercihi

37 views
Skip to first unread message

Zafer Çelenk

unread,
Jan 26, 2016, 3:11:37 AM1/26/16
to mong...@googlegroups.com
Merhaba,

Kendi adıma geliştirmekte olduğum ve araç kiralama firmalarının araç, müşteri ve rezervasyon işlemlerini takip edecek web tabanlı bir otomasyon sistemi üzerinde çalışıyorum. Proje başlangıcında birazda popüler olmasından dolayı veritabanı olarak MongoDB tercih etmiştim. 

Doğrusu o zamanlar NoSql yaklaşımınıda tam kavrayamamıştım. Şimdi baktığmda MongoDB tasarımını geleneksel ilişkisel veritabanı gibi tasarlamışım. Projemde ilişkili tablolar ve bazı yerlerde transactionlar gerekecek. Sormak istediğim böyle bir proje için MongoDB uygun mu? Yoksa örneğin PostgreSQL gibi bir veritabanı mı tercih edilmeli?

Zafer.

İrfan Evrens

unread,
Jan 26, 2016, 3:47:48 AM1/26/16
to mong...@googlegroups.com
Elbette mongodb'yi de kullanabilirsin, amaç data saklamak ve grud işlemleri ise. Burada önemli olan sizin probleme nasıl bir algoritmik çözüm bulduğunuz ile alakalı. Bazen mongo db ile işleri yapmak olayları o kadar basitleştirir ki, şaşar kalır insan. Bazen de veri tabanında veri tekrarı öyle bir dereceye ulaşır ki farkettiğinizde sizi ciddi bir revizyon bekliyor demektir.
Burada bana göre önemli konu şudur. Verilerinizin ilişkisi doğrusal mı yoksa kompleks mi? sorusuna vereceğiniz cevap önemlidir. Tabi projeye göre hem doğrusal hem de kompleks bir yapı birlikte yer alabilir. Bu durumda da hem rdms hem de nosql kullanmak uygun olanıdır.
Mesajda da belirtiğiniz gibi mongodb'yi ilişkisel veritabanı gibi kullanmanız sizi zor durumda bırakmış anladığım kadarıyla. En basit kural bana göre şu aslında;
  • Bir Veri'nin başka bir veri ile ilişkisi var mı?
    • Evet
      • İlişki doğrusal mı (ör: ülke, şehir, ilçe, semt, dikkat: ülkenin başka ilişkisi yoksa, ki genelde vardır, örnek olsun diye verdim, yanlış anlaşılmasın da)
        • Evet
          • NoSQL, RDMS
        • Hayır
          • RDMS
    • Hayır
      • NoSQL

26 Ocak 2016 10:11 tarihinde Zafer Çelenk <zafer...@gmail.com> yazdı:

Zafer.

--
Bu iletiyi Google Grupları'ndaki "MongoDBTR" grubuna abone olduğunuz için aldınız.
Bu grubun aboneliğinden çıkmak ve bu gruptan artık e-posta almamak için mongodbtr+...@googlegroups.com adresine e-posta gönderin.
Daha fazla seçenek için https://groups.google.com/d/optout adresini ziyaret edin.



--
İrfan Evrens
Yazılım Mühendisi
Facebook: http://facebook.com/irfanevrens
Twitter: http://twitter.com/irfanevrens

Zafer Çelenk

unread,
Jan 26, 2016, 4:07:19 AM1/26/16
to mong...@googlegroups.com
Selamlar İrfan,

Verilerim arasında elbette ilişkiler var. Bununla beraber kritik ilişkilerde mevcut yani bir müşteri araç kiraladığında hem bu bilgi ilgili tabloya gitmeil hemde müşteri bakiyesi bu işleme istinaden değişmeli ve veri bütünlüğü korunmalı, MongoDB'yi sevdim, kullanışlı ve pratik ancak benim projem için pek doğru bir tercih olmadığını düşünüyordum. 

Bu vesile ile sizlerinde fikrini almak istedim. Sanırm PostgreSQL gibi bir veritabanı benim için şu aşamada en iyi çözüm olacak, belki ileride proje daha fazla gelişip NoSql ihtiyacı ortaya çıkarsa, MongoDB'yi o zaman düşünmeliyim.

Zafer.

Osman Yalçınkaya

unread,
Jan 26, 2016, 6:50:02 AM1/26/16
to mong...@googlegroups.com
Merhabalar,

Ben projemde iç içe objeler kurmuştum. Örneğin müşteri ve araç objeleriniz var diyelim. Araçlar müşteri içinde liste olarak tutuluyor. 

Bu şekilde kurmak işinize yarayabilir mi acaba ?

Osman Yalçınkaya

26 Oca 2016 tarihinde 11:07 saatinde, Zafer Çelenk <zafer...@gmail.com> şunları yazdı:

Zafer Çelenk

unread,
Jan 26, 2016, 7:08:45 AM1/26/16
to mong...@googlegroups.com
Merhaba,

Aslında doğru NoSql yaklaşımı (yanlışım varsa düzeltin) bu şekilde yani koleksiyon içindeki her bir döküman kendi başına anlamlı olmalı,  böylece ilişkili başka veriye ihtiyaç duyulmamalı. Ancak bu yaklaşımında başka bir sorunu var. 

Örneğin senin verdiğin örneğe bakalım, her bir müşteri dökümanı içinde araç bilgiside olsun. İleride oldu ki araç bilgisine bir ekleme yapıldı veya bir güncelleme bu durumda tüm dökümanların elden geçirilip bu bilginin güncellenmesi gerekecek. Oysa ilişkisel veritabanında bu iş çok daha pratik ve işin aslı benim projemde bu tür güncellemeler sık sık olabilecek senaryolar.

Ayrıca bir de  veri bütünlüğü (transaction) olayı var. Bu konuda internetten okuduklarıma göre bu tür işlerde NoSql pek önerilmiyor. Sizler NoSql'i ne tür projelerde kullandınız veya kullanıyorsunuz? Kullandığınız projelerde ne tür dezavantajlar gördünüz.?

Zafer.

Umut Çelik

unread,
Jan 26, 2016, 7:32:17 AM1/26/16
to mong...@googlegroups.com
Merhaba,
Oncelikle eger transaction'a ihtiyac duyuyorsaniz MongoDB sizin icin uygun degildir, atomic transaction yapar sadece. Genelde kullanim sekli, transactional verileri bunu destekleyen bir db de, icerik verilerini MondoDB'de tutmaktir.

Veri yapasi tasarimina gelince, sql den nosql'e gecildiginde en sik yapilan hatalardan bir tanesi. Kullanan herkesin basina gelmistir bu gayet normal. 
SQL'de veriler nasil saklanacagina gore tasarlanirken ( normalizasyon ) nosql'de nasil gosterilecegine/kullanilacagina gore tasarim yapilir genelde. Bunun icin dokumantasyona buradan ulasabilirsiniz https://docs.mongodb.org/manual/applications/data-models-relationships/

En basit tavsiye genelde once kullandiginiz programlama dilinde nesneleri tasarlayin daha sonra bunlari mongoDB ye aktarin seklinde. Yillarca sql de calistigimiz icin once db yi tasarlayip daha sonra bunlari objelere map etmeye calisiyorduk, bunun tam tersini yapmaniz daha verimli olacaktir.


Zafer.

--

Zafer Çelenk

unread,
Jan 26, 2016, 11:20:30 AM1/26/16
to mong...@googlegroups.com
Merhaba,

Zaten ilk paragrafta durumu net bir şekilde özetlemişsiniz. Benim projemin mevcut durumu için MongoDB'nin doğru bir seçim olmadığını anladım. 

Ayrıca NoSql yaklaşımı hakkında verdiğiniz pratik bilgiler için teşekkürler, bunları araştıracağım.

Zafer.
Reply all
Reply to author
Forward
0 new messages