Skip to content

DFU 09

Document Database

Document Databaser

Hvad er en Document Database?

  • En document Datase er en database der ...
    • er i kategorien NoSQL databaser
    • gemmer data i form af dokumenter
    • typisk bruger formater som JSON, BSON eller XML
    • organiserer data som selvstændige enheder i stedet for tabeller
    • er mere fleksible og skalerbare end traditionelle relationelle databaser

Fordele ved Document Databaser

  • Fleksibilitet:
- Skema-fri struktur, hvilket gør det nemt at ændre data uden at skulle ændre hele databasen
<!-- .element class="fragment" -->
  • Skalerbarhed:
- Let at skalere horisontalt ved at tilføje flere servere
<!-- .element class="fragment" -->
  • Ydeevne:
- Hurtig læse- og skriveadgang til dokumenter
<!-- .element class="fragment" -->
  • Naturlig datarepræsentation:
- Data kan repræsenteres på en måde, der er tættere på den måde applikationen bruger den på
<!-- .element class="fragment" -->
  • Understøttelse af komplekse data:
- Kan håndtere komplekse og hierarkiske datastrukturer
<!-- .element class="fragment" -->

Ulemper ved Document Databaser

  • Manglende ACID-egenskaber:
- Mange document databaser tilbyder ikke fuld ACID-kompatibilitet, hvilket kan være en ulempe for visse applikationer
<!-- .element class="fragment" -->
  • Kompleks forespørgselssprog:
- Forespørgselssprogene kan være mindre kraftfulde end SQL
<!-- .element class="fragment" -->
  • Dataredundans:
- Kan føre til datadubletter og inkonsistens, hvis ikke håndteret korrekt
<!-- .element class="fragment" -->
  • Manglende standardisering:
- Forskellige document databaser kan have forskellige funktioner og begrænsninger
<!-- .element class="fragment" -->

Populære Document Databaser

  • MongoDB - En af de mest populære document databaser, kendt for sin fleksibilitet og skalerbarhed
  • CouchDB - En open-source document database, der bruger JSON til dokumenter og javascript til forespørgsler
  • Amazon DocumentDB - En fuldt administreret document database service, der er kompatibel med MongoDB
  • Firebase Firestore - En cloud-baseret document database, der er en del af Googles Firebase platform
  • RavenDB - En open-source document database, der fokuserer på ydeevne og brugervenlighed

C# supporterede Document Databaser

Anvendelsesområder for Document Databaser

  • Content Management Systems (CMS)
  • E-commerce platforms
  • Real-time analytics
  • Mobile applications
  • Internet of Things (IoT) applications
  • Social media applications
  • og mange andre

Relational vs Document DB

Grundlæggende paradigmer

Relationelle databaser

  • Strukturerede data i tabeller, rækker og kolonner
  • Skema er defineret på forhånd (schema-on-write)
  • Baseret på relationsmodellen (E.F. Codd, 1970)
  • ACID-egenskaber

Document Databaser

  • Dokumentorienteret struktur (JSON/BSON/XML)
  • Fleksibelt skema (schema-on-read)
  • Ingen faste relationer - indlejrede eller referencebaserede dokumenter
  • Ofte BASE egenskaber

Filosofisk forskel

  • RDBMS bygger på faste strukturer og relationer
- relationer og normalisering sikrer konsistens
<!-- .element class="fragment" -->
  • Document DB bygger på fleksibilitet og hastighed i udvikling
- strukturen formes efter applikationens brugsscenarier
<!-- .element class="fragment" -->
  • SQL optimerer for forudsigelige data og transaktioner
  • MongoDB optimerer for ændringshastighed

Datamodel

Relationelle databaser

  • Entiteter og relationer (1-1, 1-n, n-m)
  • Normalisering reducerer redundans
  • Fremmednøgler håndhæver referentiel integritet
  • Velegnet til komplekse sammenhænge

Document databaser

  • Dokumenter kan indeholde underobjekter og arrays
  • Relationer håndteres ofte med indlejring fremfor for joins
  • Duplikerede data kan accepteres for performance
  • Velegnet til agile og uforudsigelige datastrukturer

Skema og ændringer

Relationelle databaser

  • Ændring af skema kræver migration og versionering
  • Passer til stabile datamodeller
  • Høj sikkerhed for dataintegritet

Document databaser

  • Felter kan tilføjes/fjernes uden at påvirke eksisterende data
  • Passer til prototyper og hurtigt skiftende datasæt
  • Risiko for uens datatyper og manglende validering, hvis ikke kontrolleret

Konsistens og transaktioner

Relationelle databaser

  • ACID-transaktioner på tværs af tabeller
  • Ensartede data på alle tidspunkter
  • Kræver ofte stærk konsistens

Document databaser

  • Støtter i dag multidokument-transaktioner, men med performance omkostninger
  • Eventual konsistens i distribuerede systemer
  • Høj tilgængelighed prioriteres over øjeblikkelig konsistens (CAP-teoremet)

CAP-teoremet

Consistency, Availability, Partition tolerance

  • Et distribueret system kan kun garantere to af følgende tre egenskaber samtidigt
- Consistency: alle noder ser de samme data
<!-- .element class="fragment" -->
- Availability: systemet svarer altid
<!-- .element class="fragment" -->
- Partition tolerance: systemet overlever netværksnedbrud
<!-- .element class="fragment" -->
  • RDBMS: vælger oftest Consistency + Availability
  • Document DB: vælger ofte Availability + Partition tolerance

Ydeevne og skalerbarhed

