MURATSPLAT wrote:clone.x wrote:Performans sorunu olur mu hocam bu yontem?
Bu tür sorulara takıntılıysanız PHPunit ya da Selenium gibi test araçlarını araştırın. Eğer ustalaşırsanız aklınızda sorun olan senaryoları test edebilirsiniz.
Optimizasyon ve performans konular ciddi deneyim gerektirir. Bu tür sorulara genellikle kimse kafa yormaz. Zira istisnai durumlar oluyor genellikle..
Phpunit ve seleniumun backend performansı ile bir ilgisi yokki? Anlık kullanıcı / işlem yapılacak saniye * istek yapılan scriptin sunucuya yükü gibi bir analiz yapılması lazım. Bunu da benchmark programları ve profilerler ile yapabiliriz. Phpunit test yazmaya, Selenium ise tarayıcıda yapılacak testlerin otomatiğe bağlanmasına yarıyor.
clone.x wrote:10.000 kullanıcı & 50.000 posts var.
Sitenin günlük hiti kaç? Ve anlık ortalama kaç kullanıcı sitede oluyor?
5 saniyelik bir long polling sunucunuz düzgün ayarlanmışsa sorun çıkarmaz (apache falan kullanıyorsanız çıkarabilir), ama MySQL çıkarır. Bu yüzden Redis gibi bir sistem üzerinde tutun istek yapacağınız sayfayı. Orada şöyle bir okundu-okunmadı sistemi geliştirebilirsiniz:
LIST: {kullanıcı_ID}:okunanlar, veya string kullanarak son okunan içeriğin IDsini de tutabilirsiniz.
İçerikleri de Redis üzerinde cacheleyin, MySQL'e hit attırmayın. En basitinden:
$paylasimlar = \Paylasim::orderBy('id', 'desc')->take(100)->remember(30)->get();
son 100 paylaşımı cachede tutun. PHPye istek geldiğinde de, son okunan articlenin IDsini alın Redisten. Eloquent koleksiyonunda, eğer o articleden yüksek articleler varsa, onların döndürün.
Şöyle birşey o da:
$yeniPaylasimlar = $articles->map(function($article) use ($kullaniciSonOkunan) {
return $article->id > $kullaniciSonOkunan;
});