Opet jedan od onih dana … ovi koji me duže poznaju znaju da već godinama ubeđujem ljude da se slike, dokumenti i sličan sadržaj koji se samo čuva i povlači ne stavlja u bazu… al nekim ljudima ne vredi pričati, moraju zveknuti glavom par puta dok sami ne skapiraju …
Evo ga jedan primer od danas .. klijent ima tabelu od nekoliko stotina gigabajta (ostale tabele su nebitne) .. ništa strašno ali .. sve je to mnogo bitno i povlači se sa mnogo app servera… i potrebno je non stop i prilično raste i … i … i … Ceo sistem je projektovan da koristi Oracle RAC i sve je to „nekako radilo“ osim što je klijent bio nezadovoljan brzinom a bogami i cenom poštno Oracle RAC nije uopšte jeftina zver. Onda je „developer“ (da ga ne nazovem sad pravim imenom, čita ovo možda neko mladđi od 18) odlučio da odradi „upgrade“ i da to sve prebaci na, MySQL Cluster (seća li se neko onog posta o tome da mccge nije zamena za oracle rac??). Sve u svemu, naprave oni to nekako, izmene malo aplikaciju, promene mašine i dobiju jedno 30% ubrzanja u odnosu na oracle rac i naravno mnoooooooogo nižu cenu… no, kao i svaki sistem i ovaj raste i povremeno ne može, sve ni sa tih 30% ubrzanja da postigne šta se od njega očekuje i tu onda „developer“, $#%/?R$(($#(„) mu ja .. tipla naravno da mu mi sredimo problem … i naravno kome će nego ih uvale meni na grbaču … tu počinje tj. završava ova priča …
Pokupim ja lepo taj data i taj app source i logove i … da vidim ja šta se tu tako strašno dešava … i u trenutku me zabole tintara (što je mnogo zeznuto obzirom da sam vec 5 dana ukočen i da ne mogu ni da sedim a kamoli da hodam, leđa su mi već rekla doviđenja) kada sam video šta se nalazi u onih nekoliko stotina gigabajta tabele … BLOBOVI …. veeeeeeeeeeeeeeeliki blobovi … kreteni su nakucali fajlove u tabelu … razne fajlove, u proseku oko 10M veličine po fajlu … (najmanjioko 200K, najveći oko 120M) .. nebitno sta je u njima . Sada se vratimo korak nazad i setimo se da su oni ovo sve radili na Oracle RAC-u, znači već imaju deljeni storage … proverim, naravno, imaju veliki, super nabudzeni, ekstra našiljen SAN sa mnogo splindlova, napravim ja test, izbacim ja te fajlove iz tabele, stavim ih na SAN, promenim app … (izgubim citava 2 sata da prepravim app, napisem skript da izvadi sve iz blobova u fajlove na SAN-u, prepravim tabelu i startujem test) i pustim test … i dobijem, 6882% ubrzanje .. da prevedem to u jednostavnije mere … sada je aplikacija oko 70 PUTA BRŽA !!! Neću ni da spominjem koliko treba sada da se napravi bekap baze i fajlova (oko 10 puta brže) i slično … moroni …
Da ne ostanem nedorečen, ima tu dosta i do toga što mccge ne radi baš sa blobovima 1/1 … da je u pitanju bio običan db server (mysql server ili pgsql ili oracle ili bilo koji drugi koji normalno radi sa blobovima) razlika u brzini ne bi bila 70 puta već pre 5-6 puta, no i to je veliko ubrzanje.
Skoro sam ubjeđivao jednog prijatelja programera u sličnu stvar…. Nisam ga mogao dgovoriti od toga…
Njegov komentar je:
„Meni radi odlično i lako se radi bekap“
Da samo malo razmišlja 6 mjeseci unaprijed…
da da … lako se radi bekap … obzirom da ima 2 page view-a na sat i da moze da ima downtime od 2 dana bez nekih velikih posledica – sto bi razmisljo, „ovako ume“ …
ako baza nema opciju online backupa (na srecu mccge to ima, ali obican mysql server nema, pgsql nema, sqlite nema …) tebi je ta tabela ZAKLJUCANA dok ne odradis bekap … to je veeeeeeeeeeliki downtime dok ti bekapujes 500G … a i kada imas online backup, to je ogroman udarac na performanse dok traje bekap, a trajeeeeeeeeeee …
a sa „kontentom“ na file sistemu, stavis lepo rsync i bekapujes automatski fajlove de oces kako oces, inkrementalno … zauzima nista a radi ko dusa … da ne spominjem da svi ti fancy storage sistemi kao sto je SAN imaju svoje fancy alate za bekapovanje koji su bezobrazno dobri …
tako da – „kontent“ ti se bekapuje sam po sebi laganica a baza posto sada vise nije u gigabajtima vec u megabajtima, bekapuje se „trenutno“ …
pritom – ovaj sada slucaj – nije da su oni ovo napravili pa im skocila baza sa 100M na 500G, oni su vec imali 500G na oracle rac-u kada su krenuli da presviravaju to na mccge
blob se korist za fajlove koji se sredjuju cesto, tako bese?
cisto da proverim
iskreno – ako mene pitas ne koristi se nikad kada su fajlovi u pitanju ako imas drugi nacin da pristupis istima … blobovi sluze da cuvas velike komade podataka … sa kojima nesto radis (npr – pretrazujes ih) ali da cuvas fajlove „eto tako“ u bazi .. razmisli jos jednom
Moja tuzna prica glasi:
Arhivska i delovodna knjiga + CELA (!!!) arhiva preduzeca je u PDFu spucana u BLOB polja (doduse oracle, al blob bre! i jos u PDFu!)…
Na pitanje vrlom projketantu ZASTO?!?! odgovor je bio:
Tela sam da probam kako radi… :)
pdf u oraklu ima smisla posto orakle ume da pretrazuje pdf dokumente tako da realno imas full text search indexirane dokumente … to je „ok“ … problem je kada „kreten“ krene da cuva ringtonove, animacije, slike i slicno u bazi ..
@Bogdane, nešto te nema na skype-u, jel svinjska gripa?
nije svinjski nego obican + sam se ukocio tako da mi sedenje ne prija (ni hodanje, ni stajanje ni …)