file vs blob

f

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.

O autoru

Bogdan Kecman

8 komentara

  • 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

  • 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 ..

  • nije svinjski nego obican + sam se ukocio tako da mi sedenje ne prija (ni hodanje, ni stajanje ni …)

Ključne Reči

Kategorije

Blog