MongoDB Atlas – Poznata noSQL baza u oblaku

MongoDB Atlas – Poznata noSQL baza u oblaku

Odlična alternativa za relacijske baze podataka

Iako među domaćim programerima još uvijek nije tako dobro poznata (a pogotovo ne i korištena) kao relacijske baze podataka, MongoDB se kao najpoznatiji predstavnik baza dokumenata već dosta vremena nalazi na globalnom vrhu popisa najpopularnijih baza podataka.

Na primjer, na jednoj od poznatih adresa za takvo rangiranje poput: https://db-engines.com/en/ranking.

MongoDB već dosta dugo vremena drži peto mjesto, odmah iza apsolutno najpopularnijih proizvoda s područja baza podataka kao što su Oracle, MySQL, SQL Server i PostgreSQL. I ne samo da drži to mjesto, nego također ima jedan on najvećih skokova u porastu popularnosti (skupa s PostgreSQL) u odnosu na isto vrijeme prošle godine.

Slika01

https://db-engines.com/en/ranking: baza MongoDB već prilično dugo vremena drži peto mjesto u poretku svih baza s jednim od najvećih postotaka porasta popularnosti

Kao i kod većine drugih (relacijskih) baza podataka, korisnicima su na raspolaganju i besplatne verzije baza podataka, koje se mogu instalirati na vlastito računalo (ili server) zbog upoznavanja s tehnologijom ili razvoj novog softvera. Na raspolaganju je i verzija „u oblacima“ namijenjena korištenju bez potrebe za prethodnom instalacijom sustava na vlastito računalo. S takvom verzijom više nemate nikakvih opravdanja da ne želite/možete koristiti bazu jer bi vam bilo nekako mrsko instalirati potpuno novi sustav na vlastito računalo.


Pristup bazi MongoDB u oblacima…


Do baze MongoDB smještene na odgovarajućoj infrastrukturi u oblacima može se stići preko web adrese: https://www.mongodb.com/atlas/database.

Kao što to pokazuje sama spomenuta adresa, takva verzija baze uz osnovni naziv ima i dodatak Atlas. Za korištenje baze MongoDB Atlas treba prvo napraviti registraciju, ili se možete odmah prijaviti korištenjem nekog od postojećih korisničkih računa (npr. Googleova).

Slika02

https://www.mongodb.com/atlas/database: adresa na kojoj je dostupna verzija baze „u oblacima“

Nakon prijave na sustav i pregleda nekoliko početnih „propagadnih” stranica, automatski se stiže na stranicu namijenjenu pripremi prvog vlastitog projekta. U takvom projektu će se upravo MongoDB Atlas koristiti za spremanje podataka (pardon – dokumenata). Da ne bude zbrke oko korištenja ova dva termina (jer će se to možda događati i u nastavku teksta), da odmah objasnimo razliku. Baza podataka širi je pojam jer u sebi obuhvaća i relacijske baze podataka i baze dokumenta, ali i sve ostale tehnologije baza podataka podataka. MongoDB interno čuva podatke u obliku dokumenta i kolekcija dokumenata, ali ujedno predstavlja bazu podataka u širem smislu značenja.

Slika03

Priprema prvog projekta: prvo je potrebno odrediti osnovne karakteristike projekta prema konkretnoj situaciji

Ako nikad prije niste koristili MongoDB, onda je kod pripreme prvog projekta kao cilj projekta najbolje izabrati učenje (Learn MongoDB). Kao tip aplikacije možete izabrati modernizaciju aplikacije, a kao programski jezik C#/.NET. ili neki od drugih podržanih programskih jezika, već prema tome što najčešće koristite i najbolje poznajete.

U sljedećem koraku treba izabrati kakvu vrstu baze podataka treba pripremiti. Na raspolaganju su tri mogućnosti: Serverless, Dedicated i Shared. Budući da tek upoznajete novi sustav, za početak je najbolje izabrati Shared verziju. Osim što je u potpunosti besplatna, ova verzija nudi mogućnost učitavanja prilično složenog skupa testnih podataka, što može poprilično pomoći pri upoznavanju nove tehnologije.

