Re­la­tio­nel­le databaser var i årtier den fo­re­truk­ne løsning til da­ta­sty­ring. Den stigende mængde og mang­fol­dig­hed af data, der ken­de­teg­ner moderne we­bap­pli­ka­tio­ner, har imid­ler­tid gjort do­ku­men­t­o­ri­en­te­re­de databaser som Mongo DB til en seriøs kon­kur­rent. Vi vil forklare, hvad den do­ku­men­t­o­ri­en­te­re­de tilgang er, og hvilke fordele denne da­ta­sty­ring­mo­del tilbyder.

Hvordan adskiller MongoDB sig fra andre databaser?

I tra­di­tio­nel­le re­la­tions­da­ta­ba­ser gemmes data i en struk­tu­re­ret tabel. MongoDB, hvis navn stammer fra ordet humongous (kæmpe), er et do­ku­men­t­o­ri­en­te­ret da­ta­ba­se­sy­stem. I MongoDB grupperes data på en ustruk­tu­re­ret måde i det, da­ta­ba­se­pro­gram­met kalder samlinger.

En anden vigtig forskel er, at MongoDB ikke bruger SQL som sprog til fo­re­spørgs­ler og derfor ka­te­go­ri­se­res som et NoSQL-da­ta­ba­se­sy­stem. I stedet bruger MongoDB det Ja­va­Script-baserede MongoDB Query Language (MQL) som sit fo­re­spørgsels­sprog. Derfor gemmes MongoDB-poster i BSON-formatet, som er mo­del­le­ret efter JSON. Det betyder, at alle Ja­va­Script-datatyper un­der­støt­tes, hvilket er grunden til, at MongoDB er blevet det ideelle valg for mange Ja­va­Script-baserede platforme.

Et andet kendetegn ved MongoDB-databaser er deres evne til at skalere ho­ri­son­talt. Det betyder, at dataene i en database kan spredes over flere servere i stedet for at blive gemt på ét centralt sted. Denne tilgang giver øget da­ta­til­gæn­ge­lig­hed og forbedrer den samlede da­ta­ba­sey­del­se. Ho­ri­son­tal skalering er ofte mere om­kost­nings­ef­fek­tivt end at opgradere en enkelt server med mere kraftfuld hardware (vertikal skalering).

Hvordan fungerer MongoDB?

I mod­sæt­ning til MySQL har MongoDB en helt anden tilgang til lagring af data og fungerer på en do­ku­men­t­o­ri­en­te­ret måde. I stedet for at lagre data i tabelform, hvor hver række har det samme antal felter, der skal udfyldes med værdier, lagrer MongoDB-databaser data i BSON-do­ku­men­ter, der ikke har nogen for­ud­de­fi­ne­ret struktur. Antallet af felter kan variere mellem do­ku­men­ter, og felterne behøver ikke at være kon­si­sten­te med hinanden. Do­ku­men­ter udfylder en rolle, der ligner den, som rækker i en SQL-tabel har, mens de felter, der er defineret i disse do­ku­men­ter, fungerer som kolonner.

Der findes mange værktøjer, som du kan bruge, når du arbejder med MongoDB-databaser. Ud over den på­li­de­li­ge MongoDB Shell kan du også bruge GUI MongoDB Compass til at ad­mi­ni­stre­re MongoDB-databaser. I denne artikel vil vi dog fokusere på Shell-kom­man­do­er.

Da MQL er baseret på Ja­va­Script, findes der allerede en række for­ud­de­fi­ne­re­de funk­tio­ner, som du kan bruge til komplekse fo­re­spørgs­ler og kom­man­do­er. For det meste har alle skrive- og læ­se­kom­man­do­er samme struktur som kom­man­do­er­ne i eksemplet nedenfor. Ud over disse kom­man­do­er findes der mange andre kom­man­do­er, som du kan bruge til at ad­mi­ni­stre­re din MongoDB-database. Disse er udførligt do­ku­men­te­ret og forklaret i detaljer i do­ku­men­ta­tio­nen til MongoDB.

> 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
})

I eksemplet ovenfor er der en række MongoDB-da­ta­ba­se­kom­man­do­er, som alle er struk­tu­re­ret på samme måde. Først er der ‘db’, som henviser til databasen i sin helhed, derefter ‘students’, som henviser til en bestemt samling, hvor de til­sva­ren­de ope­ra­tio­ner skal udføres. Efter samlingen kommer den metode (find, update, remove, insert), der skal bruges.

Du kan bruge find()-metoden til at søge efter et bestemt dokument. Hvis du lader pa­ra­me­ter­fel­tet være tomt, re­tur­ne­res alle do­ku­men­ter i den samling, du har valgt. I eksemplet ovenfor søger MongoDB efter alle do­ku­men­ter, hvor feltet “Navn” har værdien “Charlie”.

Metoden updateOne() kan bruges til at over­skri­ve værdier i et dokument. Metoden update() tager to ar­gu­men­ter. Det første argument er ud­væl­gel­ses­kri­te­ri­et, og det andet er det nøgle-værdipar, der skal over­skri­ves. I eksemplet vælges alle stu­de­ren­de ved navn ‘Charlie’. Værdien ‘2’ indtastes derefter i feltet ‘Semester’ for stu­de­ren­de, der hedder Charlie.

