Sql'den NoSql Tasarım Nasıl olmalı. ?

Kodla Büyü

devcodeblog

Seçkin Üye
Seçkin Üye
Mesajlar
995
Merhabalar;

Elimde Mysql için tasarlanmış bir veritabanı mevcut. Bunu noSql bir çözüm olan mongodb'ye migrate etmek istiyorum. Daha önceden nosql ile tasarım yapmadım. Şu şekilde yaparsam sağlıklı bir çözüm olur mu danışmak istiyorum. Burada özellikle "food" tablosundaki kısımlar önemli bir hal alıyor. Açıkça yazmak matıklısı.

Soru : Yorumlar tablosunu ayrı bir collection da tutmak istiyorum. Çok fazla yorum ve beğeni olabilir. Fakat burada özelllikle yemek adımlarını ve malzeme listesini foods collectionında kalması bana mantıklı geliyor. Zira bunlar 10-15 adımda bitiyor. Ne şekilde olabilir. Yardımlarınızı bekliyorum. Saygılar. Özellikle foods collectionının şişmesi gibi bir durum olabilir mi. ?


foods :
_id:ObjectID
food_name : "İzmir Köfte",
food_time: "40 dk",
person_numb:"4 Kişilik",
user_id : ObjectID,
tarifKategori : ["Ana Yemekler", "Sulu Yemekler"],
food_image:"https://.......................",
comment:[
{
comment_id:ObjectID,
comment_id:ObjectID,
comment_id:ObjectID
}
],

tarif_malzemeler:[
{
tarif_id:ObjectID,
tarif_id:ObjectID,
tarif_id:ObjectID
} ],

tarifBegeni:[
{
begeni_id:ObjectID,
begeni_id:ObjectID,
begeni_id:ObjectID,
} ]
 

Ekli dosyalar

  • IMG_20210717_225955.jpg
    IMG_20210717_225955.jpg
    158.7 KB · Görüntüleme: 70
Hocam tablo gayet uygun tasarlanmış duruyor. Ancak ben olsam yorum ve beğeni tablosunda olduğu gibi, tarirfler tablosunu da ayırırdım. Tarifte değişiklik yapıldığında food tablosunda değil, tarif tablosunda değişilik yapılmış olur. İleride bir yemeğin birden fazla tarifi de eklenebilir. Böyle yapsanız da şişme olmaz ama tariflerin ayrı bir tablo şeklinde tutulması db tasarımı açısından daha ideal olur.
 
Son düzenleme:
Tek tarif olacağı için bu şekilde düşündüm hocam. Yorum ve beğeni kısmını mecburen dışarıya aldık. Tarif de belli bir adım olduğu için çok fazla veri gelmeyeceğini düşündüğüm için food tablosunda tutayım dedim.
 
Merhabalar;

Elimde Mysql için tasarlanmış bir veritabanı mevcut. Bunu noSql bir çözüm olan mongodb'ye migrate etmek istiyorum. Daha önceden nosql ile tasarım yapmadım. Şu şekilde yaparsam sağlıklı bir çözüm olur mu danışmak istiyorum. Burada özellikle "food" tablosundaki kısımlar önemli bir hal alıyor. Açıkça yazmak matıklısı.

Soru : Yorumlar tablosunu ayrı bir collection da tutmak istiyorum. Çok fazla yorum ve beğeni olabilir. Fakat burada özelllikle yemek adımlarını ve malzeme listesini foods collectionında kalması bana mantıklı geliyor. Zira bunlar 10-15 adımda bitiyor. Ne şekilde olabilir. Yardımlarınızı bekliyorum. Saygılar. Özellikle foods collectionının şişmesi gibi bir durum olabilir mi. ?


foods :
_id:ObjectID
food_name : "İzmir Köfte",
food_time: "40 dk",
person_numb:"4 Kişilik",
user_id : ObjectID,
tarifKategori : ["Ana Yemekler", "Sulu Yemekler"],
food_image:"https://.......................",
comment:[
{
comment_id:ObjectID,
comment_id:ObjectID,
comment_id:ObjectID
}
],

tarif_malzemeler:[
{
tarif_id:ObjectID,
tarif_id:ObjectID,
tarif_id:ObjectID
} ],

tarifBegeni:[
{
begeni_id:ObjectID,
begeni_id:ObjectID,
begeni_id:ObjectID,
} ]
https://scholar.google.com/scholar?hl=tr&as_sdt=0,5&q=migrate+from+rdbms+to+nosql&btnG= bu baslıgı ıncelmenızı tavsıye ederım
 
Hocam nosqlde tasarımı sizin uygulamada ne tarz sorgular yapacağınız belirler.

Örneğin kullanıcılar ve yorumlarını tutmak istiyorsunuz diyelim. Sqlde bunun tasarımı bellidir. Kullanıcılar tablosu olur, yorumlar tablosu olur ve de bunları idleri üzerinden eşleştireceğiniz bir eşleme tablonuz olur.

Aynı senaryoyu nosqlde gerçekleştirirken ise nasıl yaklaşacağınız ileride ne tarz sorgular kullanacağınıza bağlıdır. örneğin 'tüm kullanıcıların' yorumlarında arama yapmanız gereken bir sorgunuz olacaksa tasarım sqldeki gibi olmalıdır. Yani yorumlar ayrı bir collectionda tutulur ve 3. bir collection ile eşleme yapılır. Fakat yorumlar üzerinde tüm kullanıcıların taranması gereken sorgularınız olmayacak, sorgular yalnızca tek kullanıcı düzeyinde kalacaksa her kullanıcı nesnesinde bir dizi tanımlayıp yorumlarını da burada tutabilirsiniz.

Peki ikinci gibi tasarlayıp tüm kullanıcılar üzerinden sorgu yapamaz mıyız? Veritabanının küçük boyutlarda kalacağı belliyse tabi ki yapabiliriz fakat veri büyüdükçe ciddi performans kayıpları ve kaynak tüketimi kaçınılmaz olur.
 
Geri
Üst