Pogledajte određenu poruku
Staro 22. 10. 2007.   #4
ivanhoe
Ivan Dilber
Sir Write-a-Lot
 
Avatar ivanhoe
 
Datum učlanjenja: 18.10.2005
Lokacija: Bgd
Poruke: 5.320
Hvala: 104
2.344 "Hvala" u 583 poruka
ivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svima
Pošaljite poruku preko Skype™ za ivanhoe
Default

sve zavisi sta znaci veliki broj tabela, o kojoj cifri pricamo tacno?

imam jako lose iskustvo sa stvarno velikim brojem tabela (oko 60000 u istoj bazi), pri cemu se vecini tabela periodicno pristupa i to iz vise razloga:

1. izuzetno lose perfomanse jer se table cache stalno puni i prazni i mysql stalno otvara i zatvara tabele
2. dodatno kvari perfomanse sto sistemski cache ne moze da efikasno kesira toliko paraleno otvorenih fajlova
3. i jos gore perfomanse jer ext2 i ext3 ne umeju bas najbolje da radi sa tolikim brojem fajlova u istom direktorijumu
4. potrosi ti uzasno mnogo fajl deskriptora na sistemu
5. nemoguce je odraditi iole efikasno backup jer nijedan tool koji sam probao ne ume da radi sa toliko tabela, na kraju smo pisali custom skriptu koja dumpuje tabelu po tabelu i to je trajalo po 2 dana dok se izvrsi...

To je sto se tice negativnih strana toga, pozitivne trakodje postoje, vec su ih naveli i one nisu zanemarljive. U mom slucaju se radilo o popularnom blog sajtu sa 6000 korisnika, pa su sve tabele bile manje vise u upotrebi stalno. Ti imas malo drugaciji slucaj jer ce u istom trenutku biti u funkciji samo mali broj svezih tabela, vecina starih se nece uopste koristiti (sto elimise probleme pod 1) i 2) i cini celu stvar relativno upotrebljivom).

E sad, moj predlog je malkice komplikovaniji (ali samo malkice), ali se pokazao kao izuzetno efikasan u praxi:
1. Kad imenujes tabele napravi im imena kao npr. USER_ID_ime_tabele, a baze imenujes dodajuci redni broj u ime (tipa baza_001, baza_002 itd...)
2. Kad kreiras nove korisnike stavljaj njihove tabele u jednu bazu sve dok se ne napuni do nekog razumnog broja, recimo 15K-20K tabela.
3. Onda kreiras novu bazu i nastavis da nju punis novim korisnicima bas kao sto si radio sa prethodnom, izmena je potpuno transparentna.
4. Da bi to sve lepo radilo uz minimalno menjane koda samo treba u klasi kojom pristupas bazi da napravis switch koji ce da na osnovu ID-ja korisnika izracuna u kojoj bazi se on nalazi i kako treba da se zovu tabele. Tto je vrlo jednostavno odraditi ako ti imena tabela nisu hardkodovana u kodu (a verujem da nisu), bukvalno treba par linija koda da se izmeni...
__________________
Leadership is the art of getting people to want to do what you know must be done.
ivanhoe je offline   Odgovorite uz citat
"Hvala" ivanhoe za poruku: