Abonelikleri - Büyük içerik ve abonelikleri miktarda işlemek nasıl?

2 Cevap php

Ben her kullanıcının sahip abonelik ne tür bağlı olarak benim kullanıcılara bildirim gönderiyorum.

Örneğin:

  • User A tüm haberlerin abone
  • User B tüm yorumlarına abone
  • User C sitede yeni olan her şeyi abone

Ben aşağıdakileri yapar (komut dosyası hala çalışmadığı sürece) her 5 dakikada bir çalışan bir komut dosyası var:

  1. Yeni "içerik" (yorumlar, haberler, makaleler, vb) alın beri yayınlanan son çalışma
  2. Her bir sonuç için, "içerik" abone her kullanıcıları getirme
  3. Her kullanıcı için, bir bildirim gönderir

Ben bir 1000 yeni "içerik" ve benim kullanıcılar bunun% 50 abone ise ne ben endişeliyim, my komut bitirmek için sonsuza kadar sürer ya da benim sunucunun çökmesine olacaktır.

Ne ile gelip vadede başına sadece 100 yeni "içerik" seçin ve kullanıcılara bildirmek için. Ben yine de abone olabilir kullanıcıların miktarı sorun var.

Düşündüğümden daha, ben bütün kullanıcılara ulaşmak kadar yinelemek yerine, 100 ben de seçmek kullanıcıların miktarını sınırlayabilir.

Bu doğru bir yaklaşım mı? Bunu yapmak için kolay bir yolu var mı? Nasıl büyük web siteleri kullanıcıları bildirimleri ele?

2 Cevap

Iş Eğer birden olabilecek tek bir süreç / sunucu için çok fazla oldu, hepsi kendi gruplar üzerinde çalışıyor "çalışır" gibi kullanıcıların işlemek (ve posta gönderebilirsiniz) edememek partiler mimarisi açısından kullanışlı olabilir.

Ben çalıştırmak için uzun zaman alıyor veya sunucu çökmesini script endişeleri hakkında emin değilim dedi. Ben kodu ile çalışmak için bu bir sorun olduğunu düşünüyorum. Kodunu profil ve ne yapıyor db sorguları bir zorunluluktur.

Eğer toplu yol gitmek yaparsanız hangi kullanıcılara gönderdim bildirimleri ne izlemenize için denemek zorunda bitireceğiz. Ben her kullanıcı-içerik çifti için bir satır içeren bir tablo tutmuyorum ediyorum önemle öneririm. Sadece kullanıcıya gönderildiği son olay zamanını depolayabilir (makalenin ya da zaman yayımlamak yorumum) Eğer hala onları göndermek için gereken ne işe ve büyük bir tablo ile sona ermeyecek kolay olacaktır.

Yeniden tekrarlamak Ben bir araştırma görev olarak kodunu ve sorguları profil önermek ve bu rota üzerinden en etkili yöntem çalışmak istiyorum.

Bu veritabanı kurmak olduğu hakkında bir şey bilmeden bu cevap bilmek zor. Doğru kurulum ile, size yeni içeriği hakkında haberdar olmak için gereken tüm kullanıcılarına tek bir sorgu yazmak mümkün olmalıdır.

Gibi bir şey:

SELECT u.user_email 
FROM user_table AS u
LEFT JOIN subscription_table AS s
ON s.user_id = u.user_id
LEFT JOIN content_table AS c
ON c.content_type = s.content_type
WHERE c.add_time > LAST_RUN_TIME

Umarım başlamak gerekir.