SORU
16 Mart 2012, Cuma


Bina bildirim sistemi

Bizim sayfa (sosyal oyun türü) için Facebook tarzı bildirim sistemi kurma başlangıcında olduğumu ve böyle bir sistem tasarlamak için en iyi yolu ne olurdu şimdi araştırma yapıyorum. Kullanıcı ya da böyle bir şey için bildirimleri Şimdi bile için zorlamaya ne kadar meraklı değilim. Sunucu sistemi oluşturmak için nasıl araştırma (nasıl bunları saklamak için mağaza bildirimleri için, nasıl onları almak için vs...) yapıyorum.

Bu yüzden bazı gereksinimleri:

  • yoğun zamanlarda pek çok olay meydana gelecek hakkında 1k-oturum açmış kullanıcılar (ve daha pek çok misafir, ama bildirimleri zorunda olmayacak gibi burada hiç önemli değil) eşzamanlı var
  • olacak farklı bildirimleri (kullanıcı eklendi senin gibi bir arkadaşım, B kullanıcısı var yorumladı profil, kullanıcı C sevdim görüntü, kullanıcı D dövmüşler oyun X, ...)
  • en olaylar oluşturur 1 bildirimi için 1 kullanıcı (kullanıcı X sevdim resim), ama olacak durumlarda nerede bir olay oluşturur birçok bildirimleri (kullanıcı Y doğumgünü için örnek)
  • bildirimler olmalı toplanmışlar; örneğin dört farklı kullanıcı gibi bazı resim, sahibinden resim olalım bir bildirim belirten dört kullanıcı var sevdim görüntü değil, dört ayrı bildirimleri (tıpkı FB yapar)

Düşündüm de ne çok iyi ne zaman olaylar deposu nerede sıra bir tür oluşturmak gerekir. Daha sonra arka plan bir iş (gearman?) olurdu şu sıraya bak ve bildirimler bu olaylara dayalı oluşturmak. Bu iş her kullanıcı bir olay 10 kullanıcıları etkilerse, 10 ayrı bildirimleri de olsa () için veritabanında bildirimleri saklamak istiyorsunuz. Sonra kullanıcı ister açık bir sayfa ile listenin bildirimleri ederim okuyun tüm bu bildirimleri için onu (biz ware düşünmeye sınırlayan bu 100 en son bildirimleri) ve grup onları birlikte ve son olarak görüntülemek onları.

Şeyler hakkında endişeliyim bu yaklaşım ile

  • cehennem :) gibi karmaşık
  • veritabanı en iyi depolama burada (MySQL kullanıyoruz) veya başka bir şey iyi bir uyum gibi görünüyor redis () kullanmalıyım
  • ben bir bildirim olarak saklamak ne yapmalıyım? kullanıcı KİMLİĞİ, kullanıcı KİMLİĞİ kim başlattı olay, tip olayı (ki ben grup onları görüntü ve uygun metin) ama ben bilmiyorum nasıl saklamak için gerçek veri bildirimi (örnek URL ve başlık görüntü kaldım:). Sadece "bake" o zaman ben bilgi üretmek bildirim, ya da saklamalıyım KİMLİK kaydı (resim, profil, ...) olmak, etkilenen ve çekin bilgisi dışında DB görüntülemek için bildirim.
  • performans bildirim sayfası görüntüleniyor-the-fly 100 bildirimleri işlemek zorunda kalsam bile TAMAM burada olmalı
  • Olası performans kullanıcı okunmamış bildirim sayısı görüntülemek için olurdu çünkü her istek bildirimleri birlikte grup istiyorum beri kendi içinde bir sorun olabilir) sorun. Bu-the-fly üzerinde arka planda ve bildirimleri gruplanmış) görünümü oluşturdum ama eğer önlenebilir

Sana önerdiğim çözüm ve benim endişeleri hakkında ne düşünüyorsun? Eğer alakalı burada olacak başka bir şey söylemem gerektiğini düşünüyorsanız lütfen yorum.

Oh, bizim sayfa için PHP kullanıyoruz, ama bence büyük bir etken olmamalı.

CEVAP
21 Mart 2012, ÇARŞAMBA


Bir bildirim bir şey (=olay, dostluk.. nesne) değişti (fiil=,.. ekledi istenen biri (aktör) ve kullanıcı rapor hakkında (konu). Burada normalleştirilmiş bir veri yapısı MongoDB kullandım. Bazı değişiklikler hakkında kullanıcıları bilgilendirmek gerekir. Kullanıcı başına bildirimleri ise 100 kullanıcılar dahil olsaydı, 100 bildirimleri oluşturmak anlamı işte budur...

╔═════════════╗      ╔═══════════════════╗      ╔════════════════════╗
║notification ║      ║notification_object║      ║notification_change ║
╟─────────────╢      ╟───────────────────╢      ╟────────────────────╢
║ID           ║—1:n—→║ID                 ║—1:n—→║ID                  ║
║userID       ║      ║notificationID     ║      ║notificationObjectID║
╚═════════════╝      ║object             ║      ║verb                ║
                     ╚═══════════════════╝      ║actor               ║
                                                ╚════════════════════╝

(Uygun gördüğünüz zaman alan ekleyin)

Bu demek ki, temelde nesne başına gruplandırma değişiklikler için, "3 arkadaşlık isteği var". Ve oyuncu başına gruplandırma söyleyebiliriz ki yararlı olur, "Kullanıcı James Bond yatağında değişiklikler". Bu da yetenek gibi ve bildirimleri tercüme sayısını verir.

Ama, beri nesne sadece bir KİMLİK, olur lazım ekstra bilgi hakkında istediğiniz nesne ile ayrı görüşmeler, sürece nesne aslında değişiklikleri ve göstermek istediğin bu tarihi (yani örneğin "kullanıcı başlık değişti olay için ...")

Bildirimleri sitesinde kullanıcılar için gerçek zamanlı yakın olduğundan, nodejs websockets değiştirme eklendi alır gibi php ile tüm dinleyicileri için nodejs güncelleme itme istemci ile geçirirdim.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FILIPeeeK

    FILIPeeeK

    22 Mayıs 2006
  • Apple&Tech Reviews & Giveaways

    Apple&Tech R

    12 Temmuz 2008
  • Videojug

    Videojug

    25 EKİM 2006