15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen
01.11.2024
2 +1

Vollständiger Leitfaden zu MongoDB: Installation, Funktionen & Best Practices auf einem VPS

MongoDB ist eine der leistungsstärksten und am weitesten verbreiteten NoSQL-Datenbanken der Welt – und das aus gutem Grund. Seine flexible, dokumentorientierte Architektur macht es zur ersten Wahl für Entwickler, die moderne, datenintensive Anwendungen erstellen, die schnell skalieren müssen. Egal ob Sie ein Startup-MVP betreiben oder eine unternehmensweite Infrastruktur verwalten – MongoDB in Kombination mit einer hochperformanten Hosting-Umgebung bietet Ihnen die Geschwindigkeit, Flexibilität und Zuverlässigkeit, die Ihre Anwendungen benötigen.

In diesem umfassenden Leitfaden erfahren Sie, was MongoDB ist, warum es sich von traditionellen relationalen Datenbanken unterscheidet, wie Sie es auf Ubuntu installieren und wie Sie wichtige Operationen mit der MongoDB-Shell durchführen.

Was ist MongoDB und warum sollten Sie es verwenden?

MongoDB ist eine Open-Source-, dokumentorientierte NoSQL-Datenbank, die Daten in flexiblen, JSON-ähnlichen Dokumenten namens BSON (Binary JSON) speichert. Im Gegensatz zu traditionellen relationalen Datenbanken, die auf starren Tabellen-Zeilen-Spalten-Strukturen basieren, ermöglicht MongoDB jedem Dokument in einer Sammlung eine eigene, einzigartige Struktur. Dies macht es außergewöhnlich gut geeignet für Anwendungen mit sich entwickelnden oder unvorhersehbaren Datenmodellen.

Wichtigste Vorteile von MongoDB gegenüber traditionellen SQL-Datenbanken

FunktionMongoDB (NoSQL)Traditionelles SQL
DatenmodellFlexible Dokumente (BSON)Festes Schema (Tabellen/Zeilen)
SkalierbarkeitHorizontal (Sharding)Hauptsächlich vertikal
SchemaänderungenSchemalos, dynamischErfordert Migrationen
AbfragespracheUmfangreiches MQL + AggregationSQL
Am besten geeignet fürDynamische, unstrukturierte DatenStrukturierte, relationale Daten
Leistung bei SkalierungAusgezeichnet mit ShardingKann ohne Optimierung abnehmen

MongoDB ist ideal für eine breite Palette von Anwendungsfällen, einschließlich Echtzeit-Analysen, Content-Management-Systeme, E-Commerce-Plattformen, IoT-Datenerfassung, Mobile Backends und alle Anwendungen, bei denen sich Datenstrukturen wahrscheinlich im Laufe der Zeit ändern.

Warum MongoDB auf einem VPS hosten?

Das Hosten von MongoDB auf einem dedizierten virtuellen privaten Server bietet Ihnen ein Maß an Kontrolle, Leistung und Sicherheit, das gemeinsame Umgebungen einfach nicht bieten können. Mit einem VPS-Hosting-Plan von AlexHost erhalten Sie:

  • Vollständigen Root-Zugriff zur Konfiguration von MongoDB genau nach Ihren Anforderungen
  • Dedizierte RAM- und CPU-Ressourcen zur Bewältigung anspruchsvoller Lese-/Schreibvorgänge
  • Isolierte Umgebung, die das „Noisy Neighbor”-Problem bei gemeinsamen Hosting-Umgebungen eliminiert
  • Nahtlose vertikale und horizontale Skalierung mit wachsenden Daten
  • Benutzerdefinierte Firewall- und Netzwerkregeln zur Sicherung des Datenbankzugriffs

Für Anwendungen mit außergewöhnlich hohen Durchsatzanforderungen bieten AlexHosts Dedicated Servers Bare-Metal-Leistung mit vollständiger Hardware-Isolation – der Gold-Standard für produktive MongoDB-Bereitstellungen.

Abschnitt 1: Verständnis von MongoDBs Kernarchitektur

Bevor Sie mit der Installation beginnen, ist es wichtig zu verstehen, wie MongoDB Daten organisiert und verwaltet.

Dokumente

