most clicked

Întrebări legate de conectarea la baze de date MySQL prin intermediul PHP

Moderatori: Zamolxe, Moderatori

badtiger
Senior Member
Mesaje: 598
Membru din: Vin Noi 03, 2006 7:54 pm
Contact:

most clicked

Mesajde badtiger » Sâm Iun 05, 2010 12:46 pm

Dati niste idei despre cum ar trebui sa procedez sa gasesc "most clicked" in ultimele 24 ore. respectiv 48, intr-un mod optimizat?

** bd este in formare deci o pot face cum vreau eu
** sistemul trebuie sa suporte 2 000 000 utilizatori zilnici
** sa zicem ca e vorba de clickuri pe linkuri
** se face cron la o ora



tanatos
Senior Member
Mesaje: 269
Membru din: Vin Iun 06, 2008 8:01 pm
Localitate: Iasi
Contact:

Mesajde tanatos » Sâm Iun 05, 2010 6:57 pm

Eu zic ceva de genu :
tabela most_clicked :

cu linkpagina UNIC

id linkpagina data clickuri
1 http://...../a.php 10
2 http://...../b.php 15

ca sa updatezi clickurile faci ceva de genu :
INSERT INTO most_clicked (id,linkpagina,data,clickuri) VALUES (null,'http://...../a.php',NOW(),1) ON DUPLICATE KEY UPDATE clickuri=clickuri+1

badtiger
Senior Member
Mesaje: 598
Membru din: Vin Noi 03, 2006 7:54 pm
Contact:

Mesajde badtiger » Sâm Iun 05, 2010 8:42 pm

Iti multumesc petru ajutor, insa problema nu statea in contorizarea clickurilor ci:
selectarea celor mai clickuite 10 articole in ultimele 24ore, respectiv 48 ore

Avatar utilizator
Niku02
Senior Member
Mesaje: 837
Membru din: Joi Noi 13, 2008 1:16 pm
Localitate: Constanta
Contact:

Mesajde Niku02 » Sâm Iun 05, 2010 9:15 pm

Pai faci 2 tabele . In prima ai linkul si clickurile . In a doua, link, clickuri, data .

In prima tabela adaugi toate clickurile, iar la 00:00 , le copiezi in a doua tabela cu data din ziua respectiva , si resetezi clickurile din prima.
Lucrez la o firma de si am un magazin de .

tanatos
Senior Member
Mesaje: 269
Membru din: Vin Iun 06, 2008 8:01 pm
Localitate: Iasi
Contact:

Mesajde tanatos » Sâm Iun 05, 2010 9:18 pm

Pai faci un cronjob la 00:00 si folosesti query-ul :
SELECT most_clicked.* , SUM(clickuri) as clicktotal FROM most_clicked WHERE (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date)) < 172800 GROUP BY linkpagina ORDER BY clicktotal DESC LIMIT 10

badtiger
Senior Member
Mesaje: 598
Membru din: Vin Noi 03, 2006 7:54 pm
Contact:

Mesajde badtiger » Dum Iun 06, 2010 1:02 pm


Avatar utilizator
Niku02
Senior Member
Mesaje: 837
Membru din: Joi Noi 13, 2008 1:16 pm
Localitate: Constanta
Contact:

Mesajde Niku02 » Dum Iun 06, 2010 2:44 pm

Lucrez la o firma de si am un magazin de .

badtiger
Senior Member
Mesaje: 598
Membru din: Vin Noi 03, 2006 7:54 pm
Contact:

Mesajde badtiger » Dum Iun 06, 2010 10:09 pm

tocmai, la tine e pe zile (calendaristice), eu aveam nevoie pe ultimele 24 ore, respectiv 48 ore, oricum iti multumesc :d si ramanem in dezbateri daca mai ai idei

Avatar utilizator
Niku02
Senior Member
Mesaje: 837
Membru din: Joi Noi 13, 2008 1:16 pm
Localitate: Constanta
Contact:

Mesajde Niku02 » Dum Iun 06, 2010 10:34 pm

aha, eu prin 24h am inteles 'ziua de ieri' ca sa spun asa .
Lucrez la o firma de si am un magazin de .

bogdanvursu
PHPRomania Supporter
Mesaje: 25
Membru din: Lun Aug 29, 2005 4:16 pm
Localitate: Iasi

Mesajde bogdanvursu » Lun Iun 07, 2010 2:13 pm


badtiger
Senior Member
Mesaje: 598
Membru din: Vin Noi 03, 2006 7:54 pm
Contact:

Mesajde badtiger » Lun Iun 07, 2010 7:14 pm


phpcode
PHPRomania Supporter
Mesaje: 9
Membru din: Dum Mai 30, 2010 2:55 am

Mesajde phpcode » Mie Iun 16, 2010 8:16 pm

In solutia aleasa de tine poate aparea problema: ce te faci daca clientul vrea sa extinda statisticile la o luna sau la un an.
In cazul acesta curatarea bazei de date, nu prea va mai aduce nici un spor de performanta, fiindca pe perioada de un an pot apare usor 2 milioane de inregistrari in tabela de clickuri. Si in plus daca stergi inregistrarile mai vechi de 2 zile, vei pierde evidenta a ceea ce s-a intamplat acum o saptamana, sau acum o luna.
Cel mai optim mod in care poti realiza statisticile a fost prezentat in parte de tanatos (cu mentiunea ca trebuie index unic pe link+data) - problema era ca acuratetea datelor este de o zi.
Poti obtine insa o acuratete a datelor mai mica adaugand un alt camp, care sa tina "perioada" in care s-au facut clickurile pe un link, si daca n-a fost gasit nici un click in perioada aia, sa adauge in tabel, daca a fost gasit sa faca update.
Ai aici detalii despre cum se poate realiza asta.


Înapoi la “MySQL”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 13 vizitatori