MySQL ve PHP bir kullanıcı bildirim sistemi için Öneriler

3 Cevap php

Ben bir bildirim sisteminin uygulanması ve bu öneriler kurmak için geçerli olup olmadığını bir başka ya da daha iyi bir çözüm daha iyi olup olmadığını, mevcut görüyorum:

Bir bildirim veritabanına eklenir. Bir konuk / tanımlanabilen kullanıcı oturum açar veya site kullanır. Onlar kapatmak için seçeneği ile daha önce görülen veya daha sonra okumamıştır bildirimleri ile karşılaşacaksınız.

  • Bildirim tablo depolar bildirim metinler ve İd.
  • Option 1: tablo mağaza Uyarılar bildirimi okudum tüm kullanıcılar
  • Option 2: tablo depolar okundu bildirimi değil tüm kullanıcıları Uyarıları

Bu seçenekleri muchness, potansiyel 100,000 + uyarılar eklemek için iyidir ve bu kullanıcıların atmak veya haber ile etkileşim gibi, onların durumu değiştirilebilir veya uyarı silinir. Bu çok büyük bir tablo haline gelebilir ...

Kullanıcı etkinliğine göre özel bildirimleri için kurulmuş bir daha genişletilebilir nedir?

3 Cevap

Ben bu şekilde yapmazdım. Her (kullanıcı, bildirim) için bir kaydı depolamak ve okumak veya okunmamış olarak her kaydı işaretlemek istiyorum. Onlar okumak (bazı tür bir denetim izi gerekirse örneğin) Daha sonra uygulamanıza bağlı olarak önemli olabilir, hangi kaydedebilirsiniz.

100k kayıtları çok büyük değil. En az 10 milyon kayıtlarına almak kadar boyutu hakkında endişelenmeyin. Gerekirse bir noktada arşiv onları. Ama sen 10 milyon kayıtları oluşturmak ne kadar hızlı hakkında bazı tahminler yapmak gerekir. Bu 3 gün ise, o evet bir sorun var. 3 yıl var, o zaman yok.

Tabii bu seçenek ayrı bir tabloda bildirim metni vardır.

Eğer (endeksli) bir kullanıcı için okunmamış iletileri seçin ve (tablo kayıtları boyutu milyonlarca onlarca ise) bildirim metnini almak ya da onları seçmek için katılabilirsiniz ya gibi bu da mesajları bile yüksek sayı ile son derece iyi ölçekli olmalıdır ve daha sonra ayrı iletileri seçin.

(Kullanıcı, bildirim) tablo bölümleme kolaydır: Eğer kullanıcı aralıkları üzerine baz.

Kullanıcılar mesaj silmek yerine aslında onu silme daha silinmiş gibi, genellikle sadece bunu işaretlemeniz gerekir. Bir veritabanında bir şey silmek için çok sebebi var değil çoğu zaman.

Ben sitemizi kodlama ve aynı soru var ama ben kendimi bu şekilde çözülür ediyorum:

  1. Bir bildirimleri tablodaki tüm kayıt saklayın.
  2. Read/unred = true/false
  3. CRON Meslek: kullanıcı 50'den fazla bildirim varsa, eski 10 bildirimleri silin.

Ben Facebook Bizim sınır bildirim bitti sonra biz göremiyoruz eski bildirimleri silmek için onların bizim cron işi var düşünüyorum

Alternatif olarak, bir başına kullanıcı profili olarak okunacak henüz notları başvurular kümesini saklamak ve daha sonra (genel kullanım durum muhtemelen bir kerede tüm notları okunur) görüntülenir konum zaman bunları kaldırmak olabilir. Tek bir kullanıcı çektiğinizde bu şekilde sadece küçük bir sorgu var, ve maliyeti oldukça büyük bir okunmamış ileti tablo filtreleme daha, küresel iletinin ekleme zaman içinde.