MongoDB i MySQL su vodeći NoSQL otvorenog koda i relaciona baza podataka. Šta je najbolje za vašu aplikaciju?
Tokom dot kom elspolozije u 1990-im, uobičajeni softverski paket za veb aplikacije bio je LAMP, koji je prvobitno značio: Linux (OS), Apache (veb server), MySQL (relaciona baza podataka) i PHP (serverski jezik za server). MySQL je bila najpoželjnija baza podataka pre svega zato što je bila besplatna, otvorenog koda i imala je dobre performanse čitanja, što se dobro uklapalo sa aplikacijama „Veb 2.0“ koje su dinamički generisale lokacije iz baze podataka.
Kasnije je na red dospeo stek MEAN, što je značilo: MongoDB (baza podataka dokumenata), Express (veb server), AngularJS (radni okvir prvog plana) i Node.js (pozadinsko JavaScript izvršno okruženje). Stek MEAN bio je atraktivan, između ostalih razloga, zato što je jedini jezik koji ste morali da znate bio JavaScript. Takođe je tražio manje RAM-a od ekvivalentnog LAMP steka.
Šta je to MySQL / MariaDB?
Monty Widenius i David Axmark iz MySQL AB su prvobitno razvijali MySQL počevši od 1994. godine. „My“ u nazivu proizvoda odnosi se na Wideniusovu ćerku, a ne na englesku reč „moj“. MySQL je dizajniran tako da bude kompatibilan sa mSQL-om (tzv. Mini SQL-om), sa dodatkom sloja SQL upita i licence otvorenog koda (zapravo dvostruke licence, i vlasničke i GPL – opšte javne licence). Javna izdanja MySQL-a počela su da se objavljuju krajem 1996. i to se nastavlja svake godine ili dve. MySQL je trenutno najpopularnija relaciona baza podataka.
Sun Microsystems kupio je MySQL AB 2008. (za milijardu dolara), a Oracle je kupio Sun 2010. godine. Widenius je odvojio MySQL 5.5 u MariaDB neposredno pre akvizicije Oracle, usled široke zabrinutosti o namerama Oracle-a za MySQL. MariaDB se jako trudi da održi kompatibilnost sa verzijama Oracle MySQL.
MySQL je započeo kao relaciona baza podataka relativno niske klase u poređenju s sposobnijim komercijalnim relacionim bazama podataka, kao što su Oracle Database, IBM DB / 2 i Microsoft SQL Server, iako je bio dovoljan za dinamičke veb stranice. Tokom godina dodao je većinu funkcija koje očekujete od relacione baze podataka, uključujući transakcije, referentna ograničenja integriteta, snimljene procedure, pokazivače, indeksiranje i pretraživanje celog teksta, geografsko indeksiranje i pretraživanje, i grupisanje.
MySQL se još uvek koristi u malim do srednjih instalacija, iako sada podržava funkcije „velike baze podataka“, poput postavki master/slave, upotrebe sa Memcached-om i horizontalnog cepanja podataka (engl sharding). Skaliranje MySQL-a na više podređenih poboljšava performanse čitanja, ali samo master prihvata zahteve za pisanje.
AWS nudi MySQL uslugu u dve varijante, Amazon RDS i Amazon Aurora. Potonji ima mnogo veće performanse, može da obrađuje terabajte podataka, ima kraće vreme za ažuriranje replika i direktno se takmiči sa bazama podataka Oracle Database i SQL Server.
Šta je to MongoDB?
MongoDB je skalabilna baza podataka operativnih dokumenata koja je dostupna u verzijama otvorenog koda i u komercijalnim verzijama za preduzeća, a može da se izvršava u vlastitim prostorijama ili kao usluga upravljanja oblakom. Usluga upravljanja oblakom naziva se MongoDB Atlas.
MongoDB je daleko najpopularnija od svih NoSQL baza podataka. Njen model dokumenata podataka pruža programerima veliku fleksibilnost, dok distribuirana arhitektura omogućava veliku skalabilnost. Kao rezultat toga, MongoDB se često bira za aplikacije koje moraju da upravljaju velikim količinama podataka, kojima koristi horizontalna skalabilnost i koje upravljaju strukturama podataka koje ne odgovaraju relacionom modelu.
MongoDB je skladište koje se bazira na dokumentima, a koje nad sobom ima implementirano skladište zasnovano na grafovima. MongoDB zapravo ne skladišti JSON (JavaScript Object Notation): on čuva BSON (Binarni JSON), koji proširuje JSON reprezentaciju (stringove) na dodatne vrste kao što su int, long, date, floating point, decimal128 i geoprostorne koordinate.
MongoDB može da generiše višemodalne grafikone, geoprostorne, B-stabla i indekse punog teksta na istom primerku podataka, tako što koristi tip podatka za generisanje ispravne vrste indeksa. MongoDB vam omogućava da kreirate indekse nad bilo kojim poljem dokumenta. MongoDB 4 ima transakcije sa više dokumenata, što znači da i dalje možete da imate ACID svojstva, čak i ako morate da normalizujete dizajn podataka.
MongoDB podrazumevano koristi dinamičke šeme, za koje se ponekad kaže da su bez šeme (engl. schema-less). Dokumenti u jednoj kolekciji ne moraju imati isti skup polja, a tip podatka za polje može se razlikovati u različitim dokumentima unutar zbirke. Sa dinamičkim šemama, možete bilo kada da promenite strukture dokumenata.
Međutim, dostupno je i upravljanje šemama. Počevši od verzije MongoDB 3.6, MongoDB podržava proveravanje JSON šeme, koje možete da uključite u svom izrazu za proveru ispravnosti.
LAMP i MEAN stekovi
Postoji mnogo varijacija LAMP i MEAN stekova. Umesto Linux OS-a, na primer, možete da izvršavate na Windowsu (WAMP) ili MacOS-u (MAMP). Umesto Apache veb servera u operativnom sistemu Windows, možete koristite IIS (WIMP). Umesto relacione baze podataka MySQL u LAMP steku, možete da koristite PostgreSQL ili SQL Server. Ako vam je potrebna globalna distribucija, možete da koristite CockroachDB ili Google Cloud Spanner. Umesto PHP jezika, možete da kodirate u jeziku Perl ili Python. Ako želite da pištete u jeziku Java ili C#, postoje posebne familije stekova koje možete da razmotrite.
Umesto baze podataka dokumenata MongoDB u MEAN steku, možete da izvršavate Couchbase ili Azure Cosmos DB za bolju globalnu distribuciju. Umesto Ekpress-a, mogli biste koristiti bilo koji od desetak radnih okvira veb servera Node.js. Umesto radnog okvira prvog plana AngularJS, možete da koristite Angular 2 ili React.
Kako odabrati bazu podataka za svoju aplikaciju
Najvažnija pitanja koja treba postaviti prilikom biranja baze podataka su:
- Koliko podataka očekujete da se čuva kada je aplikacija zrela?
- Koliko korisnika očekujete da istovremeno radi pri najvećem opterećenju?
- Koja je dostupnost, skalabilnost, latencija, propusnost i doslednost podataka potrebna vašoj aplikaciji?
- Koliko često će se menjati šeme vaših baza podataka?
- Koja je geografska distribucija vaše korisničke populacije?
- Koji je prirodni „oblik“ vaših podataka?
- Da li vašoj aplikaciji treba mrežna obrada transakcija (OLTP), analitički upiti (OLAP) ili oboje?
- Koliki odnos čitanja i pisanja očekujete u proizvodnji?
- Da li su vam potrebni geografski upiti i/ili upiti nad celim tekstom?
- Koji su vam omiljeni programski jezici?
- Imate li budžet? Ako je odgovor da, da li će pokrivati licence i ugovore o podršci?
Nekoliko ovih pitanja može da suzi izbor baze podataka, ali imamo na raspolaganju mnogo više mogućnosti nego kada je formulisan LAMP stek. Ako pravite aplikaciju koja treba da bude dostupna 99,999 odsto vremena korisnicima širom sveta sa jakom doslednošću, samo će nekoliko baza podataka odgovarati. Ako će se vaša aplikacija koristiti u jednoj zemlji od 9:00 do 18:00. radnim danima i može da podnese krajnju konzistentnost, skoro svaka baza podataka će odgovarati, mada će neke biti lakše za programere i operatere, a neke će vam dati bolje performanse za najvažnije scenarije korišćenja.
Mada su stekovi LAMP i MEAN nekad bili dobra rešenja za veb aplikacije, nijedan trenutno nije optimalan. Umesto da slepo usvojite jedan od njih, trebalo bi da razmislite o svojim slučajevima korišćenja i pronađite arhitekturu koja će odgovarati vašoj aplikaciji u doglednoj budućnosti.
SQL ili NoSQL?
Kada ćete za novu aplikaciju poželeti relacionu bazu podataka kao što je MySQL? Osim očigledne podrške za standardni SQL, relacione baze podataka same po sebi nameću tabelarnu šemu podataka sa doslednim snažnim tipom polja i pomažu vam da izbegnete dupliciranje podataka pod uslovom da koristite pogodnosti normalizacije.
Ako treba da izbegnete nedostajuće podatke, možete prilikom kreiranja ili modifikacije tabela, da deklarišete polja kao NOT NULL. Ako su vam potrebni geografski upiti kako je definisano standardima za geoprostorni sadržaj Open Geospatial Consortium-a, većina relacionih baza podataka pruža snažnu implementaciju. A ako vam je potrebno pretraživanje celog teksta, većina relacionih baza podataka omogućava vam da u tekstualnim poljima definišete inverzne indekse, koji se u u MySQL-u zovu FULLTEXT indeksi.
S druge strane, ako vam je potreban i povremeni dokument slobodnog oblika, MySQL i mnoge druge relacione baze podataka takođe podržavaju JSON podatke kako je definisano u dokumentu RFC 7159. A ako takođe želite da koristite XML dokumente i XPath ili XSLT, većina relacionih baza podataka ima tu sposobnost.
Kada ćete poželeti bazu podataka dokumenata kao što je MongoDB? Ako vaš najčešći slučaj korišćenja mora da omogući podatke slobodnog oblika, polja koja menjaju tip iz dokumenta u dokument, šemu koja se vremenom menja ili ugnežđene dokumente, tada će NoSQL baza podataka zadovoljiti uslove. Pored toga, ako je vaša aplikacija napisana u JavaScript-u, tada će JSON format baza podataka dokumenata prirodno odgovarati.
Izvor: InfoWorld