View a markdown version of this page

Tipps zur Leistungsverbesserung - Amazon DocumentDB

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Tipps zur Leistungsverbesserung

Dieser Abschnitt enthält fünf Strategien zur Leistungsoptimierung für Amazon DocumentDB zur Verbesserung der Anwendungseffizienz und der Abfrageausführung.

1. Verwenden Sie $match als erste Phase in Aggregationspipelines

Platzieren Sie $match immer als erste Stufe für die Filterung in Ihrer Aggregationspipeline, um die Leistung zu maximieren. Amazon DocumentDB nutzt Indizes effektiv, wenn $match die Pipeline leitet, sodass die Datenbank Daten frühzeitig filtern und den Verarbeitungsaufwand reduzieren kann.

// Optimized approach db.orders.aggregate([ { $match: { status: "active", category: "electronics" } }, // Index utilization { $group: { _id: "$category", total: { $sum: "$price" } } }, { $sort: { total: -1 } } ])

Auswirkung: Durch frühzeitiges Filtern wird die Anzahl der Dokumente reduziert, die in nachfolgenden Pipeline-Phasen verarbeitet werden, was zu einer schnelleren Abfrageausführung und einem geringeren Ressourcenverbrauch führt.

2. Verwenden Sie $project in der Aggregationspipeline, um die Größe der Pipeline-Daten zu minimieren

Führen Sie nur wichtige Felder durch die Phasen Ihrer Aggregationspipeline, um die Datengröße zu minimieren und die Leistung zu verbessern. Setzen Sie $project strategisch ein, um nur die Daten einzubeziehen, die Sie benötigen.

// Efficient pipeline design db.orders.aggregate([ { $match: { orderDate: { $gte: new Date("2024-01-01") } } }, { $project: { customerId: 1, totalAmount: 1, status: 1 } }, // Only needed fields { $group: { _id: "$customerId", totalSpent: { $sum: "$totalAmount" } } } ])

Auswirkung: Kleinere Dokumente reduzieren den Speicherverbrauch und verbessern die Effizienz der Pipeline-Verarbeitung, was zu einer insgesamt verbesserten Abfrageleistung führt.

3. Aktivieren Sie die Dokumentenkomprimierung, um die Speicherkosten und Kosten zu I/O senken und die Abfrageleistung zu verbessern

Aktivieren Sie die Dokumentenkomprimierung anhand der Cluster-Parametergruppe, um Speicherkosten und Kosten zu I/O senken und die Abfrageleistung zu steigern. Amazon DocumentDB speichert komprimierte Dokumente sowohl auf der Festplatte als auch im RAM, wodurch der Speicherbedarf und die I/O Kosten reduziert werden.

Auswirkung:

  • In den verfügbaren Speicher passen mehr Dokumente

  • Schnellerer Datenzugriff mit weniger Festplattenlesevorgängen

  • Niedrigere Speicherkosten und I/O Kosten und verbesserte Abfrageleistung

Anmerkung

Amazon DocumentDB aktiviert standardmäßig keine Komprimierung für Version 5.0. Sie können die Komprimierung auf Sammlungs- oder Clusterebene für 5.0-Cluster aktivieren. Verwenden Sie das Komprimierungsüberprüfungsprogramm von Amazon DocumentDB, um die Komprimierungsraten für Ihre Sammlungen zu analysieren.

Für Amazon DocumentDB 8.0 ist die Komprimierung standardmäßig aktiviert.

4. Nutzen Sie Indizes für eine optimale Abfrageleistung

Stellen Sie sicher, dass Ihre Abfragen immer Indizes verwenden, um eine optimale Leistung zu erzielen. Amazon DocumentDB bietet mehrere Indextypen für unterschiedliche Anwendungsfälle.

Prinzipien der Indexierung:

  • Jede Abfrage sollte einen geeigneten Index verwenden

  • Amazon DocumentDB bietet mehrere Indextypen

  • Zusammengesetzte Indizes bieten die größte Flexibilität, da sie verschiedene Abfrageformen mit einem einzigen Index unterstützen

  • Entwerfen Sie Indizes so, dass sie Sortier- und Filtervorgänge gemeinsam unterstützen

