Većina današnjih aplikacija barata sa velikim količinama podataka. Sve je jednostavno dok govorimo o kilobajtima ili megabajtima, no kada nam zatreba više, neophodna nam je odgovarajuća baza podataka kao zasebni sustav.
Piše: Hrvoje Grdić
Krenete li se baviti razvijanjem aplikacija, vrlo brzo doći ćete doći do pitanja gdje spremati sve silne podatke koje u određenom projektu koristite. Možda u datoteku? Naravno da ne, već je odgovor neka od baza podataka. Ovdje ćemo se baviti tim pitanjem, koju od relacijskih baza iskoristiti za osobnu upotrebu, koja može, a i ne mora biti baš jednostavna. Ipak, mnogi su veliki igrači krenuli “iz garaže” i moramo imati na umu da naš projekt, odnosno u ovom slučaju naša baza može (i nadamo se da bude!) narasti do ogromne količine podataka.
Hoćemo li se tada pitati ponovno ovo isto pitanje, kada se sve uspori, kada počnu učestali padovi i ostali vezani problemi? Opet, treba misliti unaprijed i donijeti pravu odluku na početku jer si time dosta olakšamo život kasnije. Nisu sve baze jednakih mogućnosti niti se upotrebljavaju za iste svrhe. Bitan je kontekst za koji nam treba pojedina baza, primjerice radi li se o web aplikaciji, mobilnoj aplikaciji, desktop aplikaciji ili nečem drugom. U ovoj temi bavimo se razvijanjem u Linux okolini i za to će nam pomoći neka od relacijskih baza podataka koja je otvorenog koda. Ponuda baza otvorenog koda je solidna i u mnogo slučajeva su dobar izbor u odnosu na svoje “zatvorene” suparnike. Kada govorimo u ovom žargonu baza, naravno misli se na RDBMS ili relational database management system, u daljnjem tekstu. Za one kojima tematika nije strana, već im zvone dva poznata imena – MySQL i PostgreSQL. Na ove dvije ćemo se i zadržati većinu vremena, spomenuvši usput još poneku za neke specifičnije okolnosti kada ih se dotaknemo, a usporedit ćemo njihove mogućnosti, kako i gdje ih koristiti i kome su namijenjene. Naglasak je ipak na tome kako je cijeli projekt koji možete izraditi na ovaj način moguće napraviti u potpunosti u okruženju otvorenog koda.
Zašto uopće koristiti open-source bazu podataka? Pa kao prvo, jeftinije je. Nevezano da li netko ima više ili manje sredstava na računu, uvijek se teži rezanju nepotrebnih troškova. Korištenje nekih od komercijalnih rješenja može biti veoma skupo i razlika se može osjetiti tek kada prijeđete na neku od open-source baza. Naravno, učestalo je mišljenje da je ono što je skupo ujedno i pouzdano i samim time ništa loše se ne može dogoditi. Ovo je kriva pretpostavka. Ako i platite mnogo za neki proizvod ne znači nužno da je i bolji od nekog drugog. Open source baze podataka razvijaju se već dulje godina i postale su veoma pouzdane s provjerenim mehanizmima obrane od grešaka ili nekih većih kvarova koji će upozoravati na prvi znak opasnosti. Ono na što ćete morati obratiti pozornost je da odaberete open source bazu koja odgovara upravo vašim potrebama jer sve one imaju neke funkcionalnosti koje pojednostavljuju svakodnevne radnje, a vi se morate prepoznati u toj priči.
MySQL
MySQL je jedna od najraširenijih baza kako kod individualaca tako i kod većih kompanija pa spomenimo samo za primjer da ga se koristi u Facebooku i Twitteru. Baza sada ima već i nekih dvadesetak godina staža, u 2008. je prodana Sun-u koji je kasnije kupljen od strane Oraclea. Oracle ima pak svoju viziju budućnosti pa tako neke dijelove drži komercijalnima, no i izvorni tim koji je napravio MySQL radi na jednom drugom projektu i tamo drži neke od tih funkcija besplatnima. Radi se zapravo o jednom forku MySQL-a koji prati većinu funkcionalnosti koja se plaća i nudi ih otvorenog koda. Ako vas zanima, više o tome možete pronaći istražujući MariaDB. Vjerojatno ste čuli i za akronim LAMP, pri čemu je MySQL na mjestu “M”. LAMP znači Linux – Apache HTTP Server – MySQL – PHP, dakle radi se o besplatnim rješenjima otvorenog koda, a MySQL je ovdje dio toga koji predstavlja jednu od najraširenijih baza podataka pogotovo u ovom kontekstu. U prilog tome idu i neke veće aplikacije temeljene na LAMP-u poput WordPress-a ili phpBB-a. Ono što je dobro kod toga kada je nešto ovako popularno je činjenica da postoji poprilično dosta izvora pomoći, što službenih što neslužbenih te ukoliko naletite na neki problem postoji solidna vjerojatnost da ga je netko već imao prije vas i da postoji rješenje koje možete primijeniti. Za MySQL je napisano dosta knjiga i priručnika, a i sam Oracle nudi dobru podršku. Uglavnom, MySQL je stvoren kao jednostavan za korištenje s dobrim performansama, a kasnije s vremenom su dodane nove mogućnosti uz zadržavanje temeljne ideje na jednostavnosti.
PostgreSQL
Počeci PostgreSQL-a sežu još u osamdesete godine iako je prva verzija izašla tek 1995. Također, radi se o projektu otvorenog koda, s objektno orijentiranim modelom O-RDBMS gdje je primarna svrha učiniti relacijsku bazu i tehnike objektno orijentiranog programiranja što kompaktnijima. Mnogi će PostgreSQL usporediti s Oracle bazom, samo bez potrebe za plaćanjem korištenja. Kada smo se već dotakli i toga, Oracle ima i XE inačicu koja nudi do 10 GB prostora besplatno, što je u stvari dovoljno za neke srednje velike kompanije, ovisno o tome čime se bave, a kasnije naravno postoji mogućnost nadogradnje na komercijalnu inačicu. Za razliku od MySQL-a, PostgreSQL je u potpunosti u rukama kontributora diljem svijeta koji održavaju ovaj projekt otvorenog koda. Također, postoji samo jedna inačica koja je aktualna, dok u usporedbi s MySQL-om postoje više njih, komercijalna tj. enterprise.
MySQL vs PostgreSQL
Nakon ovog idućeg što se može reći, tema bi mogla početi podsjećati na rat web preglednika. Sjećate se ACID testa web preglednika? Slično se može učiniti i u ovom slučaju. ACID je skraćeno od Atomicity – Consistency – Isolation – Durability. Radi se o četiri segmenta koji kada su zadovoljeni možemo reći da se radi o jednom kompaktnom proizvodu, otpornom na pogreške i kvarove pod uvjetom da je sve rađeno po pravilima. PostgreSQL je na glasu kao baza kojoj je spomenuto uvijek bilo visoko na listi prioriteta te zajedno s dobrim sigurnosnim mehanizmima tj. mogućnošću njihove integracije, dobivamo jednu sigurnu platformu za razvijanje aplikacije. MySQL u ovom pogledu je u početku imao nešto drugačije prioritete i bez ACID prolaznosti, međutim i to se promijenilo kasnije. Razlog zašto je ovo uopće bitno možemo razjasniti na sljedećem primjeru. Zamislimo da radimo web prodavaonicu i određeni kupac se odluči za neki proizvod. U žargonu baza podataka postoji izraz transakcija koja predstavlja određeni skup radnji koji cijeli ili u potpunosti uspije ili ne pa se u tom drugom slučaju sve mora vratiti u prijašnje stabilno stanje. Kod ACID-a to je ovaj prvi “A”. Bilo bi nezgodno kada bi naš kupac platio proizvod te recimo uslijed nestanka struje to ne bi bilo evidentirano. Stoga ili cijela transakcija uspije ili ne. “C” je za konzistentnost odnosno transakcija mora prijeći iz jednog stabilnoj stanja u drugo, a koje konkretno, odlučuje programska logika. Neki ugrađeni mehanizmi u baze podataka su primjerice constraints, ili sekvence, triggeri i sl., koji omogućuju upravo to da se ne dogodi namjerno ili slučajno korisničkom interakcijom neko nestabilno stanje. “I” predstavlja izolaciju transakcija odnosno stanje koje bi nastalo kada bi se one izvodile jedna za drugom, slijedno. Krajnji rezultat je to transakcije koje su u toku i nisu završile nemaju utjecaja na ostatak, točnije izolirane su. “D” predstavlja durability odnosno postojanost promjena. Dakle, kada se promjene jednom izvrše one moraju i ostati spremljene bez obzira na sve okolne utjecaje poput spomenutog nestanka struje.
Vratimo li se na usporedbu ove dvije značajne open source baze, možemo izdvojiti neke glavne sličnosti i raznovrsnosti. Ono što je isto je da rade na više platforma koje uključuju Linux, Mac OS te Windows. Također, obje je moguće koristiti počevši od nekih manjih projekata gdje neće biti iskorišten njihov puni potencijal pa i do većih raspodijeljenih sustava. Što se tiče pak raznovrsnosti, tu smo već zagrebali po površini kada smo govorili o ACID-u koji je bio prvotno u prilogu PostgreSQL bazi. Na tom nekom principu možemo obilježiti PostgreSQL kao bazu s rigoroznijim provjerama i ACID usklađenošću te nešto bogatijom ponudom za složenije i zahtjevnije projekte te ovdje ujedno vidimo i dobar razlog da sve više firmi prihvati PostgreSQL kao jeftino i moćno rješenje za njihovo poslovanje.. MySQL je na drugu ruku smatran kao efikasno i po performansama učinkovito rješenje te se stoga koristi u mnogim web aplikacijama gdje je na prvom mjesto velika količina upita u bazu. Iz ovoga je vidljivo u kojem smjeru se možete odlučiti za jednu od ove varijante, a valja napomenuti i to da, na kraju krajeva, dosta ovisi i o vama odnosno načinu projektiranja same baze i njezinog konfiguriranja. Naravno obje se mogu dosta detaljno konfigurirati i optimizirati prema onim zahtjevima za koje će i biti korištene. Druga razlika dakle, odnosi se na poštivanja propisanih standarda što PostgreSQL i čini prepoznatljivim, dok je MySQL ipak nešto slabiji u ovom pogledu. MySQL sadrži neke netipične značajke koje mogu u dosta slučajeva pojednostaviti stvari, ali s druge strane medalje i zakomplicirati ih onim administratorima baza podataka koji su naučeni slijediti standarde. Korištenjem nekih od tih značajki moguće dobiti i na brzini gdje smo već ustanovili da MySQL stoji dosta dobro.
MySQL vs PostgreSQL vs ostatak
Osim MySQL-a i PostgreSQL-a ima još kvalitetnih rješenja otvorenog koda. Jedno od njih je Apache Derby koji je napisan u Javi i ako ste radili nešto s Javom gdje vam je trebala neka manja baza, Derby je zasigurno bio jedan od izbora. Pokreće se na JVM te sadrži i potreban JDBC driver. Ono što je prednost Derbya je njegova veličina koja je dosta mala i s toga je solidan izbor kada je potrebno integrirati bazu u neku aplikaciju.
Tu je i Firebird RDBMS koji je svojedobno imao neke polemike oko imena s Mozillom, što je kasnije razriješeno. Firebird je moguće koristiti na više platformi, Linux i Windows te je sve dosta dobro dokumentirano na njihovim web stranicama. Firebird je napravljen u skladu s ACID-om kada je riječ o transakcijama te iako nije toliko moćan kao neka veća imena, ima zapravo dosta solidan skup mogućnosti poput podrške za procedure, triggere, kursore (PL/SQL). Tu je podrška za ODBC drivere, Python, Perl i PHP.
Spomenimo i SQLite koji se zbog svojih karakteristika obično koristi u mobilnim telefonima i ugradbenim aplikacijama. Kao što mu i samo ima kaže radi se o jednoj laganoj bazi koja se odlikuje dobrim performansama tj. brža je od ostalih pa stoga se dosta i koristi.
Konačna odluka između MySQL-a i PostgreSQL-a je na individualnoj razini, ali moguće je malo i generalizirati. Organizacije bi se mogle češće odlučiti na PostgreSQL zbog podrške prema standardima, stabilnosti i sigurnosti što je oslonac njihovog poslovanja, dok MySQL nudi više značajki i prostora za prenamjenu za konkretnu upotrebu. Naravno sve ovisi čime se organizacija ili pojedinac bavi. Ono što je bitno za znati da pri odabiru treba gledati i u budućnost te predvidjeti rast vašeg “tržišta” i pomno isplanirati koju inačicu odabrati ako se radi o MySQL-u. U slučaju odabira PostgreSQL-a možete očekivati dugotrajnu podršku od strane kontributora kojih na sreću ima mnogo te nepostojanje doplata za funkcionalnosti koje bi u budućnosti mogle postati komercijalne u slučaju MySQL-a. Za koju god bazu da se odlučite, bitno je slijediti primjere “dobre prakse” koje propisuju izdavači te napraviti dosta testova u sigurnoj okolini sa što više podataka, prije prelaska na produkciju kako bi se otklonile i najmanje sumnje da nešto u budućnosti neće raditi kako bi trebalo.