Die grundlegende Dateneinheit in MongoDB ist ein Dokument – ein JSON-ähnliches Objekt, das verschachtelte Felder, Arrays und gemischte Datentypen enthalten kann. Zum Beispiel:

{
  "_id": ObjectId("64b1f2c3e4b0a1d2e3f4a5b6"),
  "name": "Alice",
  "age": 30,
  "email": "alice@example.com",
  "address": {
    "city": "New York",
    "zip": "10001"
  },
  "tags": ["developer", "mongodb", "nodejs"]
}

Sammlungen

Dokumente werden in Sammlungen gruppiert, die SQL-Datenbanktabellen ähneln. Im Gegensatz zu SQL-Tabellen erzwingen Sammlungen jedoch kein festes Schema – Dokumente innerhalb derselben Sammlung können völlig unterschiedliche Felder haben.

Datenbanken

Ein MongoDB-Server kann mehrere Datenbanken hosten, von denen jede einen eigenen Satz von Sammlungen enthält. Dies erleichtert die Isolierung von Daten für verschiedene Anwendungen oder Umgebungen (z. B. Entwicklung, Staging, Produktion) auf einer einzelnen Serverinstanz.

Abschnitt 2: Wichtigste Funktionen von MongoDB

2.1 Dokumentorientierte Speicherung

Mongodbis Dokumentmodell ist eines seiner leistungsstärksten Features. Da jedes Dokument eine andere Struktur haben kann, können Entwickler das Datenbankschema organisch weiterentwickeln, wenn sich die Anforderungen der Anwendung ändern – ohne komplexe ALTER TABLE-Migrationen durchzuführen oder Ausfallzeiten zu verursachen.

Diese Flexibilität ist besonders wertvoll in agilen Entwicklungsumgebungen, in denen sich die Anforderungen häufig ändern, oder in Anwendungen, die Daten aus mehreren heterogenen Quellen aggregieren.

2.2 Horizontale Skalierbarkeit mit Sharding

Eine der definierenden Fähigkeiten von MongoDB ist seine native Unterstützung für horizontale Skalierung durch Sharding. Sharding verteilt Daten auf mehrere Server (sogenannte Shards), wodurch MongoDB Datensätze und Durchsatzmengen verarbeiten kann, die einen einzelnen Computer überlasten würden.

Jeder Shard enthält eine Teilmenge der Gesamtdaten, und ein mongos-Router leitet Abfragen basierend auf einem konfigurierbaren Shard-Schlüssel an die entsprechenden Shards weiter. Diese Architektur ermöglicht eine nahezu lineare Skalierbarkeit, wenn Ihr Datenvolumen und Ihre Abfragelast wachsen.

Für hochfrequente Produktionsumgebungen stellt das Hosten von MongoDB auf AlexHosts Dedicated Servers sicher, dass jeder Shard Zugriff auf isolierte, hochperformante Hardware-Ressourcen hat.

2.3 Hohe Verfügbarkeit mit Replica Sets

MongoDB bietet integrierte Fehlertoleranz durch Replica Sets – Gruppen von MongoDB-Instanzen, die identische Kopien derselben Daten verwalten. Ein Replica Set besteht aus:

  • Einem primären Knoten, der alle Schreibvorgänge empfängt
  • Einem oder mehreren sekundären Knoten, die Daten vom primären Knoten replizieren
  • Einem optionalen Schiedsrichter, der an Wahlen teilnimmt, ohne Daten zu speichern

Wenn der primäre Knoten ausfällt, wählt das Replica Set automatisch einen neuen primären Knoten aus den verfügbaren sekundären Knoten aus, wodurch Ausfallzeiten minimiert und die Datenhaltbarkeit gewährleistet werden.

2.4 Leistungsstarke Abfragesprache und Aggregations-Framework

Mongodbis MongoDB Query Language (MQL) unterstützt eine umfangreiche Reihe von Operationen, darunter:

  • Filterung auf Feldebene mit Vergleichs-, Logik- und Element-Operatoren
  • Projektion zur Rückgabe nur bestimmter Felder
  • Sortierung und Paginierung mit sort(), limit() und skip()
  • Volltextsuche mit Volltext-Indizes
  • Geospatiale Abfragen für standortbasierte Anwendungen

Das Aggregations-Framework bietet einen Pipeline-basierten Ansatz zur Datentransformation und -analyse und unterstützt Operationen wie $match, $group, $sort, $project, $lookup (Joins), $unwind und viele mehr – mit Funktionalität vergleichbar mit komplexen SQL GROUP BY- und JOIN-Operationen.

2.5 Flexible Indizierung

MongoDB unterstützt mehrere Indextypen zur Optimierung der Abfrageleistung:

  • Einzelfeld-Indizes für einfache Abfragen
  • Zusammengesetzte Indizes für Multi-Feld-Abfragen
  • Multikey-Indizes für Array-Felder
  • Text-Indizes für Volltextsuche
  • Geospatiale Indizes für Standortabfragen
  • TTL-Indizes für automatisches Dokumentablaufen (nützlich für Sitzungsdaten oder Protokolle)

Abschnitt 3: Installation von MongoDB auf Ubuntu (Schritt für Schritt)

Dieser Abschnitt führt Sie durch eine vollständige MongoDB-Installation auf Ubuntu 20.04 LTS (Focal Fossa). Diese Schritte sind für eine AlexHost VPS-Umgebung mit Root- oder Sudo-Zugriff optimiert.

Voraussetzungen

  • Ubuntu 20.04 LTS Server
  • Ein Benutzerkonto mit sudo Berechtigungen
  • Grundlegende Vertrautheit mit der Linux-Befehlszeile

Wenn Sie noch keinen Server haben, können Sie in wenigen Minuten einen vollständig konfigurierten Ubuntu VPS mit AlexHost VPS Hosting starten.

Schritt 1: Importieren Sie den öffentlichen MongoDB GPG-Schlüssel

MongoDB-Pakete sind mit einem GPG-Schlüssel signiert, um ihre Authentizität zu überprüfen. Importieren Sie den Schlüssel mit dem folgenden Befehl:

wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -

Sie sollten OK als Ausgabe sehen, was bestätigt, dass der Schlüssel erfolgreich importiert wurde.

Schritt 2: Fügen Sie das MongoDB-Repository hinzu

Erstellen Sie eine Listendatei, um das offizielle MongoDB-Repository zu den Paketquellen Ihres Systems hinzuzufügen:

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

> Hinweis: Dieser Befehl fügt das MongoDB 6.0-Repository hinzu. Passen Sie die Versionsnummer an, wenn Sie eine andere Version benötigen.

Schritt 3: Aktualisieren Sie die Paketdatenbank

Aktualisieren Sie Ihren lokalen Paketindex, um das neu hinzugefügte MongoDB-Repository einzubeziehen:

sudo apt update

Schritt 4: Installieren Sie MongoDB

Installieren Sie die neueste stabile Version von MongoDB mit allen erforderlichen Komponenten:

sudo apt install -y mongodb-org

Dies installiert die folgenden Pakete:

  • mongod – der MongoDB-Datenbankdaemon
  • mongos – der MongoDB-Sharding-Router
  • mongosh – die MongoDB-Shell (moderner Ersatz für die Legacy-mongo Shell)
  • MongoDB-Tools und Bibliotheken

Schritt 5: Starten Sie den MongoDB-Dienst und aktivieren Sie ihn

Starten Sie den MongoDB-Dienst sofort:

sudo systemctl start mongod

Aktivieren Sie MongoDB, um beim Systemstart automatisch zu starten:

sudo systemctl enable mongod

Überprüfen Sie, ob MongoDB korrekt ausgeführt wird:

sudo systemctl status mongod

Sie sollten eine Ausgabe sehen, die anzeigt, dass der Dienst active (running) ist. Wenn MongoDB erfolgreich gestartet wurde, sehen Sie auch eine Zeile, die bestätigt, dass es auf Port 27017 lauscht.

Schritt 6: Sichern Sie Ihre MongoDB-Installation (empfohlen)

Bevor Sie MongoDB in einer produktiven oder internetgestützten Umgebung verwenden, ist es wichtig, die Authentifizierung zu aktivieren. Standardmäßig erfordert MongoDB keinen Benutzernamen oder Passwort.

Erstellen Sie einen administrativen Benutzer:

mongosh

Innerhalb der MongoDB-Shell:

use admin

db.createUser({
  user: "adminUser",
  pwd: "YourStrongPasswordHere",
  roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
})

Aktivieren Sie die Authentifizierung durch Bearbeitung der MongoDB-Konfigurationsdatei:

