Geleneksel çözüm çizgisinde bir join table şeydir:
CREATE TABLE topicviews (
userid INTEGER NOT NULL,
topicid INTEGER NOT NULL,
lastread TIMESTAMP NOT NULL,
PRIMARY KEY (userid, topicid),
FOREIGN KEY (userid) REFERENCES users(id),
FOREIGN KEY (topicid) REFERENCES topics(id)
);
lastread her zaman güncel olan bir konu okunur. Topics.lastupdated isimli> topicviews.lastread, yeni mesaj varsa, konuların listesini görüntüleyen zaman.
The traditional solution is rubbish and will kill your database! Don't do it!
İlk sorun, her konu görünümünde bir yazma yakında özellikle, sadece tablo düzey kilitleri var MyISAM tabloları üzerinde, yoğun bir forumda onun diz veritabanı sunucusu getirecek olmasıdır. (Tam metin arama dışında her şey için InnoDB kullanmak, MyISAM tabloları kullanmayın).
Sadece konunun okunan yeni mesajlar aslında var lastread zaman içinde yazmak için rahatsız bu durumdan biraz artırabilir. Topic.lastupdated if < Eğer değerini güncelleyerek elde bir şey yok topicviews.lastread. Buna rağmen, yoğun olarak kullanılan forumunda bu bir yük olabilir.
İkinci sorun birleştirici bir patlama meydana geldi. Sadece bin kullanıcı ve bin konuları ve potansiyel bir milyon baþlýkSonraki satır saklamak zorunda: Konuya kullanıcı başına bir satır yakında ekler!
Her kullanıcı için hatırladı konuların sayısını sınırlayarak bu duruma biraz artırabilir. Örneğin belli bir yaş daha yaşlı aldığında Gösterim tabloda herhangi bir konuyu kaldırmak ve sadece tüm eski konuları 'oku' olduğunu varsayıyorum olabilir. Bu, genel olarak arka planda yapılması gereken bir temizleme işi gerekmektedir.
Diğer, daha az yoğun yaklaşımlar şunlardır:
- Sadece forumda başına bir lastread saati depolamak
- sadece kullanıcının daha önceki ziyareti (oturum) bu yana güncellenen 'yeni' sadece şeyler olarak göstermek hangi, tüm site genelinde kullanıcı başına bir LastVisit saati depolamak
- Tüm herhangi lastread bilgiyi depolamak, ancak, konunun URL kendisi son güncelleme süresi dahil değildir. Kullanıcının tarayıcısı son zamanlarda konuyu görmüş ise, URL hatırlamak ve ziyaret olarak işaretlemek. Daha sonra 'yeni mesajları içeren konular' olarak ziyaret bağlantıları stil için CSS kullanabilirsiniz.