Verständnis von MongoDB -Speichermotoren: WiredTiger Deep Dive
WiredTiger ist seit Version 3.2 die Standard -Speicher -Engine von MongoDB, die hohe Leistung, Skalierbarkeit und moderne Funktionen bietet. 1. Es verwendet Verriegelung auf Dokumentenebene und MVCC für hohe Parallelität und ermöglicht Lesevorgänge und schreibt, um fortzufahren, ohne sich gegenseitig zu blockieren. 2. Die Daten werden unter Verwendung von B-Bäumen gespeichert, wobei bei periodischen Kontrollpunkten (standardmäßig alle 60 Sekunden) in Memory-Modifikationen auf Festplatten gespült werden, um eine schnelle Absturzwiederherstellung zu ermöglichen, indem nur Post-Checkpoint-Protokolle wiederholt werden. 3. MVCC sorgt für konstante Schnappschüsse, sodass langlebige Abfragen nicht von Schreibvorgängen blockiert werden und umgekehrt. 4. Die integrierte Komprimierung (Snappy, ZLIB, ZSTD) reduziert die Speicherung und die E/A für Sammlungen und Indizes, wodurch die Cache-Effizienz verbessert wird. 5. WiredTiger verwaltet seinen eigenen Cache (Standard: 50% des RAM minus 1 GB), der Daten, Indizes und Metadaten speichert. Die Antriebsgröße ist von entscheidender Bedeutung, um übermäßige Festplatten -E/A zu vermeiden. 6. Das Schreibbeinprotokoll (Wal) garantiert die Haltbarkeit durch Protokollierung, bevor sie angewendet werden, wobei FSYNC-Intervalle alle 100 ms; J: True sorgt für die Synchronisierung von Journal für Sicherheit, während J: False Trades Haltbarkeit für Geschwindigkeit. 7. Alternativen können für Systeme mit niedrigem Memory (
Die Leistung und Skalierbarkeit von MongoDB hängen stark von seiner Speichermotor ab, und WiredTiger ist der Standard seit MongoDB 3.2. Wenn Sie eine moderne Version von MongoDB verwenden, können Sie die Wahrscheinlichkeit bereits WiredTiger verwenden. Wenn Sie also verstehen, wie sie unter der Haube funktioniert, können Sie die Leistung optimieren, Ressourcen verwalten und Probleme beheben.

Lassen Sie uns aufschlüsseln, was WiredTiger leistungsfähig macht und wie es Daten hinter den Kulissen behandelt.
Was ist Wiredtiegel und warum es wichtig ist?
WiredTiger ist eine leistungsstarke, skalierbare Speicher-Engine, die für Workloads mit hoher Parallelität und großen Datensätzen entwickelt wurde. Im Gegensatz zum älteren MMAPV1-Engine bringt WiredTiger moderne Datenbankfunktionen wie Dokumentsteuerung, Komprimierung und Crash-Safe-Schreibvorgänge mit Dokumentenebene mit.

Schlüsselvorteile:
- Sperrung auf Dokumentebene (gegen MMAPV1-Ebene auf Sammlungsniveau) → höhere Parallelität
- Snapshots und MVCC (Mehrfachversionskontrolle) → Konsistente Lesevorgänge ohne Blockierung von Schreibvorgängen
- Konfigurierbare Komprimierung → Reduzierter Speicherbootabdruck
- Schreibwiederholungsprotokollierung (Wal) → Haltbarkeit und Absturzwiederherstellung
Es ist so konstruiert, dass es auf moderne Hardware effizient skaliert wird, insbesondere auf Systemen mit mehreren Kernen und SSDs.

Wie WiredTiger Daten speichert: B-Bäume und Kontrollpunkte
In seinem Kern verwendet WiredTiger eine B-Tree-Struktur (ausgewogener Baum), um Daten auf der Festplatte und im Speicher zu organisieren.
In-Memory vs. On-Disk-Struktur
- Wenn Sie ein Dokument einfügen oder aktualisieren, geht es zunächst in den Memory B-Tree ein.
- Änderungen werden im WiredTiger -Protokoll (Wal) zur Haltbarkeit verfolgt.
- In regelmäßigen Abständen erstellt WiredTiger einen Checkpoint - eine konsistente Momentaufnahme der an die Festplatte geschriebenen Daten.
Das heisst:
- Lesevorgänge können entweder auf den In-Memory-Baum (schnell) oder auf den letzten Kontrollpunkt (auf der Festplatte) zugreifen.
- Schreibvorgänge sind dank MVCC und Checkpoints nicht blockiert.
Checkpointing erklärt
Checkpoints sind entscheidend für die Wiederherstellung und Leistung:
- Sie treten standardmäßig alle 60 Sekunden auf (konfigurierbar).
- Während eines Checkpoint werden schmutzige Seiten (im Speicher geändert) in einem konsistenten Zustand auf Scheibe gespült.
- Nach einem Absturz repariert MongoDB nur die Protokolleinträge nach dem letzten Kontrollpunkt.
Dies verkürzt die Erholungszeit im Vergleich zur Wiederholung des gesamten OPlogs oder des gesamten Journals signifikant.
Parallelität und Isolation: MVCC in Aktion
WiredTiger verwendet MVCC (Mehrfachversionskontrolle), um die gleichzeitigen Lesevorgänge zu ermöglichen, ohne sich gegenseitig zu blockieren.
So funktioniert es:
- Jeder Operation wird zu einem Zeitpunkt in einem Schnappschuss der Datenbank ausgeführt.
- Die Leser sehen eine konsistente Ansicht, auch wenn Schreibvorgänge stattfinden.
- Autoren blockieren die Leser nicht und umgekehrt (solange sie nicht dasselbe Dokument ändern).
Zum Beispiel:
- Eine langjährige Analytik-Abfrage wird nicht durch eingehende Einsätze blockiert.
- Zwei Updates für verschiedene Dokumente können parallel fortgesetzt werden.
Dies ist ein großer Gewinn für Anwendungen, die einen hohen Durchsatz und eine geringe Latenz erfordern.
Speicherungseffizienz: Komprimierung und Indexierung
Eine der herausragenden Funktionen von WiredTiger ist die integrierte Komprimierung , die den Speicherplatz spart und die E/A reduziert.
Datenkomprimierungsoptionen
WiredTiger -Unterstützung:
- Snappy (Standard): schnelle, mäßige Komprimierung
- ZLIB : höhere Kompression, langsamer
- ZSTD (aus MongoDB 4.2): ausgewogene Geschwindigkeit und Verhältnis
Komprimierung wird angewendet auf:
- Sammlungen (Daten)
- Indizes
Sie können die Komprimierung pro Sammlung konfigurieren:
db.createcollection ("logs", { StoresEngine: { WiredTiger: { configString: "block_compressor = zstd" } } })
Indexverhalten
- Alle Indizes verwenden dieselbe Speichermotor.
- Indexschlüssel werden ebenfalls komprimiert.
- Sekundäre Indizes werden schrittweise aktualisiert und profitieren von demselben Parallelitätsmodell.
? TIPP: Komprimierte Indizes reduzieren den Speicherdruck im WiredTiger -Cache , sodass mehr heiße Daten im RAM bleiben können.
WiredTiger -Cache: Speicherverbrauch verwalten
WiredTiger verwaltet seinen eigenen In-Memory-Cache , der vom Dateisystem-Cache getrennt ist.
Standardmäßig:
- Die Cache -Größe beträgt 50% des RAM minus 1 GB , der bei 1 TB begrenzt ist.
- Es gilt:
- Zuletzt verwendete Daten (Arbeitssatz)
- Indizes
- Interne Metadaten
Sie können es in mongod.conf
einstellen:
Lagerung: WiredTiger: EngineConfig: configString: "cache_size = 4g"
⚠️ Warnung: Setzen Sie es nicht zu hoch. Lassen Sie Platz für den OS -Dateisystem -Cache und andere Prozesse.
Wenn Ihr Arbeitssatz die Cache -Größe überschreitet, werden Sie mehr Abfragen von Festplatten -E/A und langsameren Abfragen sehen.
Protokollierung und Haltbarkeit: Schreibschreiberprotokoll (Wal)
WiredTiger verwendet ein Write-Ahead-Protokoll (Wal), um die Haltbarkeit zu gewährleisten:
- Jedes Schreiben wird zuerst in das Protokoll geschrieben.
- Die Protokolle werden standardmäßig alle 100 ms (
commit_timestamp_frequency
) fsynt . - Dies garantiert, dass auch wenn MongoDB abfällt, keine engagierten Daten verloren gehen.
Das Protokoll wird in dbPath
unter journal/
gespeichert.
Während Checkpoints regelmäßig Daten auf die Festplatte schreiben, sorgt der Wal sicher, dass die Checkpoints eine körnige Haltbarkeit sorgt.
Sie können die Haltbarkeit im Vergleich zu Leistung einstellen:
- Set
j: true
auf Schreibvorgängen für garantierte Journal -Synchronisierung. - Oder verwenden Sie
j: false
für einen höheren Durchsatz (aber das Risiko eines geringfügigen Datenverlusts beim Absturz).
Wann sollten Sie Alternativen in Betracht ziehen?
Während WiredTiger für die meisten Anwendungsfälle hervorragend ist, ist es nicht immer die beste Passform.
Vermeiden oder überdenken, wenn:
- Sie sind auf sehr niedrigen Memory-Systemen (
- Sie müssen in Ruhe mit älteren MongoDB-Versionen verschlüsselt werden : Nur Enterprise bietet native Verschlüsselung (obwohl die Verschlüsselung auf Dateisystemebene funktioniert).
- Sie migrieren von MMAPV1 und haben spezifische Leistungserwartungen (Benchmark zuerst).
Es gibt auch eine In-Memory-Speicher-Engine (nur Unternehmen), die alle Daten in RAM für eine ultra-niedrige Latenz hält-die für Caching- oder Echtzeitanalysen verwendet wird.
Letzte Gedanken
WiredTiger ist eine robuste, moderne Speicher -Engine, die heute die meisten MongoDB -Bereitstellungen mitwirkt. Die Kombination aus Parallelität, Komprimierung und Absturzsicherheit macht es ideal für alles, von kleinen Apps bis hin zu groß angelegten verteilten Systemen.
Um das Beste daraus herauszuholen:
- Cache -Nutzung überwachen (
db.serverStatus().wiredTiger.cache
) - Tunekomprimierung basierend auf Ihrem E/A-VS.-CPU-Kompromiss
- Checkpoint und Journalverhalten für die Katastrophenwiederherstellung verstehen
- Größe Ihren RAM für Cache und Systemanforderungen angemessen Größe
Es ist keine Magie - aber mit dem richtigen Verständnis ist es ein leistungsstarkes Werkzeug in Ihrem MongoDB -Toolkit.
Wenn Sie MongoDB nach 3.2 verwenden, profitieren Sie im Grunde genommen bereits von WiredTiger. Jetzt wissen Sie wie .
Das obige ist der detaillierte Inhalt vonVerständnis von MongoDB -Speichermotoren: WiredTiger Deep Dive. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Zu den Methoden zum Aktualisieren von Dokumenten in MongoDB gehören: 1. Verwenden Sie UpdateOne- und UpdateMany -Methoden, um grundlegende Updates durchzuführen; 2. Verwenden Sie Operatoren wie $ set, $ inc und $ push, um erweiterte Updates durchzuführen. Mit diesen Methoden und Betreibern können Sie Daten in MongoDB effizient verwalten und aktualisieren.

Die Möglichkeit, alle Datenbanken in MongoDB anzuzeigen, besteht darin, den Befehl "showdbs" einzugeben. 1. Dieser Befehl zeigt nur nicht leere Datenbanken an. 2. Sie können die Datenbank über den Befehl "Verwendung" wechseln und Daten einfügen, damit sie angezeigt werden. 3. Achten Sie auf interne Datenbanken wie "Lokal" und "Konfiguration". 4. Bei Verwendung des Treibers müssen Sie die Methode "ListDatabases ()" verwenden, um detaillierte Informationen zu erhalten. 5. Der Befehl "db.stats ()" kann detaillierte Datenbankstatistiken anzeigen.

Die kostenlose Hierarchie von Mongodbatlas hat viele Einschränkungen bei der Leistung, Verfügbarkeit, Verwendungsbeschränkungen und -speicher und ist für Produktionsumgebungen nicht geeignet. Erstens haben der M0-Cluster-CPU-Ressourcen mit nur 512 MB Speicher und bis zu 2 GB Speicherplatz, was es schwierig macht, Echtzeitleistung oder Datenwachstum zu unterstützen. Zweitens das Fehlen von Architekturen mit hoher Verfügbarkeit wie Multi-Knoten-Replikat-Sets und automatisches Failover, was zu einer Unterbrechung der Service während der Wartung oder des Misserfolgs führen kann. Darüber hinaus sind die stündlichen Lese- und Schreibvorgänge begrenzt, die Anzahl der Verbindungen und die Bandbreite sind ebenfalls begrenzt und die aktuelle Grenze kann ausgelöst werden. Schließlich ist die Sicherungsfunktion begrenzt und die Speichergrenze ist aufgrund der Indexierung oder des Dateispeichers leicht erschöpft, sodass sie nur für Demonstrationen oder kleine persönliche Projekte geeignet ist.

In MongoDB können Sie die Sort () -Methode verwenden, um Dokumente in einer Sammlung zu sortieren. 1. Grundnutzung: Sortieren Sie, indem Sie Felder und Sortierreihenfolge angeben (1 ist aufsteigend und -1 absteigt), wie z. B. db.products.find (). 2. Erweiterte Verwendung: Es kann nach mehreren Feldern sortiert werden, wie z. B. db.products.find (). Sort ({Kategorie: 1, Preis: -1}). 3.. Leistungsoptimierung: Verwenden von Indexierung, Vermeidung von Übersortieren und Paging -Sortierungen kann die Effizienz verbessern, wie z.

GridFS ist ein Tool in MongoDB zum Speichern und Abrufen von Dateien mit einer Größengrenze von mehr als 16 MBBSON. 1. Es unterteilt die Datei in 255 KB -Blöcke, speichert sie in der Fs.Chunks -Sammlung und speichert die Metadaten in der Fs. -Files -Sammlung. 2. Zu den geeigneten Situationen gehören: mehr als 16 MB Dateien, die Notwendigkeit, Dateien und Metadaten einheitlich zu verwalten, auf bestimmte Teile der Datei zuzugreifen und MongoDB zu verwenden, ohne externe Speichersysteme einzuführen. 3.. 4. Alternative Lösungen umfassen: Speichern des Dateipfads in MongoDB und das Speichern im Dateisystem.

Es gibt keinen expliziten Befehl "createdatabase" in mongoDB, die Datenbank wird erstellt, wenn die Daten zum ersten Mal eingefügt werden. 1. Verwenden Sie "Usemydb", um zur Datenbank umzusteigen. 2. Einfügen das Dokument wie "db.users.insertone ({name: 'Johndoe', Alter: 30})". Zu den Hinweisen gehören: Datenbanken und Sammlungen werden erstellt, wenn Daten zum ersten Mal eingefügt werden, mit strikten Beschränkungen des Namens, und die Berechtigungsverwaltung, die Datenkonsistenz, die Leistungsoptimierung und die Wiederherstellung der Sicherung sollten berücksichtigt werden.

Zu den Gründen für die Umbenennung einer Sammlung in MongoDB gehören Code Refactoring und Leistungsoptimierung unter Verwendung des Befehls renameCollection. Zu den Hinweisen gehören: 1. Verriegelung der Datenbank, 2.. Best Practice -Vorschläge: 1. Wählen Sie Niedrigpeakbetrieb, 2. Backup -Daten, 3. Überprüfen Sie zuerst in der Testumgebung. Die Umbenennung von Sammlungen erfordert eine sorgfältige Behandlung, um die Systemleistung und -stabilität zu gewährleisten.

Es gibt vier Hauptmöglichkeiten für MongoDB, um Daten in Ruhe zu verschlüsseln. 1. Die Verschlüsselung wird durch Konfigurieren der Verschlüsselungseinstellungen und der Schlüsselverwaltung implementiert, die für Unternehmensversionen oder Atlas geeignet ist. 2. Verwenden Sie das Dateisystem oder eine Volumenverschlüsselung wie Luks und BitLocker, was für alle Versionen geeignet ist, aber eine grobe Schutzgranularität aufweist. 3.. Verschlüsselung auf Anwendungsebene, Verschlüsseln sensibler Felder im Code, der hoch sicher ist, aber erhöhte Entwicklungskosten aufweist. V. Verschiedene Lösungen können in Kombination gemäß den Anforderungen der Bereitstellungsumgebung und den Sicherheitsanforderungen verwendet werden.