sudo nano /etc/mongod.conf

Suchen Sie den Abschnitt security und fügen Sie hinzu:

security:
  authorization: enabled

Starten Sie MongoDB neu, um die Änderungen anzuwenden:

sudo systemctl restart mongod

Von diesem Punkt an erfordern alle Verbindungen zu MongoDB gültige Anmeldedaten.

Abschnitt 4: Verwendung von MongoDB – wichtigste Befehle und Operationen

Mit MongoDB installiert und gesichert, lassen Sie uns die wichtigsten Operationen erkunden, die Sie täglich verwenden werden.

Schritt 1: Zugriff auf die MongoDB-Shell

Verbinden Sie sich mit Ihrer MongoDB-Instanz über die moderne mongosh Shell:

mongosh

Wenn die Authentifizierung aktiviert ist, verbinden Sie sich mit Anmeldedaten:

mongosh -u adminUser -p YourStrongPasswordHere --authenticationDatabase admin

Schritt 2: Datenbankoperationen

Alle Datenbanken auflisten:

show dbs

Eine Datenbank erstellen oder zu ihr wechseln:

use mydatabase

> MongoDB erstellt die Datenbank automatisch, wenn Sie zum ersten Mal Daten einfügen.

Überprüfen Sie die aktuell ausgewählte Datenbank:

db

Löschen Sie eine Datenbank:

db.dropDatabase()

Schritt 3: Sammlungsoperationen

Erstellen Sie eine Sammlung explizit:

db.createCollection("users")

Alle Sammlungen in der aktuellen Datenbank auflisten:

show collections

Löschen Sie eine Sammlung:

db.users.drop()

Schritt 4: Dokument-CRUD-Operationen

#### Dokumente einfügen

Ein einzelnes Dokument einfügen:

db.users.insertOne({
  name: "Alice",
  age: 30,
  email: "alice@example.com",
  role: "developer"
})

Mehrere Dokumente auf einmal einfügen:

db.users.insertMany([
  { name: "Bob", age: 25, email: "bob@example.com", role: "designer" },
  { name: "Carol", age: 35, email: "carol@example.com", role: "manager" },
  { name: "Dave", age: 28, email: "dave@example.com", role: "developer" }
])

#### Dokumente lesen

Alle Dokumente in einer Sammlung suchen:

db.users.find()

Dokumente mit einer bestimmten Bedingung suchen:

db.users.find({ role: "developer" })

Dokumente mit mehreren Bedingungen suchen:

db.users.find({ role: "developer", age: { $gte: 28 } })

Nur bestimmte Felder zurückgeben (Projektion):

db.users.find({ role: "developer" }, { name: 1, email: 1, _id: 0 })

Ein einzelnes Dokument suchen:

db.users.findOne({ name: "Alice" })

Ergebnisse sortieren:

db.users.find().sort({ age: 1 })   // Ascending
db.users.find().sort({ age: -1 })  // Descending

Ergebnisse begrenzen und paginieren:

db.users.find().limit(10).skip(20)  // Page 3 with 10 results per page

#### Dokumente aktualisieren

Ein einzelnes Dokument aktualisieren:

db.users.updateOne(
  { name: "Alice" },
  { $set: { age: 31, role: "senior developer" } }
)

Mehrere Dokumente aktualisieren:

db.users.updateMany(
  { role: "developer" },
  { $set: { department: "Engineering" } }
)

Ein numerisches Feld erhöhen:

db.users.updateOne(
  { name: "Bob" },
  { $inc: { age: 1 } }
)

#### Dokumente löschen

Ein einzelnes Dokument löschen:

db.users.deleteOne({ name: "Dave" })

Mehrere Dokumente löschen, die eine Bedingung erfüllen:

db.users.deleteMany({ role: "designer" })

Schritt 5: Indizierung für Leistung

Das Erstellen von Indizes für häufig abgefragte Felder verbessert die Abfrageleistung dramatisch.

Erstellen Sie einen Einzelfeld-Index:

db.users.createIndex({ email: 1 })

Erstellen Sie einen zusammengesetzten Index:

db.users.createIndex({ role: 1, age: -1 })

Erstellen Sie einen eindeutigen Index:

db.users.createIndex({ email: 1 }, { unique: true })

