Popüler bir içerik Digg gibi dönen anasayfa, nasıl bir faktör olarak tarihini eklemek için?

4 Cevap php

Ben gelişmiş bir görüntü paylaşım web uygulaması inşa ediyorum. Tahmin edebileceğiniz gibi, kullanıcılar üzerinde yorumlar, oylayabiliriz görüntüleri ve diğerleri yükleyebilir ve favori olabilir. Bu olaylar bir "karma" alanına yakalamak, hangi görüntünün popülerlik belirleyecek.

Şimdi en popüler görüntüleri gösteren, Digg gibi anasayfa sistemi oluşturmak istiyorum. Zaten ağırlıklı Karma puanı var, çünkü kolay. Ben sadece sıralama o descendingly 20 en değerli görüntüleri göstermek için.

Eksik parçası olan time. Ben son derece popüler görüntüler her zaman ana olmak istemiyorum. Ben kolay bir çözüm son 24 saate ayarlanır sonuç kısıtlamak için sanırım. Ancak, ben de gün boyunca meydana görüntü döndürme tutmak için, zaman kendi ofset görüntünün sıralama hakkında bir etkiye sahip değişkenin bir çeşit olabilir düşünüyorum.

Spesifik sorular:

  • Eğer kolay senaryoyu (sadece sıralama 24 saat içinde en iyi görüntü için) veya daha sofistike bir (sıralama parçası olarak mahsup kullanım datetime) tavsiye eder misiniz? Eğer sonuncusunu, bu matematiksel çözüm herhangi bir yardım tavsiye ederse?
  • O ana için görüntüleri işaretlemek için bir zamanlanmış hizmeti çalıştırmak için iyi olurdu, yoksa (ben MySQL kullanıyorum) bir doğrudan sorgu tavsiye ediyorum
  • Ekstra bir not olarak, anasayfa belleği desteklemelidir ve sakin bir gün emin o zaman "dolu" yapmak amacıyla daha önce gün girişlerini içermelidir

Ben sadece bazı tavsiyelerde arıyor, bu algoritma oluşturmak için toplumu demiyorum :)

4 Cevap

Ben geçtikten zaman belirli bir süre sonra her öğenin "etkin karma" azalır fonksiyonu ile gitmek istiyorum. Bu biraz Eric'in yöntemine benzer.

Eğer "etkin karma" azalmış olmak istiyorum ne sıklıkta belirleyin. Sonra bu döneme dayanan bir ölçekleme faktörü ile karma çarpın.

effective karma = karma * (1 - percentage_decrease)

percentage_decrease yourfunction ile tespit edilir. Örneğin, yapabileceği

percentage_decrease = min(1, number_of_hours_since_posting / 24)

bunu yapmak için her öğenin etkin karma 0 24 saatten fazla azalır. Sonra göstermek ne görüntüleri belirlemek için etkili karma kullanın. Bu sadece 0 ile karma ve onun gerçek değerini terazi gibi, gönderme beri zaman çıkarılarak daha istikrarlı çözümün biraz daha fazladır. Dk bir gün geçer bir kere, 1 büyük değerler almaya başlayacağız gibi, bağlı düşük bir 0'da ölçekleme tutmaktır.

Ancak, bu tam anlamıyla hesap popülerlik içine almaz. Tim'in cevabı dikkate sıkı popülerlik (yani sayfa Görüntülendi) almak için nasıl içine bazı fikirler verir.

İlk soru için, ben biraz daha karmaşık bir yöntem ile giderdim. Siz karışımı bazı "Tüm zaman sık" isteyeceksiniz. Fakat, gerçek views görüntü vardır sayısına göre gitmek, tek başına zaman gitmez. Herkes giriş ve oy gidiyor akılda tutmak, ancak bu görüntü daha az popüler yapmaz. 10 oy ve 100k manzaralı iki yaşında bir görüntü tabii ki 100 oy ve 1k manzarası ile 1 yaşındaki bir görüntüye kişiden daha önemlidir.

İkinci soru için, evet, sizin ön sayfasında oluyor önbelleğe çeşit istiyorum. Bu sitenize giriş noktası üretmek için sorgular bir sürü. Ancak, çok SO gibi, sitenin türü böylece her yerde sorguları optimize / denemek ve izlemek .. arama motorları aracılığıyla iç sayfalara trafik çekmek için eğiliminde olacaktır.

Üçüncü soru için zaman (görünümler yani #) dışındaki faktörler tarafından gidiş her zaman tam ve dinamik sayfa olduğundan emin olmak için yardımcı olur. Ben, ön sayfasında paginating insanlar etiketleri yol açan ya da arama daha iyi bir strateji olabilir emin değilim.

Sadece dikkate zaman alacağını "düzeltilmiş karma" türü alanını hesaplayabilirsiniz:

adjusted karma = karma - number of hours/days since posted

Daha sonra hesaplamak ve sorguda, doğrudan göre sıralamak, ya da bunu bir gece süreç ya da bir şey yoluyla güncellemek veritabanında gerçek bir alan yapmayı düşünüyorduk. Şahsen ben muhtemelen daha kolay gelecekte algoritma biraz daha sofistike hale yapacaktır beri güncelleştiren bir gece süreci ile gitmek istiyorum.

Bu, ben buldum, Lower bound of Wilson score confidence interval for a Bernoulli parameter

Bu bak: http://www.derivante.com/2009/09/01/php-content-rating-confidence/

İkinci örnekte de o bir "tazelik faktör" olarak zaman nasıl kullanılacağını açıklar.