Suh­te­li­sed and­me­baasid olid aas­ta­küm­neid andmete haldamise jaoks parim lahendus. Kuid tä­na­päe­vaste vee­bi­ra­ken­duste jaoks ise­loo­mu­lik andmete mahu ja mit­me­ke­si­suse kasv on muutnud do­ku­men­di­põ­hi­sed and­me­baasid, nagu Mongo DB, tõ­si­selt­võe­ta­vaks kon­ku­ren­diks. Selgitame, mis on do­ku­men­di­põ­hine lä­he­ne­mis­viis ja millised on selle and­me­hal­dus­mu­deli eelised.

Kuidas erineb MongoDB teistest and­me­baasi­dest?

Tra­dit­sioo­ni­lis­tes re­lat­sioo­ni­lis­tes and­me­baasi­des sal­ves­ta­takse andmed struk­tu­ree­ri­tud tabelisse. MongoDB, mille nimi tuleneb sõnast „humongous” (hiig­las­lik), on do­ku­men­di­põ­hine and­me­baasi­süs­teem. MongoDB-s rüh­mi­ta­takse andmed struk­tu­ree­ri­mata viisil, mida and­me­baasiprog­ramm nimetab kogudeks.

Teine oluline erinevus on see, et MongoDB ei kasuta pä­rin­gu­kee­lena SQL-i ja seetõttu lii­gi­ta­takse see NoSQL-and­me­baasi­süs­tee­miks. Selle asemel kasutab MongoDB pä­rin­gu­kee­lena Ja­vaSc­ript-põhist MongoDB pä­rin­gu­keelt (MQL). Seetõttu sal­ves­ta­takse MongoDB-kirjed BSON-vormingus, mis on mo­del­lee­ri­tud JSON-i järgi. See tähendab, et toe­ta­takse kõiki Ja­vaSc­ript-and­me­tüüpe, mistõttu on MongoDB saanud ideaal­seks valikuks paljudele Ja­vaSc­ript-põhistele plat­vormi­dele.

MongoDB and­me­baaside teine eripära on nende ho­ri­son­taalne ska­lee­ri­ta­vus. See tähendab, et and­me­ba­asi andmed ei ole sal­ves­ta­tud ühte kesksesse asukohta, vaid need on jaotatud mitme serveri vahel. Selline lä­he­ne­mine suurendab andmete kät­te­saa­da­vust ja parandab and­me­ba­asi üldist jõudlust. Ho­ri­son­taalne ska­lee­ri­mine on sageli ku­lu­tõ­hu­sam kui ühe serveri võimsama riist­va­raga uuen­da­mine (ver­ti­kaalne ska­lee­ri­mine).

Kuidas MongoDB töötab?

Erinevalt MySQL-ist kasutab MongoDB andmete sal­ves­ta­miseks täiesti teist­su­gust lä­he­ne­mis­viisi ja töötab do­ku­men­di­põ­hi­selt. Selle asemel, et sal­ves­tada andmeid tabelina, kus igal real on sama arv väli, mis tuleb väär­tus­tega täita, salvestab MongoDB andmeid BSON-do­ku­men­ti­desse, millel ei ole eelnevalt määratud struk­tuuri. Väljade arv võib do­ku­men­tide vahel erineda ja väljad ei pea olema üks­tei­sega kooskõlas. Do­ku­men­did täidavad sarnast rolli nagu read SQL-tabelis, samas kui nendes do­ku­men­ti­des mää­rat­le­tud väljad toimivad veer­gu­dena.

MongoDB and­me­baasi­dega töö­ta­misel on palju vahendeid, mida saate kasutada. Lisaks usal­dus­väär­sele MongoDB Shellile saate MongoDB and­me­baaside hal­da­miseks kasutada ka GUI MongoDB Compassit. Käes­ole­vas artiklis kes­ken­dume siiski Shelli käskudele.

