Najvhodnejší postup na sledovanie čítanosti článkov rubrika: Databáze: SQL

4 havran
položil/-a 20.6.2014

Chcem spracovávať návštevnosť článkov na webe do podoby podobnej ako má http://www.sme.sk/ - blok s desiatimi načítanejšími článkami za obdobia 4h/24h/3d/7dní. Aktuálne mi kvôli plávajúcim výsledkom v čase prijde ako najlepšie riešenie uchovávať si v DB tabuľke pre každé prezretie článku jeden záznam. Štruktúra tabuľky (citanost) teda je

id_clanku
timestamp_zaznamu
id_sekcie_webu

Výber načítanejších článkov za nejaké obdobie sa dá urobiť pomocou SQL"

SELECT COUNT(id_clanku) AS citanost, id_clanku
FROM citanost
WHERE timestamp_zaznamu > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 4 HOUR)) 
GROUP BY id_clanku
ORDER BY citanost
LIMIT 10

Experimentovaním som zistil ze rýchlosti zrátania záznamov pomôže ak si vynútim použitie zloženého indexu. Zaujímavé je že čim viac záznamov sa spracováva tak sa oplatí použiť iný zložený index:

Do 24 hodín sa oplatilo použiť index FROM citanost USE INDEX (timestamp_zaznamu_id_clanku) a pre viac FROM citanost USE INDEX (id_clanku_timestamp_zaznamu).

Databáza je MySQL, data sa do tabuľky sypú tempom cca 5-10 záznamov za sekundu takže ich za týždeň bude celkom dosť.

Má niekto nejaké nápady ako optimalizovať a zrýchliť tento postup? Ďakujem.

odkaz
6 coolmip
odpověděl/-a 22.6.2014

U nas sa citanost zbiera do redisu/memcache a odtial sa raz za dve minuty ukladaju data do databazy (psql). Nad psql sa potom robia zvlast vypocty: 10minutove, hodinove, denne mesacne a rocne a samozrejme celkove. Tymto sposobom nieje problem vyratat rychlo citanost. Denne mama cez 12mil. PV a v pohode to zvladame. Generujem rozne grafy v case.
Rovnako mame spravene aj hlasovanie k clanok/sutaziam/anketam atd. Nic nejde rovno do db. Vsetko sa zbiera v nosql a odtial to raz za cas ide do sql.

Pro zobrazení všech 8 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.