Grundlegendes zu Indexpräfixen: Zusammengesetzte Indizes arbeiten mit Indexpräfixen — Amazon DocumentDB kann jede Teilmenge der Indexfelder verwenden, die von links nach rechts geschrieben werden. Der Index erstellt beispielsweise diese verwendbaren Präfixe: { category: 1, price: -1, inStock: 1 }

  • { category: 1 }- unterstützt Abfragen, die nur nach Kategorien gefiltert werden

  • { category: 1, price: -1 }- unterstützt Abfragen, die nach Kategorie und Preis gefiltert sorting/filtering werden

  • { category: 1, price: -1, inStock: 1 }- unterstützt die vollständige zusammengesetzte Abfrage

Abfragen nach Preis, InStock oder InStock allein verwenden diesen Index nicht, da sie nicht mit dem ersten Feld (Kategorie) beginnen.

So identifizieren Sie Abfragen, die keine Indizes verwenden: Verwenden Sie die Methode explain (), um die Abfrageausführung zu analysieren und Abfragen zu identifizieren, die Sammelscans anstelle von Indizes durchführen.

Auswirkung: Abfragen ohne Indexauslastung führen zu Sammlungsscans, was zu einer erhöhten Speicher- und CPU-Auslastung der Instanz und zu einer erhöhten Abfragelatenz führt.

5. Optimieren Sie Datenmodelle auf der Grundlage von Abfragemustern

Passen Sie Ihr Datenmodell an die Art und Weise an, wie Ihre Anwendung Daten abfragt und aktualisiert. Datenmodellierung ist die Grundlage für leistungsstarke Amazon DocumentDB DocumentDB-Anwendungen.

Optimierungsstrategien:

Einbettung aus Gründen der Leistung

  • Speichern Sie zusammengehörende Daten zusammen, wenn häufig auf sie zugegriffen wird, als Einheit

  • Betten Sie Dokumente ein, die immer zusammen abgerufen werden

  • Geeignet für persönliche Beziehungen

// Embedded approach for frequently accessed data { _id: ObjectId("..."), customerName: "John Doe", address: { street: "123 Main St", city: "Seattle", zipCode: "98101" }, recentOrders: [ { orderId: "ORD001", amount: 99.99, date: "2024-01-15" } ] }

Aus Gründen der Flexibilität Referenzierung

  • Verwenden Sie Verweise für große oder selten abgerufene Daten

  • Empfohlen für Eins-zu-Viele-Beziehungen mit großen Datensätzen

  • Beugt aufgeblähten Dokumenten vor und verbessert die Aktualisierungsleistung

Strategie zur Aufteilung von Sammlungen

Wenn nur wenige Felder in großen Dokumenten häufig aktualisiert werden oder wenn große, selten aufgerufene Daten Dokumente überladen, sollten Sie eine Aufteilung von Sammlungen in Betracht ziehen:

  • Bewahren Sie häufig aktualisierte Felder in einer separaten, kleineren Sammlung auf

  • Speichern Sie statische Daten oder Daten, auf die selten zugegriffen wird, in einer anderen Sammlung

  • Verknüpfen Sie sie bei Bedarf mit Referenzen

// Before: Large document with mixed access patterns { _id: ObjectId("..."), productId: "PROD123", name: "Wireless Headphones", // Frequently accessed price: 99.99, // Frequently accessed inventory: 45, // Updated frequently lastSold: "2024-01-15", // Updated frequently detailedSpecs: { /* large object */ }, // Infrequently accessed manualPDF: "base64...", // Large, rarely accessed reviewHistory: [/* large array */] // Infrequently accessed } // After: Split into collections based on access patterns // products collection (frequently accessed data) { _id: ObjectId("..."), productId: "PROD123", name: "Wireless Headphones", price: 99.99, inventory: 45, lastSold: "2024-01-15" } // product_details collection (infrequently accessed data) { _id: ObjectId("..."), productId: "PROD123", // Reference to products collection detailedSpecs: { /* large object */ }, manualPDF: "base64...", reviewHistory: [/* large array */] }

Leistungssteigerung: Kleinere Dokumente bedeuten schnellere Aktualisierungen, weniger Speicherverbrauch und verbesserte Cache-Effizienz.

Auswirkung: Ineffiziente Datenmodellierung führt zu suboptimalen Abfragen, erhöhten Dokumentengrößen und erhöhtem Speicherverbrauch, was zu einer verminderten Anwendungsleistung und höheren Betriebskosten führt.