2011-09-21 46 views
6

Bağlantı paylaşımı sitesinde, kullanıcıların bağlantıları paylaşıp yorum gönderebileceğini varsayalım. Bir bağlantıyı takip eden kullanıcıların, orada yorumlar yayınlandığında bildirilmesi gerekir. Bir kategoriyi takip eden kullanıcılar, bağlantılar bu kategoride paylaşıldığında bilgilendirilmelidir. Bu bildirimleri saklamanın en iyi yolu ne olurdu?Kullanıcı bildirimlerini saklamanın en iyi yolu nedir?

Bunları tek tek saklayabilirim, bu durumda onları almak basit olurdu, ancak her bağlantı kurulduğunda bu kategoriyi izleyen 10.000 kişi için bir bildirim eklemem gerekir.

Ayrıca, her seferinde bildirimleri de hesaplayabilirim. Bu durumda, bir kullanıcının giriş yaptığı son görüntüden bu yana yeni yorumların sayısını sayabilir ve görüntüleyebilirim. Ancak, eski bildirimleri kaydedemem.

Seçeneklerim nelerdir?

comments 
- id 
- user 
- link 
- content 

links 
- id 
- user 
- content 

subscriptions 
- id 
- user 
- link 

yeni bir yorum bir bağlantıyı yapılır her zaman, bu bağlantı abone olan tüm kullanıcılar alacağını bir "bildirim" olmalıdır:


Tamam, benim veritabanı şeması var Bir sonraki girişte.

+0

Gereksinimi yeniden okuyorum, anlamaya çalışıyorum. Şimdiye kadar sahip olduğunuz db şemasını gönderebilir misiniz? – ThinkCode

+0

@ThinkCode, yayınlandı. –

+0

Her tablodaki zaman damgası nasıl ve bir kullanıcı her abone olduğunda zaman damgasını kaydeder? Kullanıcının bildirimi her zaman, eski zaman damgaları eski bildirimleri istiyorsanız bir günlük tablosuna taşınır? – ThinkCode

cevap

4

Bildirimler genellikle okunan bir nesnedir, bu nedenle okunmamış bildirimlerin listesini hızlı bir şekilde almak, denemek ve anında hesaplamak mümkün olmaz. Ayrıca, giriş süreleriyle karşılaştırmaya çalışmak, iyi bir kullanıcı deneyimi için uygun değildir. Kullanıcı bunları başlangıçta fark etmiyorsa veya sayfayı yeniliyorsa veya ayrıntılarını görmek için bir tanesini tıklatırsa tüm bildirimler kaybolur.

Bunu düşünerek, içinde okuma/okunmamış bir sütunu olan bir user_notification tablosunun olmasını öneririm. Programınızın scalablitesinde nerede bir sorun olabileceğini bilmek güzel olsa da, iyi bir başlangıç ​​yapana kadar (milyonlarca kayıt) olmayacaktır. Hızını artırmak için kullanıcı sütununu indeksleyebilir ve ihtiyacınız varsa, kullanıcılara diskler/sunucular arasında ölçeklendirmeye yardımcı olacak şekilde bölümleme yapabilirsiniz.

Bildirimlerin ayrı bir tabloda mı yoksa yalnızca kullanıcı_sayısı tablosunun bir parçası olup olmadığına karar vermek size kalmış ve bu da etrafı optimize etmek için başka bir alan olacaktır.

1

Bildirimleri en son görüntüledikleri zaman takip et. Daha sonra, o zamana kadar oluşturdukları herhangi bir gönderi, daha sonra bildirimleri görüntüleyen bildirimlerinde o zamandan sonra oluşturulacak.

İlgili konular