MongoDB - LucasReynaert/It-Landscape GitHub Wiki
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)
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.
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
2. Na dat kunnen we controleren of MongoDB draait: docker ps
3. Nu connecteren we met onze nieuwe database: docker exec -it database mongosh
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
2. use test
: Met dit commando wissel je data de db test en als die niet bestaat wordt die voor jou aangemaakt
3. db.createCollection("name")
: Zo maak je een collectie aan
4. db.name.insertone({naam:"Lucas",age:23})
: Voeg één document toe
5. show collections
: laat alle tabellen zien in mijn database
6. db.name.find()
: toon alle tabellen in name
Je kan ook specifiek zoeken door bij find({}) een specifiek veld met en waarde in te geven
7. db.name.deleteOne({})
: verwijder een waarde uit tabel
8. db.name.updateOne({}{$set{}})
: update een waarde uit tabel met $set is de waarde die je wil updaten
9. db.stats()
: toon de statistieken van de huidige database
10. db.name.drop()
: verwijder de tabel met de naam
11. db.dropDatabase()
: verwijder de huidige database waarin je zit
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
2. Na dat te runnen kunnen we via http://localhost:8081/ op onze beheer software met username: admin en password: password
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
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
5. Hier kunnen we nog eens op VIEW klikken kunnen we data toevoegen,verwijderen en aanpassen
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
2. Back-up terugzetten: om deze backup dan te gebruiken gebruik je: docker exec -i database mongorestore /data/backup
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.
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.
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
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
Nu blijft mijn data op dat volume staan zelfs verwijder ik mijn container.