Slika04

Priprema prve baze podataka: za početak je najbolje izabrati besplatnu (Shared) verziju

Korištenje Serverless i Dedicated verzija baze se naplaćuje. Prva od spomenutih verzija naplaćuje se ovisno o stvarnom prometu (što znači da je pogodnija za rješenje gdje se opterećenja baze dosta mijenjaju tijekom dana). Druga verzija se naplaćuje prema satu korištenja bez obzira na promet (ali zato postoje detaljnije mogućnosti upravljanja konfiguracijom). Takvu verziju bolje je koristiti ako je opterećenje u korištenju sustava manje-više jednako tijekom cijelog dana. U oba slučaja prije same pripreme baze navedeni su točni iznosi (cijene korištenja), tako da kasnije nema nikakvih iznenađenja.

Slika05

Odabir oblaka za spremanje baze: na raspolaganju su sve tri najpopularnije tehnologije (Amazon, Microsoft i Google)

Treba svakako spomenuti i to da se vlastito programsko rješenje zasnovano na bazi MongoDB Atlas možete u potpunosti razviti na besplatnoj verziji, a tek kad dogovorite prodaju konkretnom klijentu, možete prijeći na korištenje one komercijalne, a što ćete naravno uključiti u krajnju cijenu zaračunatu korisniku.

U sljedećem koraku trebate izabrati kakvu ćete tehnologiju koristiti za fizičko spremanje baze podataka. Budući da su na raspolaganju sve tri najpopularnije tehnologije takve vrste (AWS, Google Cloud i Microsoft Azure), to je ujedno dokaz kako MongoDB nije nekakav „slijepi smjer“ u razvoju baza podataka, nego nešto što se prilično ozbiljno koristi u praksi. Nakon odabira jedne od ponuđenih tehnologija, treba izabrati lokaciju odgovarajućega (najbližeg) podatkovnog centra. Za korisnike u Hrvatskoj najbolje je da to bude neki centar u istoj zoni, a to je Europa. Poslije potvrde izabranih parametara započinje priprema vašeg vlastitog klastera, što može potrajati nekoliko minuta.

Slika06

Definiranje načina autentikacije: moguće je koristiti korisničko ime, certifikate i/ili ograničavanje IP adresa

Sad vam preostaje odraditi još nekoliko „manje bitnih sitnica“, kao što to pokazuje prateća slika uz tekst. Jedna je od njih odabir korisničkog imena i lozinke namijenjene za pristup bazi podataka. Bez obzira na to namjeravate li kasnije te podatke koristiti za autentikaciju preko ugrađenih Mongo alata za pristup bazi podataka ili u nekom programskom jeziku.

Sigurnost pristupa bazi podataka možete dodatno povećati nabrajanjem IP adresa s dozvoljenim pristupom bazi. Budući da se sad tek upoznajete s bazom, najjednostavnije je da samo kliknete na gumb „Add My Current IP Address“. Ako kasnije namjeravate koristiti bazu s neke druge IP adrese, možete ponoviti postupak dodavanja IP adresa za jedno ili više računala. Postoje i složeniji načini definiranja načina autentikacije poput korištenja raspona IP adresa ili certifikata, ali to prelazi okvire ovog teksta.


Na taj način završena je priprema MongoDB klastera i prvog projekta. Naravno u ovom trenutku u sustavu nema nikakvih podataka. Budući da se tek upoznajete s novom tehnologijom baza podataka/dokumenta, ne bi li bilo lijepo u njoj odmah imati i čitav niz dokumenta pogodnih za isprobavanje različitih njenih mogućnosti?

Slika07

Početno stanje baze podataka: pripremljen je projekt, klaster i baza podataka, ali u bazi nema nikakvih podataka

