yakoSin adlı üyeden alıntı: mesajı görüntüle
Kategori / alt kategori mantığında yürütebilirsin. İlk mesaj kategoridir. (parent_id=0) bu mesaja yazılan cevaplar alt kategoridir. (parent_id=ilk mesaj id) Gösterirken de order by id desc dersen zamana göre sıralamış olursun. (bknz facebook'taki mesajlaşma akışı)

Öncelikle benim tavsiyem aceleye getirmeden ileriye yönelik düşünerek bu sistemi oturtmanız. Esnek bir yapı olmalı ve ileriye yönelik geliştirilebilir olmalı. Bunun için bir mesaj kutusunun özelliklerini belirteyim.

- Bir konuşma başlatılmalı (conversation)
- Bu konuşmaya dahil olan kullanıcılar belirlenmeli (member)
- Yine bu konuşmaya ait mesajlar eklenebilmeli (message)
- Bu konuşmadaki mesajların üye bazlı durumları kaydedilmeli. (message_status)

Şimdi bu yapıda ne demek istediğimi örnekle anlatmak istiyorum.

uye [id - ad]
----------------------
1 - mtn
2 - test
3 - deneme
4 - demo


konusma [ id - konuşmaya özel unique kod - oluşturulma tarihi - güncellenme tarihi ]
----------------------
1 - abc123 - 2014-07-02 14:55:58 - 2014-07-02 14:58:24


konusma_uye [ konusma.id - uye.id - yeni_mi - silinmis_mi ]
----------------------
1 - 1 - hayir - hayir
1 - 4 - evet - hayir


konusma_mesaj [ id - konusma.id - uye.id - mesaj içerik - gonderilme tarihi ]
----------------------
1 - 1 - 1 - merhaba nasılsın? - 2014-07-02 14:55:58
2 - 1 - 1 - neden cevap vermiyorsun??? - 2014-07-02 14:58:24


konusma_mesaj_durum [ mesaj.id - uye.id - yeni_mi - silinmis_mi ]
----------------------
1 - 1 - hayir - hayir
1 - 4 - evet - hayir
2 - 1 - hayir - hayir
2 - 4 - evet - hayir



Yukarıdaki yapının özeti; mtn kullanıcısı demo kullanıcısına 2014-07-02 14:55:58 tarihinde "merhaba nasılsın?" diye mesaj göndermiş. demo kullanıcısı henüz bu mesajı okumamış. mtn kullanıcısı 2014-07-02 14:58:24 tarihinde "neden cevap vermiyorsun???" diye bir mesaj daha göndermiş ve demo kullanıcısı henüz bu mesajı da okumamış.


Şimdi yukarıdaki yapıyı kurduğumuz zaman alttaki özelliklerin hepsine sahip oluyoruz:
  • İki kişi veya daha fazla kişi kendi aralarında mesajlaşabilir
  • Mesaj ve konuşma durumları üye bazlı tutulduğu için benim sildiğim mesajı, konuşmadaki diğer kullanıcılar silmedikleri sürece görebilirler.
  • Konuşmaya yeni bir mesaj yazıldığı zaman, dahil olan tüm kullanıcılarda o konuşma en güncel konuşma durumuna geçer.
  • Ve bu yapıya biraz ekleme yapılarak mesaj okunma zamanı eklenebilir.

Şu an için ilk bakışta aklıma gelenler bunlar. Senin problemlerine bakacak olursak;

Problem 1: Bu sistemi geliştirmekte olduğumuz private social network sisteminden basitleştirerek anlatmaya çalıştım. Bizim testlerimizde -veritabanı tablo indexleri ve ön taraftaki cache yapısı ile- 1 milyonun üzerinde mesajda performans sorunu yaşamadık. Zaten yazılım dünyası bu kadar hızlı gelişiyorken 2 sene bu yapıyı aynen kullanmak mantıksız. Mutlaka yeni birşeyler çıkacak ve biz test ediyor olacağız.

Problem 2: Kullanıcı özellikle bir konuşmaya ait mesajı silmediği taktirde -ya da konuşmayı direk silmediği taktirde- kaç sene sonra girerse girsin konuşma geçmişini görecektir.

Problem 3: Burada 2 çözüm var. Birincisi her yöneticiye özel bir member_id vererek mesajlaşma sistemine dahil edebilirsin. (bu biraz yama yöntemi gibi olur). Zaten yukarıdaki yapıda kullanıcılar bir konuşmaya dahil oldukları için dilediğin zaman bir yöneticinin bir konuşmaya dahil olmasını sağlayabilirsin.

Umuyorum aklındaki problemleri bu yapı ile çözüme kavuşturmuş olursun. Bu tarz beyin fırtınalarını çok sevdiğim için herhangi bir konuda yardım gerekirse seve seve elimden geleni yaparım. Kolay gelsin...