DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   SQL baze podataka - Sponzor: Baze-Podataka.net (http://www.devprotalk.com/forumdisplay.php?f=10)
-   -   MYSQL: Kako struktuirati tabele vezano za broj prikaza nekog teksta na stranici? (http://www.devprotalk.com/showthread.php?t=7216)

mb_sa 02. 03. 2009. 17:31

MYSQL: Kako struktuirati tabele vezano za broj prikaza nekog teksta na stranici?
 
Zdravo svima.

Recimo da imam tabelu 'tekstovi'

Kôd:

TEKSTOVI
id, naslov, broj_prikaza (broj pregleda jednog teksta)

Podatak 'broj_prikaza' se dobije izvrsavanjem jenodstavnog UPDATE upita, tipa:
Kôd:

UPDATE tekstovi SET broj_prikaza = broj_prikaza+1 WHERE id = 344363;
Ovaj podatak prikazujem na razlicitim mjestima, poput skracenog prikaza teksta u njegovoj kategoriji, na naslovnoj stranici, na prikazu samog teksta i slicno

Znam da je ovaj upit jako jednostavan i brz (pise u mysql dokumentaciji), ali ce se oni izvrsavati kod svakog prikaza oglasa.

Problem je sljedeci: Kao sto znamo kada se radi UPDATE nad nekom tabelom ta tabela ce biti lockovana i svi SELECT upiti ce biti na cekanju, a radi se o glavnoj tabeli koja ce se korstiti u svakom upitu. Takodjer, koliko znam bilo kakav update nad nekom tabelom će poremetiti interni mysql cache, tako da i tu postoje određeni gubici. A stranica bi trebala da bude jako posjećena.

Ja sam razmisljao da se napravi dodatna tabela 'prikazi':

Kôd:

PRIKAZI
id_tekst,broj_prikaza

U kojoj ce se vrsiti svi moguci update vezani za prikaz teksta, a onda bih nariktao cron job (svaka 24h, sa obzirom da mi ne trebaju real time podaci) koji ce sumarne prikaze prbaciti u tabelu 'tekstovi', tako da bih ih imao u glavnoj tabeli, izvlacio kada mi trebaju, a pomenuta tabela ne bi bila opterecena pomenutim update upitom.

Pretpostavljam da JOIN ove dvije tabele ne dolazi kao rješenje (sa ciljem da se izbjegne CRON job), jer bi i tada se pojavljivali 'isti problemi', a plus bi imli dodatno spajanje tabela.

Da li moja razmisljanja su ispravna i kakva su vaša iskustva sa ovim o čemu trenutno pišem?

Hvala unaprijed na učešću u temi.

Pozz, mb

MorenoArdohain 02. 03. 2009. 18:01

Verovatno su ti tabele u MyISAM formatu, probaj InnoDB - on ne lockuje celu tabelu.

mb_sa 02. 03. 2009. 18:14

Da, u pravu si. Ne bih o ovome ni razmisljao da mi nije potrebna podrska za Full-text search indexes, jer kao sto i sam znas InnoDB nema podrsku za pomenutu opciju.

Pozzz

MorenoArdohain 02. 03. 2009. 18:25

Ja ovde vidim kontradiktornost - kazes da ti UPDATE pravi problem, a sa druge strane, FullText search nije problematican (jer i on ume da "zakoci" tabelu)?

Btw, koliko uopste ima tekstova?

mb_sa 02. 03. 2009. 18:30

Iskren da budem, nisam znao da Full Text zakljuca tabelu! On bi se rjeđe korstio, jer bi zapravo preko njega rijesio pretragu/pretrazivanje po kljucnoj rjeci.

Vremenom bi trebalo da bude i do 100.000 aktivnih tekstova (ne bi bili veliki, do 700 karaktera) u bazi.

MorenoArdohain 02. 03. 2009. 19:23

Da sam na tvom mestu, ja bih sve konvertovao u InnoDB, i cron scriptom (koja bi se izvrsavala nocu tj. u periodu najmanje posete) updatovao broj pageviews.

I uveo drugi mehanizam za pretragu tekstova (sphinx?).

A razmislio bih i o keshiranju stranica, da ne mora svaki put da se vuce iz baze.

mb_sa 03. 03. 2009. 08:16

Vidi, nemam ja trenutno problem koji sam gore naveo. VJeorvano sam konfuzno napisao.

Tek treba da napravim pomenuti pageviews, pa razmislajm kako da najbolje izvedem, kako ne bi bilo problema. Mozgajuci, dosao sam do pomenutih MOGUCIH problema uz vezi lockovanja i cimanja intrenog mysql cache-a.

VJeorvno cu uraditi sa innodb i dodatanom tabelom.

Sto se tice sphinx-a, cuo sam i ranije za njega, ali mi se nije svidjela 'ideja da ja moram voditi racuna' od indexiranju. Mjedutim, malo detaljnije sam se upozano sa njim i vidim da ga hvale, a mozda mi i pomogne oko nekih non-full text upita.

Da, Cache_Lite ce odraditi posao na nekim mjestima, gdje lifetime cache moze da traje i po 60min, što je odlicno.

Hvala ti na izdvojenom vremenu.


Vreme je GMT +2. Trenutno vreme je 02:25.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.