Priprema takvih podataka također je vrlo jednostavna. Dovoljno je kliknuti na gumb „Browse Collections“. Budući da u bazi nema nikakvih podataka, automatski se nudi mogućnost učitavanja cijelog skupa demo podataka. Potrebno je samo kliknuti na gumb „Load a Sample Dataset“ i malo sačekati. Da je riječ o sasvim ozbiljnom primjeru podataka govori i činjenica da će nakon završetka procesa klaster biti napunjen s oko 350 MB podataka.

…korištenje…


Nakon što su učitani testni podaci, možete ih pregledavati na različite načine. Jedan od najjednostavnijih načina je korištenje grafičkog korisničkog sučelja u kojem se već nalazite u pregledniku. Naravno, daleko od toga da je to i jedini mogući način. Nabrojimo još nekoliko alternativa:

1.       izravnim upisivanjem MQL naredbi pomoću alata MongoDB Shell,

2.       preko vlastite aplikacije napisane u nekom od podržanih programskih jezika,

3.       preko posebnog GUI alata instaliranog na vlastito računalo (MongoDB Compass).



Kako izgleda primjer vrlo jednostavnog MQL (MongoDB Query Language) upita upisanog u grafičko korisničko sučelje i dobivenih rezultata prikazano je na pratećoj slici uz tekst. Da, MongoDB doista koristi sasvim drugačiji način postavljanja upita u odnosu na relacijske baze podataka gdje vlada neka od varijanti SQL jezika. Rezultati upita prikazuju se u JSON (JavaScript Object Notation) obliku, dok se sami podaci u bazi podataka čuvaju u BSON (Binary JSON) formatu zbog optimalnog zauzeća prostora i veće brzine obrade podataka.

Slika08

Podaci o restoranima: dio demo podataka automatski dostupnih korisniku

Primjer JSON podatka (u neformatiranom obliku) kakve nakon upita vraća MongoDB naveden je u nastavku:



{"_id":{"$oid":"5eb3d668b31de5d588f4292a"},"address":{"building":"2780","coord":[{"$numberDouble":"-73.98241999999999"},{"$numberDouble":"40.579505"}],"street":"Stillwell Avenue","zipcode":"11224"},"borough":"Brooklyn","cuisine":"American","grades":[{"date":{"$date":{"$numberLong":"1402358400000"}},"grade":"A","score":{"$numberInt":"5"}},{"date":{"$date":{"$numberLong":"1370390400000"}},"grade":"A","score":{"$numberInt":"7"}},{"date":{"$date":{"$numberLong":"1334275200000"}},"grade":"A","score":{"$numberInt":"12"}},{"date":{"$date":{"$numberLong":"1318377600000"}},"grade":"A","score":{"$numberInt":"12"}}],"name":"Riviera Caterer","restaurant_id":"40356018"}



Iako između relacijskih baza podataka i baze MongoDB postoje i brojne druge razlike u implementaciji, jedna od razlika koja će vam stvarati najviše problema na početku svakako je razlika u načinu postavljanja upita na bazu. Da bi bio jasnije o čemu je riječ, evo primjera dva prilično jednostavna SQL upita prepisana na MongoDB:



SQL:

----

SELECT COUNT(*) AS count

FROM person



SELECT band_name,

    SUM(price) AS total

FROM albums

GROUP BY band_name

ORDER BY total



MQL:

----

db.person.aggregate( [

    {

        $group: {

            _id: null, 

            count: { $sum: 1 }

        }

    }

] );



db.albums.aggregate( [

    {

        $group: {

            _id: "$band_name",

            total: { $sum: "$price" }

        }

    },

    { $sort: { total: 1 } }

] );



Osim samih naziva elemenata u bazama, sve ostalo je prilično različito, zar ne? I svakako zbunjujuće u prvi trenutak. Međutim, kad malo zaronite u svijet MQL-a, ni pisanje takvih uputa više neće biti bauk. Jedino ćete uvijek morati napisati poprilične količine različitih vrsta zagrada, da bi zaista dobili prave podatke iz baze (ili ih ažurirali)!



Jedna od vrlo zgodnih stvari u vezi s bazom podataka MongoDB Atlas ta je što se nakon početne pripreme baze podataka (te pripadajućih podataka za autentikaciju) može izravno preko grafičkog korisničkog sučelja dobiti karakteristični string za pristup bazi podataka u različitim programskim jezicima (opcija Databases > Connect).
Slika09

Povezivanje s bazom podataka: na raspolaganju su različiti načini povezivanja na bazu podataka

Oni koji prate tekstove ovog autora znaju da bi sad obično uslijedio neki primjer u Visual Studiju ili eventualno PHP-u. Međutim, ovaj put ćemo posegnuti za nečim malo drugačijim, a to je priprema primjera u Googleovu jeziku Go. Budući da ga autor teksta intenzivno koristi u zadnje vrijeme za neke druge projekte, onda mu se činilo nekako prikladnim da upravo Go bude iskorišten za probu povezivanja s MongoDB bazom. I to upravo verzijom koja se nalazi negdje u AWS oblaku. Čisto da se uvjerite da pristup takvim bazama podataka nije nešto previše komplicirano. A usput i da bacite verziju na Go, jer se sve više koristi i traži u praksi.



Cjelokupan programski primjer u jeziku Go naveden je u nastavku:



package main



import (

       "context"

       "fmt"

       "log"

       "time"



       "go.mongodb.org/mongo-driver/bson"

       "go.mongodb.org/mongo-driver/mongo"

       "go.mongodb.org/mongo-driver/mongo/options"

       "go.mongodb.org/mongo-driver/mongo/readpref"

)



type Osoba struct {

    ImePrezime      string

    Posta           int

    Grad            string

}







func main() {

       client, err := mongo.NewClient(options.Client().ApplyURI("mongodb+srv://xxxuser:Ova e-mail adresa je zaštićena od spambota. Potrebno je omogućiti JavaScript da je vidite./samples_restaurants?retryWrites=true&;w=majority"))

       if err != nil {

             log.Fatal(err)

       }

       ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)

       err = client.Connect(ctx)

       if err != nil {

             log.Fatal(err)

       }

       defer client.Disconnect(ctx)

       err = client.Ping(ctx, readpref.Primary())

       if err != nil {

             log.Fatal(err)

       }

       databases, err := client.ListDatabaseNames(ctx, bson.M{})

       if err != nil {

             log.Fatal(err)

       }

       fmt.Println(databases)

      

   

       collection := client.Database(databases[4]).Collection("persons")



       NovaOsoba := Osoba{"Nenad Crnko", 10000, "Zagreb"}



    insertResult, err := collection.InsertOne(context.TODO(), NovaOsoba)

    if err != nil {

        log.Fatal(err)

    }

    fmt.Println("Inserted a Single Document: ", insertResult.InsertedID)



}



A što zapravo radi prethodni primjer? Spaja se na bazu podataka MongoDB Atlasa koristeći pritom string za povezivanje dobiven iz grafičkog korisničkog sučelja.



Jedino što treba izmijeniti u prethodnom primjeru dio je:



xxxuser:xxxxpassword



tako da se na to mjesto upiše pravo korisničko ime i lozinka, koji su definirani prilikom početne pripreme klastera i baze podataka, i to međusobno odvojene dvotočkom.



Kao rezultat izvođenja programa dobije se:

[sample_airbnb sample_analytics sample_geospatial sample_mflix sample_restaurants sample_supplies sample_training sample_weatherdata admin local]

Inserted a Single Document:  ObjectID("61dc9f282a8d630bed670bdb")


Prvo se dobije prikaz popisa svih baza podataka, a onda je u petu po redu (zbog nultog početnog indeksa je to baza broj 4) zapisana nova osoba.


Budući da MongoDB ne zahtijeva postojanje odgovarajuće kolekcije (svojevrsne analogije tablici u relacijskom modelu) u bazi dokumenta od ranije, automatski se stvara nova kolekcija persons i u nju sprema odgovarajući dokument. Za novi dokument prikazuje se njegov ID. Ako opet želimo napraviti nekakvu analogiju s relacijskim modelom, onda bi to donekle odgovaralo „autoincrement“ verziji primarnog ključa. Jedino što ovdje nije riječ o običnom jedinstvenom broju nego o oznaci dokumenta dobivenoj nešto složenijim algoritmom.
Slika10