Alle Indizes einer Sammlung auflisten:

db.users.getIndexes()

Schritt 6: Aggregations-Pipeline

Das Aggregations-Framework ermöglicht es Ihnen, komplexe Datenanalysen direkt in MongoDB durchzuführen.

Beispiel: Benutzer nach Rolle zählen und nach Anzahl sortieren:

db.users.aggregate([
  { $group: { _id: "$role", count: { $sum: 1 } } },
  { $sort: { count: -1 } }
])

Beispiel: Filtern, gruppieren und durchschnittliches Alter nach Rolle berechnen:

db.users.aggregate([
  { $match: { department: "Engineering" } },
  { $group: { _id: "$role", avgAge: { $avg: "$age" }, total: { $sum: 1 } } },
  { $sort: { avgAge: 1 } }
])

Abschnitt 5: MongoDB-Konfiguration und Leistungsoptimierung

Konfigurieren von mongod.conf

Mongodbis primäre Konfigurationsdatei befindet sich unter /etc/mongod.conf. Wichtige Einstellungen zum Überprüfen und Optimieren:

# Network settings
net:
  port: 27017
  bindIp: 127.0.0.1  # Restrict to localhost for security; use server IP for remote access

# Storage settings
storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
      cacheSizeGB: 2  # Set to ~50% of available RAM

# Logging
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# Security
security:
  authorization: enabled

# Replication (for replica sets)
replication:
  replSetName: "rs0"

Best Practices für Leistung

  1. Weisen Sie ausreichend RAM zu – Mongodbis WiredTiger-Speicher-Engine verwendet einen In-Memory-Cache. Setzen Sie cacheSizeGB auf etwa 50% des verfügbaren Systemspeichers.
  2. Verwenden Sie geeignete Indizes – Analysieren Sie langsame Abfragen mit db.collection.explain("executionStats") und erstellen Sie entsprechend Indizes.
  3. Überwachen Sie mit MongoDB Atlas oder mongostat – Verwenden Sie mongostat und mongotop Befehlszeilenwerkzeuge zur Überwachung der Echtzeitleistung.
  4. Aktivieren Sie Journaling – Journaling ist standardmäßig aktiviert und bietet Crash-Wiederherstellung; deaktivieren Sie es nicht in der Produktion.
  5. Verwenden Sie Connection Pooling – Konfigurieren Sie den MongoDB-Treiber Ihrer Anwendung, um Connection Pooling zu verwenden und den Verbindungsaufwand zu reduzieren.
  6. Komprimieren Sie Sammlungen regelmäßig – Verwenden Sie db.runCommand({ compact: "collectionName" }), um Speicherplatz nach großen Löschungen freizugeben.

Abschnitt 6: Sicherung und Wiederherstellung von MongoDB

Regelmäßige Sicherungen sind für jede produktive Datenbank unerlässlich. MongoDB bietet integrierte Tools für diesen Zweck.

Erstellen Sie eine Sicherung mit mongodump

mongodump --uri="mongodb://adminUser:password@localhost:27017" --out=/backup/mongodb/$(date +%Y%m%d)

Wiederherstellen aus einer Sicherung mit mongorestore

mongorestore --uri="mongodb://adminUser:password@localhost:27017" /backup/mongodb/20240115/

Automatisieren Sie Sicherungen mit Cron

Fügen Sie einen Cron-Job hinzu, um Sicherungen automatisch durchzuführen:

sudo crontab -e

Fügen Sie die folgende Zeile hinzu, um täglich um 2:00 Uhr eine Sicherung durchzuführen:

0 2 * * * mongodump --uri="mongodb://adminUser:password@localhost:27017" --out=/backup/mongodb/$(date +%Y%m%d) >> /var/log/mongodb-backup.log 2>&1

Wählen Sie den richtigen AlexHost-Plan für MongoDB

Der richtige Hosting-Plan hängt von der Skalierung, dem Datenverkehr und den Datenanforderungen Ihrer Anwendung ab:

AnwendungsfallEmpfohlener PlanWarum
Entwicklung / TestsVPS HostingKostengünstig, vollständige Kontrolle, einfache Einrichtung
Kleine bis mittlere ProduktionVPS HostingSkalierbare Ressourcen, SSD-Speicher, Root-Zugriff
15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen