Re­la­tio­nel­la databaser var under flera decennier den själv­kla­ra lösningen för da­ta­han­te­ring. Men den växande da­ta­mäng­den och mång­fal­den som kän­ne­teck­nar moderna web­bap­pli­ka­tio­ner har gjort do­ku­men­t­o­ri­en­te­ra­de databaser som Mongo DB till ett all­var­ligt al­ter­na­tiv. Vi förklarar vad det do­ku­men­t­o­ri­en­te­ra­de till­vä­ga­gångs­sät­tet innebär och vilka fördelar denna da­ta­han­te­rings­mo­dell erbjuder.

Hur skiljer sig MongoDB från andra databaser?

I tra­di­tio­nel­la re­la­tions­da­ta­ba­ser lagras data i en struk­tu­re­rad tabell. MongoDB, vars namn här­stam­mar från ordet humongous(enorm), är ett do­ku­men­t­o­ri­en­te­rat da­ta­bas­sy­stem. I MongoDB grupperas data på ett ostruk­tu­re­rat sätt i vad da­ta­bas­pro­gram­met kallar samlingar.

En annan viktig skillnad är att MongoDB inte använder SQL som frå­ge­språk och därför ka­te­go­ri­se­ras som ett NoSQL-da­ta­bas­sy­stem. Istället använder MongoDB det Ja­va­Script-baserade MongoDB Query Language (MQL) som sitt frå­ge­språk. Följakt­li­gen lagras MongoDB-poster i BSON-format, som är mo­del­le­rat efter JSON. Detta innebär att alla Ja­va­Script-datatyper stöds, vilket är an­led­ning­en till att MongoDB har blivit det idealiska valet för många Ja­va­Script-baserade platt­for­mar.

En annan egenskap hos MongoDB-databaser är deras förmåga att skalas ho­ri­son­tellt. Det innebär att data i en databas kan spridas över flera servrar istället för att lagras på en central plats. Denna metod ökar da­ta­till­gäng­lig­he­ten och för­bätt­rar da­ta­ba­sens totala prestanda. Ho­ri­son­tell skalning är ofta mer kost­nads­ef­fek­tivt än att upp­gra­de­ra en enskild server med kraft­ful­la­re hårdvara (vertikal skalning).

Hur fungerar MongoDB?

Till skillnad från MySQL har MongoDB en helt annan strategi för lagring av data och fungerar på ett do­ku­men­t­o­ri­en­te­rat sätt. Istället för att lagra data i ta­bell­form, där varje rad har samma antal fält som måste fyllas med värden, lagrar MongoDB-databaser data i BSON-dokument som inte har någon för­de­fi­ni­e­rad struktur. Antalet fält kan variera mellan do­ku­men­ten, och fälten behöver inte vara kon­si­sten­ta med varandra. Do­ku­men­ten fyller en liknande funktion som raderna i en SQL-tabell, medan de fält som har de­fi­ni­e­rats i dessa dokument fungerar som kolumner.

Det finns många verktyg som du kan använda när du arbetar med MongoDB-databaser. Förutom det pålitliga MongoDB Shell kan du också använda GUI MongoDB Compass för att hantera MongoDB-databaser. I den här artikeln kommer vi dock att fokusera på Shell-kommandon.

Eftersom MQL är baserat på Ja­va­Script finns det redan en rad för­de­fi­ni­e­ra­de funk­tio­ner som du kan använda för komplexa frågor och kommandon. I de flesta fall har alla skriv- och läs­kom­man­don samma struktur som kom­man­do­na i exemplet nedan. Utöver dessa kommandon finns det många andra kommandon som du kan använda för att hantera din MongoDB-databas. Dessa do­ku­men­te­ras utförligt och förklaras i detalj i do­ku­men­ta­tio­nen för 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 exemplet ovan finns en serie MongoDB-da­ta­bas­befall­ning­ar, som alla är struk­tu­re­ra­de på samma sätt. Först finns “db”, som hänvisar till databasen i sin helhet, sedan “students”, som hänvisar till en specifik samling, där mot­sva­ran­de ope­ra­tio­ner ska utföras. Efter samlingen kommer metoden (find, update, remove, insert) som ska användas.

Du kan använda metoden find() för att söka efter ett specifikt dokument. Om du lämnar pa­ra­me­ter­fäl­tet tomt kommer alla dokument i den valda samlingen att re­tur­ne­ras. I exemplet ovan söker MongoDB efter alla dokument där fältet “Name” har värdet “Charlie”.

Metoden updateOne() kan användas för att skriva över värden i ett dokument. Metoden update() tar två argument. Det första ar­gu­men­tet är ur­valskri­te­ri­er­na och det andra är det nyckel-värdepar som ska skrivas över. I exemplet väljs alla studenter som heter “Charlie”. Värdet “2” matas sedan in i fältet “Semester” för studenter som heter Charlie.

