S3-Daten für bessere Abfrage-Performance partitionieren
Sie definieren Partitionsattribute für S3-Pfade, damit Data Federation irrelevante Dateien auslassen und schnelle analytische Abfragen liefern kann.
S3-Daten für bessere Abfrage-Performance partitionieren ist eine kostenlose MongoDB Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des MongoDB Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der MongoDB Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum die Partitionierung von S3-Daten wichtig ist
In Atlas Data Federation liest jede Abfrage einer virtuellen Collection, die von S3 unterstützt wird, potenziell viele Dateien. Ohne Partitionierung könnte selbst eine Abfrage nach den Daten eines einzigen Tages ein ganzes Jahr an Dateien scannen. Partitionierung organisiert S3-Objekte in einer Verzeichnisstruktur, die abfragbare Metadaten im Pfad codiert. Dadurch kann die Query Engine irrelevante Dateien überspringen – eine Technik, die als Partition-Pruning bezeichnet wird.
Partition-Pruning: Der zentrale Mechanismus
Partition-Pruning funktioniert, weil Atlas Data Federation den S3-Objektschlüssel (Pfad) analysiert und die Werte extrahiert, die in der Speicherkonfiguration als Partitionsattribute definiert sind. Wenn ein Abfragefilter einem dieser Attribute entspricht, liest die Query Engine nur Objekte, deren Pfadwerte übereinstimmen. Alle anderen werden übersprungen, ohne dass dafür überhaupt S3-GetObject-Anfragen gesendet werden.
// Path template with partition attributes
// /events/{year int}/{month int}/{day int}/data.parquet
// Query: fetch March 15, 2025 data
db.events.find({ year: 2025, month: 3, day: 15 })
// Data Federation issues S3 ListObjects only for:
// /events/2025/3/15/
// All other years/months/days are skippedIhre Partitionsstruktur entwerfen
Wählen Sie Partitionsattribute danach aus, wie Ihre Abfragen Daten filtern. Häufige Muster sind: zeitbasiert (Jahr/Monat/Tag) für Zeitreihendaten, geobasiert (Region/Land) für globale Daten und entitätsbasiert (tenantId, userId) für mandantenfähige SaaS-Anwendungen. Platzieren Sie das am häufigsten gefilterte Partitionsattribut in der Hierarchie möglichst weit oben, um den größtmöglichen Pruning-Effekt zu erzielen.
// Time-based partition hierarchy
// /events/{year int}/{month int}/{day int}/{hour int}/
// Entity + time partition (tenant queries prune all other tenants)
// /orders/{tenantId string}/{year int}/{month int}/
// Geo + time
// /events/{region string}/{year int}/{month int}/Partitionsattribute in der Speicherkonfiguration registrieren
Partitionsattribute werden im Feld path der Speicherkonfiguration mithilfe einer Syntax mit geschweiften Klammern sowie dem Attributnamen und -typ deklariert: {attrName type}. Unterstützte Typen sind string, int und ISODate. Der Typ bestimmt, wie das Attribut analysiert und mit den Werten von Abfragefiltern verglichen wird.
{
'dataSources': [{
'storeName': 's3Store',
'path': '/events/{year int}/{month int}/{day int}/*.parquet'
}]
}
// Partition attributes: year (int), month (int), day (int)
// Filters like { year: 2025, month: 3 } trigger pruning
// The '*.parquet' at the end matches any file in the day directoryDateigröße: Den optimalen Bereich finden
Die Partition-Pruning-Optimierung arbeitet auf Verzeichnisebene, aber auch die Dateigröße spielt eine Rolle. Zu viele kleine Dateien (Tausende Dateien mit jeweils 1 KB) verursachen selbst nach dem Pruning durch die S3-API-Aufrufe pro Datei einen hohen Zeitaufwand. Zu wenige riesige Dateien (eine Datei mit 100 GB pro Monat) verhindern ein Pruning unterhalb der Monatsebene. Streben Sie Dateigrößen von 64 MB bis 256 MB (komprimiert) an und verwenden Sie pro Partition genügend Dateien, um bei Bedarf ein Pruning auf Unterpartitionsebene zu ermöglichen.
// Ideal partition design for daily query patterns:
// /events/2025/03/15/part-001.parquet (~128 MB each)
// /events/2025/03/15/part-002.parquet
// /events/2025/03/15/part-003.parquet
// Total: ~384 MB for a busy day, 3 files to manage
// Avoid:
// /events/2025/03/15/00001.json (1 KB each, thousands of files)
// /events/2025/march.parquet (no day-level pruning possible)Partition-Attribute vom Typ ISODate verwenden
Verwenden Sie für S3-Pfade, die Zeitstempel im ISO-Format codieren (z. B. 2025-03-15), den Partition-Attributtyp ISODate. Dadurch können Sie mit MongoDB-Datumsvergleichsoperatoren ($gte, $lt, $lte) nach dem Partition-Attribut filtern. Data Federation kann dann Dateien außerhalb des angeforderten Datumsbereichs korrekt überspringen.
// Path: /events/{date ISODate}/data.parquet
// e.g.: /events/2025-03-15/data.parquet
// Query with ISODate range — triggers pruning
db.events.find({
date: {
$gte: ISODate('2025-03-01'),
$lt: ISODate('2025-04-01')
}
})
// Only reads /events/2025-03-*/ directoriesDateien komprimieren und neu partitionieren
Mit der Zeit erzeugen Streaming-Datenpipelines häufig viele kleine Dateien (das sogenannte „Small-Files-Problem“). Um die Abfrageleistung aufrechtzuerhalten, sollten Sie Dateien regelmäßig komprimieren: Lesen Sie alle Dateien einer Partition ein und schreiben Sie sie als weniger, dafür größere Dateien zurück. Dies wird typischerweise mit Spark, AWS Glue oder einer geplanten Atlas Function durchgeführt, die Daten liest und erneut exportiert.
// Compact using MongoDB Data Federation's own $out
// (Re-export a partition to a temporary location, then replace)
db.events_raw.aggregate([
{ $match: { year: 2024, month: 1 } },
{ $out: {
s3: {
bucket: 'mycompany-analytics-archive',
region: 'us-east-1',
filename: 'events/2024/1/compacted-{UUID()}.parquet',
format: { name: 'parquet' }
}
}}
])Daten mit $out nach S3 exportieren
Data Federation unterstützt eine erweiterte Form von $out, die Aggregationsergebnisse direkt in S3 statt in eine Atlas-Sammlung schreibt. Dies wird für ETL-Pipelines verwendet: Lesen Sie Rohdaten aus Atlas, transformieren Sie sie und exportieren Sie das Ergebnis in einem optimierten Format (Parquet, BSON) nach S3, damit es später für föderierte Abfragen oder nachgelagerte Analysetools verwendet werden kann.
// Export to S3 in Parquet format from Atlas
db.orders.aggregate([
{ $match: { year: 2025, month: 3 } },
{ $project: { customerId: 1, amount: 1, region: 1, status: 1 } },
{ $out: {
s3: {
bucket: 'mycompany-analytics-archive',
region: 'us-east-1',
filename: 'orders/2025/3/data.parquet',
format: { name: 'parquet', maxFileSize: '128MB' }
}
}}
])Partition-Pruning und Column-Pruning kombinieren
Die maximale Leistung erreichen Sie, wenn Sie beide Pruning-Strategien kombinieren: Partition-Pruning (Zeit-/Entitätsattribute im Pfad überspringen ganze Dateien) und Column-Pruning (ein frühes $project überspringt nicht benötigte Parquet-Spalten innerhalb jeder Datei). Zusammen können sie die I/O-Menge im Vergleich zu einer naiven vollständigen Abfrage eines unpartitionierten, unkomprimierten Datensatzes um mehr als 99 % reduzieren.
// Combined: partition pruning + column pruning
db.events.aggregate([
// Partition pruning: only reads March 2025 S3 files
{ $match: { year: 2025, month: 3, eventType: 'purchase' } },
// Column pruning: only reads userId, amount columns from Parquet
{ $project: { userId: 1, amount: 1, _id: 0 } },
{ $group: { _id: '$userId', total: { $sum: '$amount' } } },
{ $sort: { total: -1 } },
{ $limit: 100 }
])Wirksamkeit des Partition-Prunings überwachen
In der Abfragehistorie von Atlas Data Federation wird für jede Abfrage die Anzahl der gefundenen Dateien der Anzahl der tatsächlich gelesenen Dateien gegenübergestellt. Wenn die Anzahl der gefundenen Dateien deutlich größer als die der gelesenen ist, funktioniert das Partition-Pruning gut. Wenn beide Zahlen ungefähr gleich sind, stimmt Ihre Partitionsstruktur nicht mit Ihren Abfragemustern überein. Sie sollten dann das Partitionslayout neu entwerfen oder weitere Partition-Attribute hinzufügen.
// Check execution stats to verify pruning
db.events.explain().aggregate([
{ $match: { year: 2025, month: 3 } },
{ $group: { _id: '$eventType', count: { $sum: 1 } } }
])
// In the explain output, look for:
// 'partitionsProcessed': 31 (one per day in March)
// 'partitionsTotal': 365 (total days in the year)
// Effective pruning: 31/365 files scannedPartitionsdesign: Eine praktische Checkliste
Beachten Sie beim Entwerfen Ihrer S3-Partitionsstruktur Folgendes: 1) Ermitteln Sie die Felder, nach denen Ihre Abfragen am häufigsten filtern – diese werden zu Partition-Attributen. 2) Setzen Sie das Feld mit der höchsten Kardinalität und der häufigsten Verwendung in Filtern an den Anfang der Pfadhierarchie. 3) Streben Sie 64–256 MB pro Datei an. 4) Verwenden Sie für analytische Workloads das Parquet-Format, um zusätzlich vom Column-Pruning zu profitieren. 5) Fügen Sie für Zeitreihendaten eine datumsbasierte Partition (Jahr/Monat/Tag) hinzu.
// Example: well-designed partition hierarchy for event data
// Prioritises: region (high selectivity), then year, month, day
// Path: /events/{region string}/{year int}/{month int}/{day int}/
// Query: EU events in March 2025
// Reads ONLY: /events/EU/2025/3/
// Skips: all other regions and all other months/years
db.events.find({ region: 'EU', year: 2025, month: 3, eventType: 'purchase' })Schnelltest
Testen Sie Ihr Verständnis der Konzepte zu MongoDB & NoSQL-Datenbanken aus dieser Lektion.
Zusammenfassung der Lektion
In dieser Lektion haben Sie gelernt: Partition-Attribute codieren Metadaten in S3-Pfaden, sodass die Abfrage-Engine nicht passende Dateien überspringen kann (Partition-Pruning), die Kombination von Partition-Pruning und Column-Pruning in Parquet bietet die größte Reduzierung der I/O-Menge und Dateigrößen von 64–256 MB sorgen für ein ausgewogenes Verhältnis zwischen dem API-Aufwand pro Datei und der Granularität des Prunings. Als Nächstes sehen wir uns Atlas Triggers an, mit denen Sie auf Datenbankereignisse reagieren können.
Lerne JavaScript mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 30
- Lektionen
- 120
Häufig gestellte Fragen
Ist die Lektion „S3-Daten für bessere Abfrage-Performance partitionieren“ kostenlos?
Ja — der vollständige Text von „S3-Daten für bessere Abfrage-Performance partitionieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des MongoDB Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der MongoDB Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „S3-Daten für bessere Abfrage-Performance partitionieren“?
Sie definieren Partitionsattribute für S3-Pfade, damit Data Federation irrelevante Dateien auslassen und schnelle analytische Abfragen liefern kann. Du übst MongoDB Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um MongoDB Academy zu starten?
Keine Vorkenntnisse erforderlich. MongoDB Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „S3-Daten für bessere Abfrage-Performance partitionieren“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser MongoDB Academy-Lektion Code schreiben und ausführen?
Ja. Jede MongoDB Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Was ist Atlas Data Federation?
- S3- und Atlas-Quellen auf einen virtuellen Namensraum abbilden
- Aggregation-Pipelines über mehrere Quellen ausführen
- S3-Daten für bessere Abfrage-Performance partitionieren