Metoden deleteOne() tager kun ét argument. Dette er det ud­væl­gel­ses­kri­te­ri­um, der bestemmer, hvilke do­ku­men­ter der skal fjernes fra databasen. Her fjernes alle stu­de­ren­de med navnet Peter fra databasen.

Metoden insertOne() tager også et argument. Med denne metode er ar­gu­men­tet JSON-indholdet i det dokument, du vil tilføje. Når du indsætter do­ku­men­ter, er det vigtigt at sikre, at hvert dokument i MongoDB-samlingen har et unikt 12-byte he­xa­de­ci­malt tal. Dette tal fungerer som do­ku­men­tets objekt-ID. Hvis dette ikke er angivet, når do­ku­men­tet indsættes, genererer MongoDB au­to­ma­tisk et ID til do­ku­men­tet.

Hvad er fordelene ved MongoDB?

MongoDB’s struktur tilbyder flere fordele for brugerne, især med hensyn til flek­si­bi­li­tet og ska­ler­bar­hed. En vigtig fordel ved do­ku­ment­ba­se­ret da­ta­lag­ring er, at i mod­sæt­ning til re­la­tio­nel­le databaser behøver ikke alle poster at have de samme at­tri­but­ter. Dette muliggør lagring af ustruk­tu­re­re­de og se­mi­struk­tu­re­re­de data. Derudover kan in­di­vi­du­el­le do­ku­men­ter om­struk­tu­re­res (f.eks. ved at tilføje eller slette en attribut/felt) uden at det er nød­ven­digt at om­struk­tu­re­re andre do­ku­men­ter i samme samling. Da do­ku­men­ter i MongoDB lagres i BSON-format, tilbyder MongoDB-databaser også en høj grad af kom­pa­ti­bi­li­tet med mange al­min­de­ligt anvendte Ja­va­Script-platforme.

Ud over at gemme ustruk­tu­re­re­de data tilbyder MongoDB også en høj grad af ho­ri­son­tal ska­ler­bar­hed uden at stride mod ACID-prin­cip­per­ne (ato­mi­ci­tet, kon­si­stens, isolation, hold­bar­hed). I di­stri­bu­e­re­de databaser kan det ofte være en ud­for­dring at sikre kon­si­stens, fordi data gemmes på for­skel­li­ge servere. Når der foretages ændringer i flere do­ku­men­ter samtidigt, di­stri­bu­e­res disse ændringer muligvis ikke straks til alle de servere, som da­ta­ba­se­sy­ste­met bruger. Hvis der er et stort antal fo­re­spørgs­ler, kan dette un­der­ti­den føre til in­kon­se­kven­te data. Med ud­gi­vel­sen af MongoDB 4.2 i 2019 er det nu muligt at foretage ændringer i flere do­ku­men­ter på for­skel­li­ge servere uden at gå på kompromis med kon­si­sten­sen eller til­gæn­ge­lig­he­den.

Tip

Har du brug for en do­ku­men­t­o­ri­en­te­ret database, der kan skaleres efter kravene i din we­bap­pli­ka­tion? MongoDB er den perfekte løsning!

Hvad kan MongoDB bruges til?

MongoDB er et frem­ra­gen­de valg til webpro­jek­ter, der er afhængige af ekstremt store ustruk­tu­re­re­de datasæt. Arbejdet med et do­ku­ment­ba­se­ret system uden fast skema er ideelt til hånd­te­ring af en bred vifte af datatyper, der kræver hurtig lagring og be­hand­ling.

Da­ta­ba­se­sy­ste­met muliggør også ho­ri­son­tal, næsten ube­græn­set ska­ler­bar­hed, da databaser nemt kan di­stri­bu­e­res på tværs af flere servere uden at gå på kompromis med funk­tio­na­li­te­ten. Desuden kan du med MongoDB nemt oprette kopier af din database og gøre den til­gæn­ge­lig for for­skel­li­ge servere, hvilket sikrer lang­sig­tet sikkerhed og til­gæn­ge­lig­hed af dine data. Det do­ku­men­t­o­ri­en­te­re­de da­ta­ba­se­pro­gram viser også im­po­ne­ren­de evner, når det kommer til at samle data, hvad enten det er fra en enkelt kilde eller fra flere kilder.

MongoDB er ideel til webpro­jek­ter, der har følgende egen­ska­ber:

  • Ska­ler­bar­hed: Når dit webpro­jekt vokser, stiger antallet af an­mod­nin­ger typisk, hvilket re­sul­te­rer i større krav til databasen.
  • Til­gæn­ge­lig­hed: Du har brug for uafbrudt til­gæn­ge­lig­hed til din we­bap­pli­ka­tion, selv i tilfælde af ser­ver­svigt.
  • Flek­si­bi­li­tet: dit projekt skal til enhver tid give mulighed for dynamisk til­pas­ning.

Er du ikke sikker på, hvilken da­ta­ba­se­mo­del der er den rigtige til dit webpro­jekt? Det er okay, for du behøver ikke vælge kun én. Det er muligt at kombinere for­skel­li­ge typer da­ta­ba­se­mo­del­ler, og det kan være det mest passende valg for dit projekts krav at vælge mere end én.

Gå til ho­ved­me­nu­en