Mongodb

adam@tech-pa-landet: ~

adam@root:~$ whoami

Adam Halvars

adam@root:~$ ./get_status.sh

> IT-entusiast
> Linux
> Homelab-byggare
> Proxmox
> Bash-skribent
> Tech-bloggare
> Allt från landet!

adam@root:~$ ./get_info.sh

adam@root:~$ ./get_links.sh

Root
Linkedin
Blogg
Kontakt

adam@root:~$  

Mongodb

Mongodb är en populär NoSQL-databas som används för att lagra och hantera stora mängder strukturerad data. Den är känd för sin flexibilitet och skalbarhet.

Mongodb använder en dokumentorienterad datamodell där data lagras i JSON-liknande format, vilket gör det enkelt att hantera komplexa datastrukturer och anpassa sig till förändrade krav. Det är också designat för att vara skalbart och kan hantera stora datamängder genom att distribuera data över flera servrar i ett kluster.


Jämför Mongodb med Microsoft SQL Server

MongoDB är en NoSQL-databas medan MSSQL är en relationsdatabas, vilket är den grundläggande skillnaden mellan dem. MongoDB lagrar data i dokumentformat (JSON-liknande), medan MSSQL använder tabeller med rader och kolumner. MongoDB är schemaflexibel och tillåter olika dokumentstrukturer, men MSSQL kräver ett definierat schema innan data lagras. MSSQL är bättre för data med relationer och komplexa transaktioner, medan MongoDB är mer lämpligt för ostrukturerad eller semi-strukturerad data. MongoDB skalas horisontellt genom sharding, medan MSSQL traditionellt skalas vertikalt. MSSQL har kraftfulla rapporterings- och analysverktyg, medan MongoDB kräver mer manuell bearbetning. MongoDB är öppen källkod, medan MSSQL är en kommersiell produkt från Microsoft. Valet mellan dem beror på ditt projekts behov av flexibilitet, skalbarhet och datastruktur.

Fördelar med Mongodb:

  • Flexibel datamodell: Mongodb använder en dokumentorienterad datamodell som gör det enkelt att lagra och hantera komplexa datastrukturer.
  • Skalbarhet: Mongodb är designad för att hantera stora datamängder och kan skalas horisontellt genom att lägga till fler servrar i klustret.
  • Hög prestanda: Mongodb är optimerad för att ge snabb läs- och skrivprestanda, vilket gör den lämplig för applikationer som kräver snabb dataåtkomst.
  • Stöd för geospatiala data: Mongodb har inbyggt stöd för geospatiala data, vilket gör det möjligt att lagra och fråga geografiska data på ett effektivt sätt.
  • Stort ekosystem: Mongodb har ett stort ekosystem av verktyg och bibliotek som gör det enkelt att integrera med olika programmeringsspråk och ramverk.


Nackdelar med Mongodb:

  • Begränsad transaktionsstöd: Mongodb har begränsat stöd för transaktioner, vilket kan vara en nackdel för applikationer som kräver komplexa transaktioner över flera dokument.
  • Hög minnesanvändning: Mongodb kan använda mycket minne, särskilt när det hanterar stora datamängder eller komplexa frågor, vilket kan påverka prestandan negativt.
  • Inga relationer: Mongodb saknar inbyggt stöd för relationer mellan dokument, vilket kan göra det svårt att modellera vissa typer av data och kan leda till dataduplicering.
  • Begränsad rapportering och analys: Mongodb har begränsade möjligheter för rapportering och analys jämfört med traditionella relationsdatabaser, vilket kan vara en nackdel för applikationer som kräver avancerade analysverktyg.
  • Licensiering: Mongodb har en kommersiell licensmodell som kan vara kostsam för vissa användare, särskilt för företag som behöver använda Mongodb i stor skala eller som kräver support och underhåll från MongoDB Inc.

MongoDB Shell

MongoDB Shell är ett interaktivt verktyg för att kommunicera med MongoDB-servern. Det låter dig köra frågor, uppdatera data och administrera databasen direkt från kommandoraden. Mongosh är den moderna ersättningen för det äldre mongo-skalet och erbjuder bättre syntax och förbesseringar.