Relationelle databaser

  • Vertikal skalering (stærkere hardware)
  • Komplekse joins og indekser kan blive tunge
  • God til transaktionsintensive applikationer

Document databaser

  • Horisontal skalering (flere noder / sharding)
  • Hurtig ved store mængder semi-strukturerede data
  • Velegnet til big data og real-time applikationer

Brugsscenarier

Vælg RDBMS når

  • Data er stærkt strukturerede
  • Relationer og integritet er vigtigt
  • Transaktioner er centrale (bank, finans, ERP)
  • Du har behov for komplekse queries og joins

Vælg Document DB når

  • Datamodel ændrer sig ofte
  • Hurtig udvikling og iteration prioriteres
  • Der er store mængder dokument-lignende data (JSON, logs, IoT, analytics)
  • Systemet skal skaleres horisontalt

Hybrid tilgange

  • Mange moderne systemer bruger begge typer databaser
    • Polyglot-persistence1: brug den rigtige database til den rigtige opgave
  • Eksempel:
    • Transaktionel data i RDBMS
    • Produktkataloger i Document DB
    • Logs i time-series database
    • Caching i in-memory database
  • Dette giver fleksibilitet og optimering for forskellige datatyper og adgangsmønstre

--

  1. Polyglot - betyder "mange sprog" og refererer til brugen af flere forskellige teknologier eller databaser i et enkelt system for at udnytte deres respektive styrker.

MongoDB

Hvad er MongoDB?

  • MongoDB er (som på tidligere slide) en populær open-source document database, der gemmer data i fleksible, JSON-lignende dokumenter
  • MongoDB er designet til at håndtere store mængder data og er kendt for sin skalerbarhed, ydeevne og fleksibilitet
  • MongoDB understøtter en bred vifte af funktioner, herunder replikation, sharding og avancerede forespørgsler

Nøglefunktioner i MongoDB

  • Dokumentorienteret lagring:
- Data gemmes i fleksible, JSON-lignende dokumenter (faktisk BSON), hvilket gør det nemt at repræsentere komplekse datastrukturer
<!-- .element class="fragment" -->
  • Skalerbarhed:
- Understøtter horisontal skalering gennem sharding, hvilket gør det muligt at håndtere store datamængder og høj trafik
<!-- .element class="fragment" -->
  • Replikation:
- Understøtter replikasæt for høj tilgængelighed og databeskyttelse
<!-- .element class="fragment" -->
  • Avancerede forespørgsler:
- Understøtter komplekse forespørgsler, aggregeringer og indeksering
<!-- .element class="fragment" -->
  • Indbygget understøttelse af geospatial data:
- Gør det muligt at gemme og forespørge geospatial data effektivt
<!-- .element class="fragment" -->
  • Fleksibelt skema:
- Tillader ændringer i dokumentstrukturen uden at skulle ændre hele databasen
<!-- .element class="fragment" -->

Anvendelsesområder for MongoDB

  • Content Management Systems (CMS)
  • E-commerce platforms
  • Real-time analytics
  • Mobile applications
  • Internet of Things (IoT) applications
  • Social media applications
  • og mange andre

Brug af MongoDB

Mongo Clients

  • Mongo Express: Et webbaseret administrationsværktøj til MongoDB, der giver en brugervenlig grænseflade til at administrere og interagere med dine MongoDB-databaser
  • Robo 3T: En populær GUI-klient til MongoDB, der tilbyder en intuitiv grænseflade til at udføre forespørgsler, administrere databaser og visualisere data
  • Studio 3T: En avanceret MongoDB-klient med funktioner som visuel forespørgselsbygger, dataimport/eksport og SQL-til-MongoDB

MongoDB Hosting

  • MongoDB Atlas: En fuldt administreret cloud-database service, der tilbyder automatiseret infrastruktur, sikkerhed og skalerbarhed
- [https://www.mongodb.com/cloud/atlas](https://www.mongodb.com/cloud/atlas)
<!-- .element class="fragment" -->
  • Self hosted: Du kan også vælge at hoste din egen MongoDB-server på dine egne servere eller virtuelle maskiner
- Lad dig endelig inspirere af docker compose udleveret
<!-- .element class="fragment" -->

MongoDB Atlas Fordele/ulemper

Fordele

  • Fuldt administreret service, hvilket reducerer den administrative byrde
  • Skalerbarhed: Nem at skalere op eller ned baseret på behov
  • Høj tilgængelighed med automatiserede backups og replikasæt

Ulemper

  • Omkostninger: Kan være dyrere end self-hosting, især ved store datamængder
  • Mindre kontrol over infrastrukturen sammenlignet med self-hosting
  • Afhængighed af en tredjepartsudbyder for ydeevne og tilgængelighed

MongoDB Self hosted Fordele/ulemper

Fordele

  • Fuld kontrol over infrastrukturen og konfigurationen
  • Potentielt lavere omkostninger ved store datamængder
  • Mulighed for at tilpasse sikkerhedsforanstaltninger og netværksopsætning

Ulemper

  • Kræver mere administrativ indsats for vedligeholdelse og opdateringer
  • Skalering kan være mere kompleks og tidskrævende
  • Risiko for nedetid og datatab, hvis ikke korrekt administreret

MongoDB C# Driver

  • MongoDB C# Driver er et officielt bibliotek, der gør det muligt for C#-udviklere at interagere med MongoDB-databaser
  • Driveren tilbyder en række funktioner, herunder CRUD-operationer, aggregeringer, indeksering og transaktioner

https://www.mongodb.com/docs/drivers/csharp/current/

Opgave

https://ucl.kjc.dk/dfu/dfu-exercises-other-databases.html