Kuna MQL põhineb Ja­vaSc­rip­til, on olemas juba mit­me­su­gu­sed eel­mää­ra­tud funkt­sioo­nid, mida saab kasutada keerukate päringute ja käskude jaoks. Enamasti on kõik kir­ju­ta­mis- ja lu­ge­mis­kä­sud sama struk­tuuriga kui allpool esitatud näites. Lisaks nendele käskudele on veel mitmeid teisi käske, mida saab kasutada MongoDB and­me­ba­asi hal­da­miseks. Need on põh­ja­li­kult do­ku­men­tee­ri­tud ja ük­sik­as­ja­li­kult sel­gi­ta­tud MongoDB do­ku­men­tat­sioo­nis.

> db.students.find(Name : "Charlie")
> db.students.updateOne(Name : "Charlie", Semester : 2)
> db.students.deleteOne(Name : "Peter")
> db.students.insertOne({
Name : "Elsie"
Age : 18
Semester : 1
})

Eespool toodud näites on rida MongoDB and­me­ba­asi käske, mis on kõik ühtmoodi üles ehitatud. Esiteks on „db”, mis viitab and­me­baasile tervikuna, seejärel „students”, mis viitab konk­reet­sele kogule, kus vastavad toimingud tuleks teha. Kogu järel tuleb meetod (find, update, remove, insert), mida tuleks kasutada.

Konk­reet­set dokumenti saab otsida meetodiga find(). Kui jätate pa­ra­meetri välja tühjaks, kuvatakse kõik valitud kogumikus olevad do­ku­men­did. Eespool toodud näites otsib MongoDB kõik do­ku­men­did, mille väljal „Name” on väärtus „Charlie”.

Meetodit updateOne() saab kasutada dokumendi väärtuste üle­kir­ju­ta­miseks. Meetodil update() on kaks argumenti. Esimene argument on va­li­kukri­tee­riu­mid ja teine on üle­kir­ju­ta­tav võti-väärtuse paar. Näites valitakse kõik õpilased nimega „Charlie”. Seejärel si­ses­ta­takse väärtus „2” väljale „Semester” õpilaste puhul, kelle nimi on Charlie.

Meetod deleteOne() võtab vastu ainult ühe argumendi. See on va­li­kukri­tee­rium, mis määrab, millised do­ku­men­did and­me­baasist eemaldada. Siin eemal­da­takse and­me­baasist kõik õpilased nimega Peter.

Meetod insertOne() võtab samuti vastu argumendi. Selle meetodi puhul on ar­gu­men­diks dokumendi JSON-sisu, mida soovite lisada. Do­ku­men­tide lisamisel on oluline tagada, et igal MongoDB-kogumikus olev do­ku­men­dil oleks unikaalne 12-baidine kuue­teist­küm­nend­num­ber. See number on dokumendi objekti ID. Kui seda dokumendi lisamisel ei määratud, ge­ne­ree­rib MongoDB do­ku­men­dile au­to­maat­selt ID.

Millised on MongoDB eelised?

MongoDB struktuur pakub ka­su­ta­ja­tele mitmeid eeliseid, eriti paind­lik­kuse ja ska­lee­ri­ta­vuse osas. Do­ku­men­di­põ­hise and­me­sal­ves­tuse üks peamisi eeliseid on see, et erinevalt re­lat­sioo­ni­lis­test and­me­baasi­dest ei pea kõik kirjed olema sama at­ri­buu­diga. See võimaldab sal­ves­tada struk­tu­ree­ri­mata ja pool­st­ruk­tu­ree­ri­tud andmeid. Lisaks on võimalik üksikuid dokumente ümber struk­tu­ree­rida (näiteks atribuudi/välja lisamise või kus­tu­ta­mi­sega) ilma, et oleks vaja ümber struk­tu­ree­rida teisi sama kogumiku dokumente. Kuna MongoDB-s sal­ves­ta­takse do­ku­men­did BSON-vormingus, pakuvad MongoDB-and­me­baasid ka suurt ühil­du­vust paljude levinud Ja­vaSc­ript-plat­vormi­dega.

