MongoDB - LucasReynaert/It-Landscape GitHub Wiki

1. Inleiding tot MongoDB

MongoDB is een database die data opslaat in een flexibel document-gebaseerd formaat (zoals JSON). In de plaats van tabellen gebruikt MongoDB een collectie van documenten, waarin data wordt opgeslagen als sleutel-waardeparen (elke sleutel is gekoppeld aan een specifieke waarde).

1.1 Voordelen van een NoSQL database:

Flexibiliteit: Geen vaste schema's, makkelijk aan te passen

Schaalbaarheid: Werkt heel goed met grote hoeveelheden data (horizontale scaling) afbeelding

Snellere ontwikkeling: Zie flexibiliteit

Snelheid: MongoDB is veel sneller dan een relationele database

1.2 Praktische toepassingen van MongoDB:

Product data management: MongoDB is perfect voor product data management. Het maakt het mogelijk om alle data te beheren in één groot centraal systeem.

FACEIT: Grote gamebedrijven zoals FACEIT gebruiken MongoDB om een goede interactieve service te bieden aan gebruikers.

2. Installatie

A. Instructies voor het starten van een MongoDB container

1. Om te beginnen met de installatie run je dit commando : docker run --name Database -d mongo:tag

  • --name is de naam dat je geeft aan u container
  • mongo:tag is de versie van MongoDB en als je tag weglaat is het automatisch de laatste versie image

2. Na dat kunnen we controleren of MongoDB draait: docker ps image

3. Nu connecteren we met onze nieuwe database: docker exec -it database mongosh image

B. Voorbeelden van docker commando's voor het beheren van een MongoDB container(alles is hoofdletter gevoelig)

1. show dbs: Met dit commando toon je al de bestaande databases

image

2. use test: Met dit commando wissel je data de db test en als die niet bestaat wordt die voor jou aangemaakt

image image

3. db.createCollection("name"): Zo maak je een collectie aan

image

4. db.name.insertone({naam:"Lucas",age:23}): Voeg één document toe

image

5. show collections: laat alle tabellen zien in mijn database

image

6. db.name.find(): toon alle tabellen in name

image

Je kan ook specifiek zoeken door bij find({}) een specifiek veld met en waarde in te geven

image

7. db.name.deleteOne({}): verwijder een waarde uit tabel

image

8. db.name.updateOne({}{$set{}}): update een waarde uit tabel met $set is de waarde die je wil updaten

image

9. db.stats(): toon de statistieken van de huidige database

image

10. db.name.drop(): verwijder de tabel met de naam

image

11. db.dropDatabase(): verwijder de huidige database waarin je zit

image

C. Bijkomstige installaties voor beheer

1. Voor mijn beheer software ga ik mongo express gebruiken u kan dat downloaden met dit commando: docker run -d --name mongo-express --link database:mongo -p 8081:8081 -e ME_CONFIG_MONGODB_SERVER=mongo -e ME_CONFIG_BASICAUTH_USERNAME=admin -e ME_CONFIG_BASICAUTH_PASSWORD=password mongo-express

  • -p 8081:8081: mongo express luistert op poort 8081
  • --link database:mongo: mongo express wordt gelinkt met mijn bestaande database container
  • -e ME_CONFIG_MONGODB_SERVER=mongo -e ME_CONFIG_BASICAUTH_USERNAME=admin -e ME_CONFIG_BASICAUTH_PASSWORD=password: geeft alles mee zoals database username en password

image

2. Na dat te runnen kunnen we via http://localhost:8081/ op onze beheer software met username: admin en password: password image

3. Via de UI kunnen we alles beheren zoals een database toevoegen door vanboven een naam in te geven en op CREATE DATABASE te klikken image

4. Deze kunnen we dan weer verder beheren door op VIEW te klikken en hier kunnen we van alles doen zoals data importeren,exporteren en verwijderen image

5. Hier kunnen we nog eens op VIEW klikken kunnen we data toevoegen,verwijderen en aanpassen image

3. Beheer

1. Back-ups: voor een backup te maken heb je het commando docker exec database mongodump --out /data/backup

  • Waarin database de naam is van de container
  • /data/backup is de map waar de backup komt te staan image

2. Back-up terugzetten: om deze backup dan te gebruiken gebruik je: docker exec -i database mongorestore /data/backup image

3. Schaalbaarheid

Voor schaalbaarheid go ik docker compose gebruiken met deze docker-compose file: version: services: mongo1: hostname: mongo1 container_name: mongo1 image: mongo:latest ports: - "27017:27017" volumes: - mongo_data1:/data/db command: ["mongod", "--replSet", "rs0", "--dbpath", "/data/db"] networks: - mongo-network mongo2: hostname: mongo2 container_name: mongo2 image: mongo:latest ports: - "27018:27017" volumes: - mongo_data2:/data/db command: ["mongod", "--replSet", "rs0", "--dbpath", "/data/db"] networks: - mongo-network mongo3: hostname: mongo3 container_name: mongo3 image: mongo:latest ports: - "27019:27017" volumes: - mongo_data3:/data/db command: ["mongod", "--replSet", "rs0", "--dbpath", "/data/db"] networks: - mongo-network volumes: mongo_data1: mongo_data2: mongo_data3: networks: mongo-network: driver: bridge bron:(https://codezup.com/mongodb-docker-scalable-cluster-deployment-guide/) Na deze file te runnen met docker compose up heb ik 3 mongoDB containers runnen.

image

Nu maken we een replica set(een groep van containers die samen een cluster vormen) door in één van onze mongoDB containers te gaan. Met: rs.initiate({ "_id" : "rs0", "members" : [ { "_id": 0, "host": "mongo1:27017" }, { "_id": 1, "host": "mongo2:27017" }, { "_id": 2, "host": "mongo3:27017" } ] }) En nu hebben we een cluster van mongoDB containers.

image

Het voordeel van een cluster is dat je al u data verspreid over meerdere servers en een hoge beschikbaarheid hebt(als een server uitvalt neemt de andere het over).

4. Volumes Om te beginnen met volumes maken we er eerst één aan met docker volume create mongo-VOL

image

En nu koppelen we een MongoDB container met onze volume met docker run -d --name mongoVOL -v mongo-VOL:/data/db mongo

  • -v mongo-data:/data/db koppelt het volume mongo-VOL aan de container in map /data/db image

Nu blijft mijn data op dat volume staan zelfs verwijder ik mijn container.

⚠️ **GitHub.com Fallback** ⚠️