Mesajlaşma uygulamasında veri tabanı ilişkilendirilmesi nasıl yapılır?

esti002

Femtopat
Katılım
12 Mayıs 2021
Mesajlar
83
Merhabalar forumdaşlar.

Tecrübe edinmek amacı ile Microsoft SQL server kullanarak küçük bir uygulama yapıyorum. Ancak aklıma soru takıldı. Veritabanına işlememiz gereken veri sayıyı çok fazla olursa bu veritabanını nasıl inşa edebiliriz?
Biraz daha açmak gerekirse; örneğin WhatsApp gibi bir mesajlaşma uygulamasında mesajları veritabanına nasıl işleyebilirim? Aklıma iki yöntem geliyor, birincisi her bir mesajı mesajlar tablosunda tutup mesajın ID'sininden çağırarak ilgili yerlerde mesajı kullanmak. Bence bu yöntem ile WhatsApp gibi gün içinde milyonlarca mesaj atılan bir uygulamada o kadar mesajın veritabanında ayrı ayrı tutulması imkansız geliyor ki tutulsa bile bir süre sonra veri tabanı hantallaşmaz mı? Aklıma gelen ikinci yöntem ise her iki kişinin mesajlaşmasına ID verip oraya yazılan mesajları oradaki sütunlara kaydetmek geliyor. Ki bu yöntemle de kişilerin kaç mesaj atacaklarını bilmediğimizden tabloda belli bir sütun sayısı belirtemeyiz. Ondan dolayı bu yöntem de patlıyor.

İnternette de biraz araştırdım ancak ne yazık ki yeterli bilgiye ulaşamadım. Sizce bu veri tabanı en verimli şekilde nasıl tasarlanabilir ya da büyük şirketler nasıl tasarlıyor? Farklı bir veri tabanı mı kullanmak gerekir? Şimdiden cevaplarınız için teşekkür ediyorum. İyi forumlar...
 
Son düzenleyen: Moderatör:
WhatsApp'da veritabanına bağlanmıyorsun diye biliyorum.Dosyalar senin cihazında ve Mailine kaydediliyor.
WhatsApp'ı örnek olarak verdim. Farklı veri kaydı tutan uygulamalar üzerinden de düşünebilirsiniz.

Ancak yine de mesajları yedeklediğimizde mesajlar bir veritabanına aktarılıyor sanırım.
 
Bildiğim kadarıyla WhatsApp, mesajları telefonda depoluyor. Soruna gelecek olursak, bunun için farklı yöntemler ve veriyi çağırma işlemleri düşünebilirsin.

Mesela bir sohbet uygulamasında, kayıt olduğundan beri 10 kişiyle sohbet ettiğini varsayalım. Her 10 kişinin mesajını, ayrı ayrı gruplandırabiliriz. Böylece bir düzen oluşur. Ayrıca verileri çağırırken, kişinin sohbetine girince yüklenmesini sağlayabilirsin. Uygulamayı açar açmaz tüm mesajları yüklemeye çalışırsan, biraz hantal kalabilir. Kişinin sohbetine girince mesaj yüklenmesi sistemini yaparsan, daha pratik olur. Sen bilirsin yine de.
 
RDBMS kullanmak zorunda degilsin.
Uygulaman agirlikli olarak DB'ye yazacaksa buna uygun veritabani secmek gerekiyor.
Isin ozu dogru iliski kurmakta degil, gerek degilse iliski kurmamakta. ( NoSQL gibi )
Zira Microsoft SQL yerine Mongo kullansan write performansin 5~10 kat artar.
Log, mesaj gibi write heavy ve zamana bagimli veriyi baska db'de,
Image, dokuman gibi blob datasini uygun disklerde,
Grup/Profil bilgisi gibi dogasi geregi relational olan seyleri de RDBMS de tutabilirsin.
Nedense her durumda relational DB kullanmak gibi bir huy var Turkiye'de. Resimleri, loglari vs her seyi tutup da transactional olarak veritabanina yaziyorlar.
 
Ayrıca verileri çağırırken, kişinin sohbetine girince yüklenmesini sağlayabilirsin. Uygulamayı açar açmaz tüm mesajları yüklemeye çalışırsan, biraz hantal kalabilir. Kişinin sohbetine girince mesaj yüklenmesi sistemini yaparsan, daha pratik olur. Sen bilirsin yine de.
Bu kısımda ben de sizin gibi düşünüyorum.
Mesela bir sohbet uygulamasında, kayıt olduğundan beri 10 kişiyle sohbet ettiğini varsayalım. Her 10 kişinin mesajını, ayrı ayrı gruplandırabiliriz. Böylece bir düzen oluşur.
Ancak bu kısmı tam olarak anlayamadım. Biraz daha veritabanına dökerken nasıl yapabileceğim hakkında daha detaylı açıklama yapabilir misiniz misiniz.
RDBMS kullanmak zorunda degilsin.
Uygulaman agirlikli olarak DB'ye yazacaksa buna uygun veritabani secmek gerekiyor.
Isin ozu dogru iliski kurmakta degil, gerek degilse iliski kurmamakta. ( NoSQL gibi )
Zira Microsoft SQL yerine Mongo kullansan write performansin 5~10 kat artar.
Nedense her durumda relational DB kullanmak gibi bir huy var Turkiye'de.
Cevabınız için teşekkür ederim hocam dediğiniz konular hakkında biraz bilgi edinmem gerek :)
 
Son düzenleme:
Ancak bu kısmı tam olarak anlayamadım. Biraz daha veritabanına dökerken nasıl yapabileceğim hakkında daha detaylı açıklama yapabilir misiniz misiniz.
Mesela uygulamada 20 kişi kayıtliysa, her 20 kişi için tablo oluşturabilirsin. Kişiye gelen, giden mesajları da bu tabloda tutabilirsin. Ayrıca böylece gelen ve giden mesajları da filtreleyebilirsin.

Ayrıca @bitwise önerisi de mantıklı.
 
Mesela uygulamada 20 kişi kayıtliysa, her 20 kişi için tablo oluşturabilirsin. Kişiye gelen, giden mesajları da bu tabloda tutabilirsin. Ayrıca böylece gelen ve giden mesajları da filtreleyebilirsin.

Ayrıca @bitwise önerisi de mantıklı.
Cevaplarınız için size de çok teşekkür ederim hocam ancak düşündüğümde sizin yönteminiz dar kullanıcılı uygulamalarda etkili olsa da uygulamayı kullanan kitle arttıkça veritabanının yönetimi zorlaşacaktır. Bundan dolayı daha kapsamlı bir çözüm bulmak gerekir diye düşünüyorum. Veritabanı bir kere inşa edildikten sonra çok fazla değişikliğe gerek kalmadan kendini idare edebiliyor olmalı.
 

Technopat Haberler

Geri
Yukarı