Lisaks struk­tu­ree­ri­mata andmete sal­ves­ta­misele pakub MongoDB ka suurt ho­ri­son­taal­set ska­lee­ri­ta­vust, rikkumata ACID-põ­hi­mõt­teid (ato­maar­sus, jär­je­pi­de­vus, iso­lee­ri­tus, püsivus). Jaotatud and­me­baasi­des võib jär­je­pi­de­vuse tagamine olla sageli keeruline, kuna andmed sal­ves­ta­takse eri­ne­va­tele ser­ve­ri­tele. Kui mitmesse dokumenti tehakse sa­ma­aeg­selt muudatusi, ei pruugi need muu­da­tu­sed kohe levida kõikidele and­me­baasi­süs­teemi ka­su­ta­ta­va­tele ser­ve­ri­tele. Kui päringuid on palju, võib see mõnikord viia andmete jär­je­pi­de­vuse ka­du­miseni. 2019. aastal välja tulnud MongoDB 4.2 ver­sioo­niga on nüüd võimalik teha muudatusi mitmesse dokumenti eri­ne­va­tel ser­ve­ri­tel, ohus­ta­mata jär­je­pi­de­vust ega kät­te­saa­da­vust.

Tip

Vajate do­ku­men­di­põ­hist and­me­ba­asi, mis kohandub teie vee­bi­ra­ken­duse nõuetega? MongoDB on ideaalne lahendus!

Milleks saab MongoDB-d kasutada?

MongoDB on suu­re­pä­rane valik vee­bi­pro­jek­ti­dele, mis tuginevad äärmiselt suurtele struk­tu­ree­ri­mata and­me­ko­gu­mi­tele. Töötamine do­ku­men­di­põ­hise süs­tee­miga, millel puudub kindel skeem, on ideaalne lahendus mit­me­su­guste and­me­tüü­pide tööt­le­miseks, mis nõuavad kiiret sal­ves­ta­mist ja tööt­le­mist.

And­me­baasi­süs­teem võimaldab ka ho­ri­son­taal­set, peaaegu pii­ra­ma­tut ska­lee­ri­ta­vust, kuna and­me­baase saab hõlpsasti jaotada mitme serveri vahel, ilma et see mõjutaks funkt­sio­naal­sust. Lisaks võimaldab MongoDB hõlpsasti luua and­me­ba­asi koopiaid ja teha need kät­te­saa­da­vaks eri­ne­va­tele ser­ve­ri­tele, tagades andmete pi­ka­aja­lise tur­va­li­suse ja kät­te­saa­da­vuse. Do­ku­men­di­põ­hine and­me­baasiprog­ramm näitab mul­je­ta­val­da­vaid võimeid ka andmete koon­da­misel, olgu need siis ühest või mitmest allikast.

MongoDB sobib ideaal­selt vee­bi­pro­jek­ti­dele, millel on järgmised omadused:

  • Skaa­lau­tu­vus: vee­bi­pro­jekti kasvades suureneb ta­va­li­selt päringute arv, mis omakorda suurendab and­me­ba­asi koormust.
  • Kät­te­saa­da­vus: vee­bi­ra­ken­dus peab olema kat­ke­ma­tult kät­te­saa­dav isegi serveri rikke korral.
  • Paind­lik­kus: teie projekt peaks või­mal­dama igal ajal dü­naa­mi­list ko­han­da­mist.

Ei ole kindel, milline and­me­ba­asi mudel on teie vee­bi­pro­jek­tile sobiv? Pole viga, sest te ei pea valima ainult ühte. On võimalik kom­bi­nee­rida erinevaid and­me­ba­asi mudeleid ja mitme mudeli valimine võib olla teie projekti nõuetele kõige sobivam valik.

Go to Main Menu