Populära MongoDB Plugins och Verktyg:

  • Mongosh: Den moderna MongoDB Shell som erbjuder förbättrad syntax, bättre felmeddelanden och avancerade funktioner för att hantera MongoDB från kommandoraden.
  • MongoDB Compass: En grafisk användargränssnitt för att visualisera och hantera MongoDB-data. Det gör det enkelt att bläddra i dokument, skapa frågor och övervaka prestanda utan att använda kommandoraden.
  • MongoDB Atlas: En molnbaserad databastjänst som erbjuder automatisk backup, skalning och övervakning. Det är perfekt för utvecklare som vill fokusera på koden istället för infrastruktur.
  • Mongoose: Ett populärt Node.js-bibliotek som tillhandahåller en Object Document Mapper (ODM) för MongoDB. Det gör det enkelt att definiera scheman och validera data.
  • MongoDB Realm: En plattform för att bygga serverless applikationer med MongoDB som backend. Det erbjuder autentisering, synkronisering och dataåtkomst trygg.
  • Aggregation Framework: Ett kraftfullt verktyg för komplexa dataaggregationer och transformationer, perfekt för rapportering och dataanalys.

MongoDB för nybörjare - LEGO-analogi

📦 En vanlig databas

I många databaser måste alla LEGO-byggen se nästan likadana ut. Till exempel måste alla hus ha exakt 1 dörr, 4 fönster och 1 tak. Om du vill göra ett hus med 10 fönster eller ett torn, säger databasen: "Nej! Det passar inte i reglerna." 😅

🍃 MongoDB

MongoDB är en databas som är mycket friare. Istället för att tvinga alla byggen att vara likadana, säger MongoDB: "Bygg hur du vill! Bara du lägger allt i lådan."

Så i MongoDB kan du spara saker som:

De behöver inte ha exakt samma saker sparade.

📄 Hur MongoDB sparar saker

MongoDB sparar information som små dokument (lite som papper eller kort). Många dokument samlas i en samling (collection).

🧠 Superkort sammanfattning

MongoDB är en plats där datorer sparar information som dokument, och den låter varje dokument vara lite olika från varandra.


Läs mer om Mongodb på deras officiella webbplats

Användare och Grupper i MongoDB

MongoDB har ett inbyggt autentiserings- och auktoriseringssystem för att säkra din databas. Du kan skapa användare med olika behörigheter för att kontrollera vem som får göra vad.


Exempel: Skapa användare och roller

Skapa en användare med läsbehörighet:

db.createUser({ user: "läsare", pwd: "lösenord123", roles: ["read"] })

Skapa en användare med läs- och skrivbehörighet:

db.createUser({ user: "utvecklare", pwd: "lösenord456", roles: ["readWrite"] })

Skapa en grupp och lägg till användare:

db.createRole({ role: "designer_roll", privileges: [ { resource: { db: "min_databas", collection: "bilder" }, actions: ["read", "write", "insert"] } ], roles: [] })

Viktigt: Användare och Grupper i Cluster

Om du använder MongoDB Cluster (Replica Set), måste du skapa användare och grupper i admin-databasen istället för en vanlig databas. Det är därför att admin-databasen är global och tillgänglig för alla noder i klustret.

use admin db.createUser({ user: "admin_användare", pwd: "starkt_lösenord", roles: ["root"] })

Genom att skapa användare i admin-databasen säkerställer du att alla servrar i klustret känner till och kan autentisera användaren.

Ge en användare en anpassad roll:

db.grantRolesToUser("utvecklare", ["designer_roll"])

Single vs Cluster i MongoDB

Single (Standalone): En enda MongoDB-server som innehåller all data. Det är enkelt att sätta upp men har begränsad skalbarhet och ingen automatisk redundans. Om servern går ner, förlorar du åtkomsten till din data.

Cluster (Replica Set): Flera MongoDB-servrar som jobbar tillsammans. En server är primär (får skrivningar) och andra är sekundära (backup). Om den primära servern går ner, tar en sekundär över automatiskt. Det är säkrare och mer pålitligt för produktionsmiljöer.

Sharding: En avancerad form av clustering där data delas upp över flera servrar baserat på en nyckel. Det möjliggör horisontell skalning för mycket stora datamängder.


Jämförelsetabell: Single vs Cluster vs Sharding

Egenskap Single (Standalone) Cluster (Replica Set) Sharding
Antal servrar 1 server Flera servrar (3-7) Många servrar (10+)
Redundans Ingen Automatisk failover Automatisk failover
Datadistribution All data på en server Samma data på alla servrar Data uppdelad över servrar
Skalbarhet Begränsad (vertikal) Begränsad (vertikal) Utmärkt (horisontell)
Prestation Snabb för små mängder Läsning sprids ut Läsning och skrivning spreads
Komplexitet Enkel att sätta upp Medel Mycket komplex
Bäst för Utveckling och test Produktion med hög tillgänglighet Mycket stora datamängder
⬅ Tillbaka