Der native Firestore-Modus besteht aus zwei Gruppen von Vorgängen: Firestore Core- und Firestore Pipeline-Vorgänge.
Die Firestore Core-Vorgänge bieten die Standardfunktionen zum Erstellen, Lesen, Aktualisieren und Löschen (CRUD) von Dokumenten sowie integrierte Unterstützung für Echtzeit-Listenabfragen und Offline-Persistenz. Ein wesentlicher Unterschied in dieser Version besteht darin, dass Indexe optional sind und nicht automatisch für einzelne Felder erstellt werden. Dadurch können Abfragen ohne vorherige Indexkonfiguration ausgeführt werden. Bei nicht indexierten Abfragen wird jedoch standardmäßig die gesamte Sammlung gescannt. Dies kann zu einer erhöhten Latenz und höheren Kosten führen, wenn das Dataset wächst.
Die Firestore Pipeline-Vorgänge sind ein zentrales Feature der Firestore Enterprise-Edition, das auf einer erweiterten Abfrage-Engine basiert, um die Bandbreite der möglichen Abfragen erheblich zu erweitern. Firestore-Pipelinevorgänge verwenden eine flexible Abfragesyntax und eine spezielle Indexierungsmethode, bei der Indexe optional sind und nicht automatisch erstellt werden. Dies ermöglicht erweiterte Datenabrufvorgänge für Anwendungen.
Funktionen von Firestore Core-Vorgängen
Die Kernvorgänge ermöglichen Standard-CRUD-Vorgänge und Echtzeit-Listen-Abfragen. Wenn Sie diese Vorgänge jedoch in der Enterprise-Version verwenden, ändert sich das zugrunde liegende Verhalten in Bezug auf die Indexierung und Abrechnung im Vergleich zur Standard-Version erheblich.
Funktionalität und Kontinuität
Für die Kernvorgänge wird die aus der Standard-Edition bekannte Method-Chaining-Syntax beibehalten (z. B. .where(), .orderBy()). Diese Vorgänge unterstützen Echtzeit-Listenabfragen und Offline-Persistenz für Mobil- und Webclients. Wir empfehlen, diese Vorgänge für standardmäßige transaktionale Arbeitslasten, einfache Suchvorgänge und die Migration von vorhandenem Anwendungscode zu verwenden.
Benutzerdefinierte Indexierung
Im Gegensatz zur Standard-Version werden in der Enterprise-Version beim Core-Vorgang keine Einzelfeldindexe automatisch erstellt. Indexe sind optional und nicht erforderlich, um eine Abfrage auszuführen. Wenn ein bestimmter Index fehlt, wird bei der Abfrage ein vollständiger Sammlungs-Scan durchgeführt. Nicht indexierte Abfragen ermöglichen zwar ein schnelles Prototyping, können aber mit zunehmender Größe des Datasets langsamer werden und mehr kosten. Entwickler müssen Indexe manuell erstellen, um die Abfrageleistung zu optimieren und den Verbrauch von Lese-Einheiten zu reduzieren.
Abrechnungsmodell (einheitenbasiert)
Leseeinheiten werden in 4‑KB-Tranchen und nicht pro Dokumentanzahl berechnet. Bei einer nicht indexierten Abfrage, die eine große Sammlung durchsucht, werden Leseeinheiten basierend auf der Gesamtzahl der Byte berechnet, die in allen Dokumenten gescannt werden. Schreibeinheiten werden in 1-KB-Tranchen abgerechnet. Beim Schreiben eines Dokuments werden Einheiten für die Daten sowie zusätzliche Einheiten für jeden aktualisierten Indexeintrag verbraucht. Anders als in der Standard Edition, in der die automatische Einzelfeldindexierung erzwungen wird, können Sie jetzt bestimmte Felder für die Indexierung auswählen, um die Schreibkosten und die Leistung zu optimieren.
Funktionen von Firestore-Pipelinevorgängen
Die Firestore Enterprise-Version mit Pipeline-Vorgängen nutzt eine erweiterte Abfrage-Engine, mit der viele bestehende Einschränkungen der Firestore Standard-Version aufgehoben werden. Firestore-Pipeline-Vorgänge bieten Hunderte zusätzlicher Abfragefunktionen. Die Firestore-Pipeline-Vorgänge haben die folgenden Funktionen:
Composable-Syntax für Phasen
Pipeline-Abfragen werden erstellt, indem eine Reihe von sequenziellen Phasen definiert wird, die der Reihe nach ausgeführt werden. Dies ermöglicht komplexe Vorgänge wie das Filtern nach dem Ergebnis einer Aggregation, was bisher nicht möglich war.
Im folgenden Beispiel sehen Sie eine Pipeline-Abfrage, mit der die Anzahl der eindeutigen Produkt-IDs ermittelt wird, die im letzten Monat aufgerufen wurden:
guard let cutoffDate = Calendar.current.date(byAdding: .month, value: -1, to: Date()) else {
return
}
let snapshot = try await db.pipeline()
.collection("productViews")
.where(Field("viewedAt").greaterThan(cutoffDate.timeIntervalSince1970))
.aggregate([Field("productId").countDistinct().as("uniqueProductViews")])
.execute()
Erweiterte Funktionen
Die Pipelines-Abfrage bietet eine Vielzahl neuer Funktionen, darunter:
- Aggregationen: Unterstützung für neue Aggregationsfunktionen (wie
sum(...),min(...)undcount_distinct(...)) in Kombination mit beliebigen Gruppierungsfeldern. - Komplexes Filtern: Unterstützung von Hunderten zusätzlicher Funktionen zum Ausdrücken beliebig komplexer
where(...)-Anweisungen, einschließlichregex_match(...),add(...)undstr_contains(...), ohne strenge Indexanforderungen. - Teilweise Lese-/Projektionsvorgänge: Mit
select(...),remove_fields(...)und vielen anderen Phasen zur Dokumentbearbeitung können dynamische Teilmengen von Dokumenten abgerufen werden.
Weitere Informationen zu diesen Funktionen finden Sie unter Daten mit Pipelinevorgängen abfragen.
Echtzeit- und Offlinesupport
Um Realtime und Offline zu nutzen, können Entwickler die Firestore Core-Vorgänge in der Firestore Enterprise-Version verwenden.
Client- und Tooling-Integration
Die Enterprise-Version enthält spezielle Funktionen für die Interaktion mit Pipeline-Abfragen und deren Verwaltung:
- Abfrageerklärung und ‑profilerstellung:Mit den Ergebnissen von „Query Explain“ können Sie nachvollziehen, wie viele Lese- oder Schreibeinheiten eine Abfrage verbraucht, und die Ausführung analysieren.
- Query Insights: Die Enterprise-Version unterstützt Query Insights. Damit können Sie ermitteln, wo Indexe erstellt werden könnten, um Leistung und Kosten zu verbessern. Sie erhalten Einblick in die wichtigsten Abfragen, die in Ihrer Datenbank ausgeführt werden, und in deren Leistungsmerkmale.
- Neue Indextypen : Sie können spezielle Indexe für die Enterprise-Version erstellen, einschließlich Indextypen wie Sparse-, Non-Sparse- und Unique-Indexe. Außerdem können Sie Vektorsuchindizes für Enterprise-Datenbanken erstellen und bearbeiten.
Unterschiede zwischen Firestore Standard und Firestore Enterprise
Der wesentliche betriebliche Unterschied zwischen den Core- und Pipeline-Vorgängen liegt in der Verwaltung der Indexierung, die sich direkt auf Leistung und Kosten auswirkt.
| Firestore Standard – Kernvorgänge | Firestore Enterprise – Core- und Pipeline-Vorgänge | |
| Anforderung an die Indexierung | Für Abfragen sind Indexe erforderlich.
Indexe für einzelne Felder werden automatisch erstellt. Für komplexere Abfragen sind zusammengesetzte Indexe oder Sammlungsgruppenindexe erforderlich, die manuell konfiguriert werden müssen. |
Indexe sind nicht erforderlich und daher für Abfragen optional.
Sie definieren Indexe nach Bedarf. Die Enterprise-Version unterstützt auch eine größere Auswahl an Indextypen, darunter nicht-sparse/sparse und eindeutige Indexe. |
| Leistung | Indexierte Abfragen:Leistung und Kosten werden mit der Größe des Ergebnissatzes skaliert. |
Nicht indexierte Abfragen:Leistung und Kosten skalieren mit der Größe Ihres Datasets. Indexierte Abfragen:Leistung und Kosten werden mit der Größe des Ergebnissatzes skaliert. Wir empfehlen, die Tools „Query Explain“ und „Query Insights“ zu verwenden, um Indexe zu erstellen und die Leistung und Kosten Ihrer Abfragen zu verbessern. |
| Auswirkungen auf die Speicherkosten | Sie verursachen Speicher-Overhead durch automatische und zusammengesetzte Indexe. | Sie sparen Speicherkosten, da nicht automatisch für jedes Feld Indexe erstellt werden. |
| Cost Basis | Die Abrechnung erfolgt pro Lese-, Schreib- und Löschvorgang für ein Dokument. | Die Abrechnung erfolgt pro Leseeinheit (4-KB-Tranchen) und Schreibeinheit (1-KB-Tranchen). Für das Schreiben von Indexeinträgen werden Schreibeinheiten verbraucht. |
| Sicherheitsregeln | Sicherheitsregeln schützen Sammlungen durch Überprüfung der Lese-/Schreibberechtigungen. | Sicherheitsregeln schützen Sammlungen durch Überprüfung der Lese-/Schreibberechtigungen. Im Leitfaden Datenmodell erfahren Sie, wie Sie Ihre Daten modellieren, um Pipeline-Abfragen zu unterstützen. |