Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Koliko upisa moze da stvori problem kod citanja iz baze

[es] :: Baze podataka :: Koliko upisa moze da stvori problem kod citanja iz baze

[ Pregleda: 1980 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.rs.



+2 Profil

icon Koliko upisa moze da stvori problem kod citanja iz baze03.02.2014. u 19:01 - pre 124 meseci
Tabela: UserActivities - cuva podatke o tome sta su korisnici uradili.
Primer: Korisnik John je promenio profil, Korisnik Doe je napisao kontar tu i tu i sl.
Sada korisnici mogu biti prijatelji i korisnik moze da vidi sve aktivnosti njegovih drugara.

Znaci ovde bi isao klasican upit:
Code:
SELECT TOP 50 * FROM UserActivities WHERE ActivityOwner IN (1,2,3...n)


Ova tabela je napravljena tako da ne radi nikakve JOIN-e (zbog performansi).
Ova tabela u svakom smislu rusi normalizaciju jer sadrzi polja ko je napravio activity, ime/prezime, kada, koji je tip, koji je ID itema (npr. Slika, Komentar, Post ... sve u posebnim tabelama).
Na osnovu ovih podataka se na stranici izlistavaju aktivnosti. Jedna aktivnost je kratko opisana na osnovu prethodnog upita i kada user klikne na link tek onda se vrsi upit ka bazi da se uzme detalj o odredjenoj aktivnosti.
Ovo izmedju ostalog moze da stvori dodatne probleme npr. Ako John Promeni ime u Jimmy onda mora da se updatuje tabela sa aktivnostima.

Ono sto mene zanima je sledece.
Ovakva baza ubrzo moze da postane "usko grlo" npr:
Code:
10.000 usera > Svaki user po 500 aktivnosti = 5.000.000 zapisa.


Sto znaci da baza moze relativno brzo da poraste toliko da home page ne moze da se ucita.
U bazama sam malo tanji kada su performanse u pitanju.

Moje pitanje je: Posle koliko zapisa mogu da ocekujem da pocnu da mi se javljaju problemi?
Jer ne zelim da dodjem u situaciju da useri sutra ne mogu da otvore sajt.

Tehnologije: ASP.NET (ado.net nista ORM-vi) + MSSQL Server + Hosting okruzenje Shared.

[Ovu poruku je menjao Valerij Zajcev dana 03.02.2014. u 20:56 GMT+1]
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Koliko upisa moze da stvori problem kod citanja iz baze04.02.2014. u 10:19 - pre 124 meseci
Ova tema mi mogla u top teme - kako ne treba pisati SQL upite.

Prvo, zaboravi IN u ovakvom kontekstu, koristi JOIN!!!

IN se koristi kada imaš neki fiksni set vrednosti kojima porediš vrednost kolone i interno se interpretira (u nekim bazama) kao niz OR klauzula. Ovde umesto fiksnog seta, treba da uradiš SELECT iz neke tabele gde su smešteni ID-ovi prijatelja.

Drugo, OGRANIČI skup podataka koji želiš da dohvatiš. Iz tvog primera, ako imaš 20 prijatelja i svaki od njih ima po 500 događaja, ti selectom dohvataš 10000 slogova da bi prikazao samo 50!

Pretpostavi da imaš tabelu FRIEND, koja bi mogla da ima polja ID, LastShownEventDate. Ovaj DATE podatak ažuriraš svaki put kada prikažeš događaje i to tako da ako za tog prijatelja imaš podatak, onda datum minimalnog događaja, a ako nije imao aktivnosti, onda današnji datum.

Sada pogledaj sledeći upit:

Code (sql):

SELECT *
FROM UserActivities A, Friend F
WHERE A.ActivityOwner = F.ID
  AND A.EventDate >= F.LastShownEventDate
 


Uz uslov da imaš indeks nad (ActivityOwner, EventDate) ovaj upit će ti biti fantastično brz bez obzira da li imaš 500,000 ili 5 milijardi zapisa u tabeli.

Uzgred, tabela Friend bi trebala da ima i polje Owner, pa bi to trebalo da se ubaci u upit...

[Ovu poruku je menjao djoka_l dana 04.02.2014. u 12:01 GMT+1]
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Koliko upisa moze da stvori problem kod citanja iz baze06.02.2014. u 15:48 - pre 124 meseci
Citat:
Ova tabela je napravljena tako da ne radi nikakve JOIN-e (zbog performansi).

Da li to u skolama uce decu da su JOINs bad for performance? Ako je istina, takvim skolama treba oduzeti dozvole za rad.

[code]Ova tabela u svakom smislu rusi normalizaciju jer sadrzi polja ko je napravio activity, ime/prezime, kada, koji je tip, koji je ID itema (npr. Slika, Komentar, Post ... sve u posebnim tabelama).[/quote] Ovo uopste ne mora da bude tacno isvakako ne usporava citanje iz tabele.

Djoka je u pravu. SELECT * bez WHERE je glavni razlog losih performansi upita, ne zbog *, nego zbog nedodstaka WHERE.
 
Odgovor na temu

[es] :: Baze podataka :: Koliko upisa moze da stvori problem kod citanja iz baze

[ Pregleda: 1980 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.