Metoden deleteOne() tar endast ett argument. Detta är ur­valskri­te­ri­et som avgör vilka dokument som ska tas bort från databasen. Här tas alla studenter med namnet Peter bort från databasen.

Metoden insertOne() tar också ett argument. Med denna metod är ar­gu­men­tet JSON-in­ne­hål­let i det dokument som du vill lägga till. När du infogar dokument är det viktigt att se till att varje dokument i MongoDB-samlingen har ett unikt 12-bytes hex­a­de­ci­malt nummer. Detta nummer fungerar som do­ku­men­tets objekt-ID. Om detta inte anges när do­ku­men­tet infogas kommer MongoDB au­to­ma­tiskt att generera ett ID för do­ku­men­tet.

Vilka är för­de­lar­na med MongoDB?

MongoDB:s struktur erbjuder flera fördelar för an­vän­dar­na, särskilt när det gäller flex­i­bi­li­tet och skal­bar­het. En viktig fördel med do­ku­ment­ba­se­rad da­ta­lag­ring är att, till skillnad från re­la­tions­da­ta­ba­ser, inte alla poster behöver ha samma attribut. Detta möjliggör lagring av ostruk­tu­re­ra­de och se­mi­struk­tu­re­ra­de data. Dessutom kan enskilda dokument om­struk­tu­re­ras (till exempel genom att lägga till eller ta bort ett attribut/fält) utan att andra dokument i samma samling behöver om­struk­tu­re­ras. Eftersom dokument i MongoDB lagras i BSON-format erbjuder MongoDB-databaser också en hög grad av kom­pa­ti­bi­li­tet med många vanliga Ja­va­Script-platt­for­mar.

Förutom att lagra ostruk­tu­re­ra­de data erbjuder MongoDB också en hög grad av ho­ri­son­tell skal­bar­het utan att bryta mot ACID-prin­ci­per­na (ato­mi­ci­tet, kon­si­stens, isolering, håll­bar­het). I dis­tri­bu­e­ra­de databaser kan det ofta vara en utmaning att sä­ker­stäl­la kon­si­stens, eftersom data lagras på olika servrar. När ändringar görs i flera dokument samtidigt dis­tri­bue­ras dessa ändringar kanske inte ome­del­bart till alla servrar som da­ta­bas­sy­ste­met använder. Om det finns en stor volym av frågor kan detta ibland leda till in­kon­se­kven­ta data. Men med lan­se­ring­en av MongoDB 4.2 år 2019 är det nu möjligt att göra ändringar i flera dokument på olika servrar utan att offra kon­si­stens eller till­gäng­lig­het.

Vad kan MongoDB användas till?

MongoDB är ett utmärkt val för webb­pro­jekt som bygger på extremt stora ostruk­tu­re­ra­de da­ta­mäng­der. Att arbeta med ett do­ku­ment­ba­se­rat system utan fast schema är idealiskt för hantering av en rad olika datatyper som kräver snabb lagring och be­ar­bet­ning.

Da­ta­bas­sy­ste­met möjliggör också ho­ri­son­tell, nästan obe­grän­sad skal­bar­het, eftersom databaser enkelt kan dis­tri­bue­ras över flera servrar utan att funk­tio­na­li­te­ten påverkas. Med MongoDB kan du dessutom enkelt skapa kopior av din databas och göra den till­gäng­lig för olika servrar, vilket ga­ran­te­rar lång­sik­tig säkerhet och till­gäng­lig­het för dina data. Det do­ku­men­t­o­ri­en­te­ra­de da­ta­bas­pro­gram­met har också im­po­ne­ran­de funk­tio­ner när det gäller att aggregera data, vare sig det är från en enda källa eller från flera källor.

MongoDB är idealiskt för webb­pro­jekt som uppvisar följande egen­ska­per:

  • Skal­bar­het: när ditt webb­pro­jekt växer ökar van­ligt­vis antalet för­fråg­ning­ar, vilket leder till högre krav på databasen.
  • Till­gäng­lig­het: du behöver oavbruten till­gäng­lig­het för din web­bap­pli­ka­tion, även i händelse av serverfel.
  • Flex­i­bi­li­tet: ditt projekt bör möj­lig­gö­ra dynamisk an­pass­ning vid alla till­fäl­len.

Är du osäker på vilken da­ta­bas­mo­dell som är rätt för ditt webb­pro­jekt? Det gör inget, för du behöver inte välja bara en. Det går att kombinera olika typer av da­ta­bas­mo­del­ler, och att välja mer än en kan vara det bästa al­ter­na­ti­vet för ditt projekts krav.

Gå till huvudmeny