• 16-10-2024, 11:51:42
    #10
    vido adlı üyeden alıntı: mesajı görüntüle
    iş görür. gönderen_id ve alan_id indeksleri ekleyin yoksa.

    ben olsam şöyle yapardım.
    conversations: id, to_user, from_user, created_at
    messages: id, conversation_id, sender_id, is_read, deleted_for_user, created_at

    yapının mantığı:
    konuşma başlatma: bir kullanıcı, başka bir kullanıcıya mesaj göndermek istediğinde önce conversations tablosunda iki kullanıcı arasında bir konuşma olup olmadığı kontrol edilir. eğer yoksa yeni bir konuşma başlatılır ve mesaj bu konuşmaya eklenir.
    mesaj gönderme: mesajlar, mevcut bir konuşmaya eklenir ve mesajın kim tarafından gönderildiği, ne zaman gönderildiği bilgileri saklanır.
    mesaj silme: mesajlar tablosuna bir silme durumu eklenir. bu sütun mesajın kim için silindiğini takip eder
    Hocam zaten gerekli bilgiyi vermiş , örneğinde özellikle zamanları unutma sıralama vb işlerini de yapacaksın . Status , sender , msg_type , time , isread , lang , deleted gibi verileri de tutman ileri vadede daha efektif çalışmanı sağlar .
  • 16-10-2024, 19:12:47
    #11
    kullanım tipine göre yoğunluğa göre çok değişir.
    yoğun kullanılacak bir sistem olacaksa mysql kullanmayın, yinede kullanabilirsiniz fakat sistem kaynakları çoksa veya managed bir servis kullanıyorsanız olabilir.
    self hosted düşünüyorsanız percona nın mongodb kullanabilirsiniz. (veri çoğaldıkça index + hız için ram gerekir, sunucuyu yeniden başlatmada problemler olabilir.)
    yine postgresql tabanlı live database alternatifleri var.
    cloud da firebase ve supabase (self hosted da var)
  • 16-10-2024, 23:50:55
    #12
    Yakın zamanda php ve mysql ile imzamdaki rabbit ürünü ile websocket anlık mesajlaşma sistemi kodladım.

    Olay tamamen meta verilerde bitiyor. Serialize veri saklamayı alışkanlık haline getirin. Redis yani object cache ile destekleyin. Mysql triggerlar ya da php cronlar ile son 100 mesajı sürekli ayrı bir serialize sistemli tabloda multidimensional array olarak tutun ve bunu sunun. Gerekli yerlerde eski mesajlara gitmek isterse ana veriye geçiş yapın.

    Olay veritabanı değil. Olay tamamen akılcılık.

    Mysql ile olmaz diyenler olmuş, komik. Olur. Index ile bir şeyi çözemezsin. Junior işi bunlar. Yeni veri girişinde index ne işe yarayacak? Index sadece ana veri yani ikincilde işe yarar. Siz sürekli son 100 mesaja dediğim sistemle oynayın.

    Nasıl olur size kalmış ama olması gereken bu.

    Ek olarak, pcc ve occ kavramlarını araştırın. İyi bir pcc lock class'ı kodlayın. Aksi halde ciddi concurrent sorunları yaşarsınız.

    R10a da sormayın bunları. Burası php ya da mysql bildiğini sananların yeri. Bunlar giriş aşamasında çok kolay diller o yüzden herkesin fikri var ama yanlış.