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)
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.
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]