# 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 - Skalerbarhed: - Let at skalere horisontalt ved at tilføje flere servere - Ydeevne: - Hurtig læse- og skriveadgang til dokumenter - Naturlig datarepræsentation: - Data kan repræsenteres på en måde, der er tættere på den måde applikationen bruger den på - Understøttelse af komplekse data: - Kan håndtere komplekse og hierarkiske datastrukturer ---- ### Ulemper ved Document Databaser - Manglende ACID-egenskaber: - Mange document databaser tilbyder ikke fuld ACID-kompatibilitet, hvilket kan være en ulempe for visse applikationer - Kompleks forespørgselssprog: - Forespørgselssprogene kan være mindre kraftfulde end SQL - Dataredundans: - Kan føre til datadubletter og inkonsistens, hvis ikke håndteret korrekt - Manglende standardisering: - Forskellige document databaser kan have forskellige funktioner og begrænsninger ---- ### 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 - og mange andre, [https://db-engines.com/en/ranking/document+store](https://db-engines.com/en/ranking/document+store) ---- #### C# supporterede Document Databaser - MongoDB - [https://www.mongodb.com/docs/drivers/](https://www.mongodb.com/docs/drivers/) - CouchDB - [https://github.com/danielwertheim/mycouch/wiki?ref=danielwertheim.se](https://github.com/danielwertheim/mycouch/wiki?ref=danielwertheim.se) - Amazon DocumentDB - [https://aws.amazon.com/sdk-for-net/](https://aws.amazon.com/sdk-for-net/) - Firebase Firestore - Ikke direkte supportet [https://firebase.google.com/docs/firestore](https://firebase.google.com/docs/firestore) - RavenDB - [https://ravendb.net/articles/connecting-c-application-to-ravendb-cloud](https://ravendb.net/articles/connecting-c-application-to-ravendb-cloud) ---- ### 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
- E.F. Codd 1970: https://thomaslanger.dk/relationsmodellen/ ---- ### Filosofisk forskel - RDBMS bygger på faste strukturer og relationer - relationer og normalisering sikrer konsistens - Document DB bygger på fleksibilitet og hastighed i udvikling - strukturen formes efter applikationens brugsscenarier - 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 - Availability: systemet svarer altid - Partition tolerance: systemet overlever netværksnedbrud - 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-persistence
1
: 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 - Skalerbarhed: - Understøtter horisontal skalering gennem sharding, hvilket gør det muligt at håndtere store datamængder og høj trafik - Replikation: - Understøtter replikasæt for høj tilgængelighed og databeskyttelse - Avancerede forespørgsler: - Understøtter komplekse forespørgsler, aggregeringer og indeksering - Indbygget understøttelse af geospatial data: - Gør det muligt at gemme og forespørge geospatial data effektivt - Fleksibelt skema: - Tillader ændringer i dokumentstrukturen uden at skulle ændre hele databasen ---- ### 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) - 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 ---- ### 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/](https://www.mongodb.com/docs/drivers/csharp/current/) --- ### Opgave [https://ucl.kjc.dk/dfu/dfu-exercises-other-databases.html](/dfu/dfu-exercises-other-databases.html)