Primjer upita: izravno postavljanje upita preko korisničkog sučelja MongoDB Atlas

Primijetite i da je u prethodnom Go primjeru ona „čudna“ MQL sintaksa upita u potpunosti skrivena za što je zaslužan upravljački program za povezivanje programskog jezika Go s bazom. Ali to ipak ne znači da se možete „prošvercati“ i izbjeći učenje MQL-a, jer će vam sigurno ponekad zatrebati za postavljanje izravnih upita na bazu, da bi provjerili kako radi vaše programsko rješenje.

…i učenje

Na temelju svega do sad napisanog trebalo bi biti jasno da se radi o vrlo dobrom i u potpunosti zaokruženom „uratku“ na području baza podataka. Uostalom, da nije tako, zar bi ga podržavali Amazon, Google i Microsoft?

Ako ste do sada koristili samo relacijski orijentirane baze podataka, onda MongoDB ipak predstavlja sasvim novi svijet koji treba dobro istražiti. Srećom i tu postoji vrlo dobar put za tako nešto. Za MongoDB na raspolaganju je cijelo online „sveučilište“ za upoznavanje s različitim finesama alata: https://university.mongodb.com/.

Na spomenutoj adresi ponovo su potpuno besplatno dostupni različiti tečajevi za upoznavanje s brojnim tehnologijama povezanim s MongoDB. Od samih osnova za potpune početnike, preko naprednijih tečajeva za korisnike određenoga programskog jezika ili administratore baza podataka itd. Zgodno je da se nakon svakog završenog tečaja odmah dobiva i odgovarajuća diploma u PDF obliku, koju po potrebi možete pokazati i potencijalnom poslodavcu.

Slika11

https://university.mongodb.com: sveučilište za upoznavanje s MongoDB tehnologijom

Apsolutni minimum za uspješno korištenje baze MongoDB savladavanje je osnova korištenja MQL jezika, jer inače nećete biti u stanju postaviti ni najjednostavniji upit.

Nekoliko riječi za kraj

MongoDB (pogotovo u svojoj „oblačnoj“ Atlas varijanti) predstavlja vrlo dobar izbor za spremanje podataka/dokumenta za različite vrste aplikacija. Ono što u praksi predstavlja jednu od najvećih prepreka za šire korištenje svakako je postojanje ogromne baze postojećih aplikacija temeljenih na relacijskom modelu. Ako ste, na primjer, godinama razvijali nekakav ERP softver, tek to da ćete samo tako sad opet krenuti ispočetka s MongoDB, čak i kad bi to imalo neospornih prednosti.


Međutim, ako krećete u razvoj potpuno nove samostalne aplikacije gdje unaprijed znate da bi se mogao pojaviti relativno mali broj različitih i ujedno vrlo složenih objekata, onda svakako nije naodmet na početku razvoja razmisliti i o korištenju baze MongoDB. A kao što smo već nekoliko puta spomenuli, ovdje više nije riječ o nekakvoj novoj eksperimentalnoj tehnologiji, nego o nečem „sasvim odraslom“ i prihvaćenom od najvećih igrača u IT sektoru.

Naravno, ovim tekstom čak nije ni spomenuto što sve nudi MongoDB u oblacima. Na primjer, postoje posebni moduli za grafičku prezentaciju podataka iz baze podataka i slično. Ako vam se ono što ste do sad pročitali čini zanimljivim, onda nema nikakve prepreke za samostalan nastavak dodatnih istraživanja.

Ocijeni sadržaj
(0 glasova)

// možda će vas zanimati

Newsletter prijava


Kako izgleda naš posljednji newsletter pogledajte na ovom linku.

Copyright © by: VIDI-TO d.o.o. Sva prava pridržana.