Nasıl "Watch" oluşturma musunuz

7 Cevap php

Ben kayıtlı kullanıcılar "seyretmek" olduğunu "şeylerin" bir sayı ile (PHP / MySQL) oldukça karmaşık bir topluluk sitesi var.

"Şeyler" vardır: Mesajlar, yorumlar vb, etkinlik güncellemeleri, kullanıcı durumu değiştiğinde, "şeylerin" En az 10 farklı türleri vardır ve bir kullanıcı (facebook Think) herhangi bir diğer kullanıcının "şeyler" izleyebilirsiniz

"İzle" anlamına gelir: Bir kullanıcı herhangi bir "şey" izlemek ve "şeyler" her türlü boyunca her "şey" tüm güncellemeleri / eklemeler linki görebilirsiniz.

Ben izledim ve benim kurulum temelde bu oldu olabilir çok daha az "şey" ile benzer bir uygulama inşa etmişlerdir:

'watches' table fields: id, kullanıcı kimliği, öğeKimliği [yabancı tablonun id], itemClass [yabancı tablonun referans id]

Çünkü onlar (UI üzerinde) notu olabilir göz kadar onlar zaten izlerken, sanki bir kullanıcı bir 'izlemek', bir rekor 'watches' tablosunda yılında kuruldu ve daha sonra biz bu tablo yoklar (ve önbelleğe) diye ekleyebilirsiniz belirli bir madde ya da değil, PLUS onlar izliyorlardı sistemde her şeyin bir listesini görmek ve yönetmek olabilir. Oldukça basit.

Yani, (ki uzun soluklu intro sonra), biz inşa ediyoruz, bu topluluk sitesi daha dramatik büyütmek için ihtiyacımız olacak. Binlerce kullanıcı olacak yüzlerce "şeyler" izleniyor ve biz başına 'watches' tablosu sadece yoklamak zorunda kalacak, ancak her yabancı, her kullanıcının izle yem doldurmak için bilgi almak için masaya katılmak.

Ne demek istediğimi hakkında karıştı iseniz, sadece sizin facebook ana sayfasında olan facebook arkadaş yem düşünüyorum. Nasıl sorguları ton çalıştırmadan güncellenmiş olsun demek?

7 Cevap

ölçeklenebilirlik ve (bazen performans nedenlerle yapmak gerekir) normalleştirme kuralları görmezden açısından yapılacak en iyi şey, zaten var gibi bir tablo saatler saklamak için olabilir, ama sonra da içerik tabloları üzerinde bir TEXT sütunu eklemek istiyorum Eğer sınırlandırılmış bir şekilde bu öğeyi izlerken kullanıcıların id yıllardan depolamak nerede.

öğe güncellendiğinde, hiçbir ek yük için bildirmek için insanların kullanışlı bir pre-built listesi var.

Bir kullanıcı izliyor ne görmek istiyor ne zaman ve, size verimli normalize tablolar var.

vbulletin i belirli bir iplik okumak kim izleyebilmek için düşünüyorum yapar.

Lütfen yoklama diğer yaklaşım "izle güncellemeleri" bir öğenin oluşturulmasından sonra kaydedildi böylece sistemi kurmak olacaktır.

Mantık olur:

  1. Mesaj oluşturulur
  2. As final step in Post creation, a query is run against the watches table for people watching for new Posts
  3. As watches are found you write an entry to that users "activity" or watch feed.

her kaydetme üzerine, bu bir "izlenen" madde olup olmadığını belirlemek ve yeni bir tablo olduğunu kaydetmek gerekir. Eğer hızlı olacak bu yeni tabloyu sorgulamak herhangi izledim öğelerini görüntülemek için ihtiyacınız olduğunda, bunu kim izliyor, o ürünün ne tür, vb kaydetmek gerekir.

Bir kullanıcı vardır ya görmemiştir ne izlemenize için tarihleri ​​kullanabilirsiniz. Bir kullanıcı oturum açtığında, o / o, belirli bir tarih / zaman günlükleri. Daha sonra tekrar kullanıcı günlükleri, son log-in tarihi daha yeni olan bu kullanıcı tarafından "izlenen" olan her "şey" bir sorgu çalıştırabilir zaman. Bu anında yerine, her "şey" güncelleştirmesi üzerinde okuyucu listesini oluşturmak olacaktır.

Desen açısından, burada akılda tutulması gereken bir şey klasik "Listener" / "Olay Bildirim" / "Observer" modelidir. Yeni bir dinleyici eklendikten sonra olay jeneratörler değiştirmek zorunda kalmamak, ikiliye olayları üreten millet, ve onları dinlerken millet gevşek istiyorum.

Yani gerçekten, bir bildirim ateş "Ben değiştim!" ya da "Ben yeni bir yazı değilim!" ilgili bir gözlemlenebilir nesnenin modifikasyonu ve tüm dinleyicileri kayıtlı bir tablo görünümlü, iyi bir yaklaşım gibi görünüyor sonra.

MSFTs SQL İhbar Servisi'nde bir göz atın. Artık SQL SVER 2008 desteklemelerine rağmen, kendi dokümantasyon sağlam bir bildirim motoru açıklar. Eğer, ya da olmayabilir, modellemek isteyebilirsiniz - Something sizin ihtiyaçlarınıza bağlı.

Birisi bir güncelleme yaptığında, bir şey aramak için bir referans vererek, herşey değişti "gözlemcileri" uyarabilir. Ben oturum açtığınızda, sistem benim tablosunu sorgular ve bazı "şey" bir güncelleştirme yaptı bulur. Daha sonra bu güncelleştirmeyi getirir ve sayfadaki bana onu gösteriyor. Bu yayınla / model gibi bir şey.

EDIT (benim yorum dahil):

Her kullanıcı bir watch_table onlarla ilgili bir satır olurdu. Bu yüzden onu kullanıcı kaydında depolanan sevgilimin durum güncellemeleri, bir izleyici olarak kendimi eklemek. O güncellemeleri Sonra, watch_table her gözlemcisi kaydında bir rekor yerleştirerek, gözlemcileri onun listesine üzerinden yineleme. Ben oturum açtığınızda Yani, benim watch_table kayıt sorgulanan ve ben onun durumu güncellendi UI görmek edilir.

Yukarıdaki facebook durum güncellemeleri bazı semantik kullanıyor.