Sie können sowohl Firebase Realtime Database als auch Cloud Firestore in Ihrer App verwenden und die Vorteile der jeweiligen Datenbanklösung nutzen, um Ihre Anforderungen zu erfüllen. Möglicherweise möchten Sie beispielsweise die Unterstützung von Realtime Database für die Anwesenheit nutzen, wie in Anwesenheit in Cloud Firestore erstellen beschrieben.
Weitere Informationen zu den Unterschieden zwischen den Datenbanken
Daten werden auf Cloud Firestore verschoben
Wenn Sie sich entschieden haben, einige Ihrer Daten von Realtime Database zu Cloud Firestore zu migrieren, sollten Sie den folgenden Ablauf berücksichtigen. Da jede Datenbank spezielle Anforderungen und strukturelle Aspekte hat, gibt es keinen automatisierten Migrationspfad. Stattdessen können Sie sich an dieser allgemeinen Vorgehensweise orientieren:
Datenstruktur und Sicherheitsregeln von Realtime Database zu Cloud Firestore zuordnen: Sowohl Realtime Database als auch Cloud Firestore basieren auf Firebase Authentication. Sie müssen also die Nutzerauthentifizierung für Ihre App nicht ändern. Die Sicherheitsregeln und das Datenmodell sind jedoch unterschiedlich. Es ist wichtig, diese Unterschiede sorgfältig zu berücksichtigen, bevor Sie Daten zu Cloud Firestore migrieren.
Verlaufsdaten verschieben: Wenn Sie Ihre neue Datenstruktur in Cloud Firestore einrichten, können Sie vorhandene Daten aus Realtime Database Ihrer neuen Cloud Firestore-Instanz zuordnen und übertragen. Wenn Sie jedoch beide Datenbanken in Ihrer App verwenden, müssen Sie keine Verlaufsdaten aus Realtime Database verschieben.
Neue Daten in Echtzeit in Firestore spiegeln: Mit Cloud Functions neue Daten in Ihre neue Cloud Firestore-Datenbank schreiben, wenn sie Realtime Database hinzugefügt werden
Machen Sie Cloud Firestore zur primären Datenbank für die migrierten Daten. Nachdem Sie einige Ihrer Daten migriert haben, verwenden Sie Cloud Firestore als primäre Datenbank und reduzieren Sie die Verwendung von Realtime Database für die migrierten Daten. Berücksichtigen Sie Versionen Ihrer App, die für diese Daten noch mit Realtime Database verknüpft sind, und überlegen Sie, wie Sie sie weiterhin unterstützen möchten.
Berücksichtigen Sie die Abrechnungskosten für Realtime Database und Cloud Firestore.
Daten zuordnen
Daten in Realtime Database sind als einzelner Baum strukturiert, während Cloud Firestore explizitere Datenhierarchien durch Dokumente, Sammlungen und Untersammlungen unterstützt. Wenn Sie einige Ihrer Daten von Realtime Database nach Cloud Firestore verschieben, sollten Sie möglicherweise eine andere Architektur für Ihre Daten in Betracht ziehen.
Wichtige Unterschiede
Wenn Sie Daten aus Ihrem vorhandenen Realtime Database-Baum in Cloud Firestore-Dokumente und ‑Sammlungen verschieben, sollten Sie die folgenden wichtigen Unterschiede zwischen den Datenbanken beachten, die sich auf die Strukturierung von Daten in Cloud Firestore auswirken können:
- Flache Abfragen bieten mehr Flexibilität bei hierarchischen Datenstrukturen.
- Komplexe Abfragen bieten einen höheren Detaillierungsgrad und machen doppelte Daten überflüssig.
- Abfragecursorn bieten eine robustere Paginierung.
- Für Transaktionen ist kein gemeinsamer Stamm für alle Ihre Daten mehr erforderlich und sie sind effizienter.
- Die Abrechnungskosten unterscheiden sich zwischen Realtime Database und Cloud Firestore. In vielen Fällen ist Cloud Firestore möglicherweise teurer als Realtime Database, insbesondere wenn Sie viele kleine Vorgänge verwenden. Erwägen Sie, die Anzahl der Vorgänge in Ihrer Datenbank zu reduzieren und unnötige Schreibvorgänge zu vermeiden. Weitere Informationen zu den Unterschieden bei der Abrechnung zwischen Realtime Database und Cloud Firestore
Best Practices in der Praxis
Das folgende Beispiel zeigt einige der Überlegungen, die Sie beim Übertragen von Daten zwischen Datenbanken anstellen sollten. Sie können flache Lesevorgänge und verbesserte Abfragefunktionen für natürlichere Datenstrukturen nutzen, als Sie es möglicherweise mit Realtime Database gewohnt sind.
Stellen Sie sich eine Stadtführer-App vor, mit der Nutzer Sehenswürdigkeiten in Städten auf der ganzen Welt finden können. Da Realtime Database keine flachen Lesevorgänge unterstützt, mussten Sie die Daten möglicherweise in zwei Knoten der obersten Ebene strukturieren:
// /cities/$CITY_KEY
{
name: "New York",
population: 8000000,
capital: False
}
// /city-landmark/$CITY_KEY/$LANDMARK_KEY
{
name: "Empire State Building",
category: "Architecture"
}
Cloud Firestore hat flache Lesevorgänge. Wenn Sie also Dokumente in einer Sammlung abfragen, werden keine Daten aus Untersammlungen abgerufen. Daher können Sie Informationen zu Sehenswürdigkeiten in einer Untercollection speichern:
// /cities/$CITY_ID
{
name: "New York",
population: 8000000,
capital: False,
landmarks: [... subcollection ...]
}
Dokumente dürfen maximal 1 MB groß sein. Das ist ein weiterer Grund, Sehenswürdigkeiten als Unterkollektion zu speichern, damit jedes Stadtdokument klein bleibt und Dokumente nicht durch verschachtelte Listen aufgebläht werden.
Die erweiterten Abfragefunktionen von Cloud Firestore reduzieren die Notwendigkeit, Daten für gängige Zugriffsmuster zu duplizieren. Stellen Sie sich beispielsweise einen Bildschirm in der Stadtführer-App vor, auf dem alle Hauptstädte nach Bevölkerungszahl sortiert angezeigt werden.
In Realtime Database ist die effizienteste Methode hierfür, eine separate Liste von Hauptstädten zu führen, die Daten aus der Liste cities
dupliziert, wie folgt:
{
cities: {
// ...
},
capital-cities: {
// ...
}
}
In Cloud Firestore können Sie eine Liste von Hauptstädten nach Bevölkerungszahl in einer einzigen Abfrage erstellen:
db.collection('cities')
.where('capital', '==', true)
.orderBy('population')
Weitere Informationen zum Cloud Firestore-Datenmodell und Lösungen mit weiteren Ideen zur Strukturierung Ihrer Cloud Firestore-Datenbank
Daten schützen
Unabhängig davon, ob Sie Cloud Firestore Security Rules für Android-, Apple- oder Web-Clients oder Identity Access Management (IAM) für Server verwenden, müssen Sie Ihre Daten sowohl in Cloud Firestore als auch in Realtime Database schützen. Die Nutzerauthentifizierung wird für beide Datenbanken von Authentication übernommen. Sie müssen Ihre Authentication-Implementierung also nicht ändern, wenn Sie Cloud Firestore verwenden.
Wichtige Unterschiede
- Mobile und Web-SDKs verwenden Cloud Firestore Security Rules, während Server-SDKs Identity Access Management (IAM) zum Sichern von Daten verwenden.
- Cloud Firestore Security Rules werden nicht kaskadiert, sofern Sie keinen Platzhalter verwenden. Dokumente und Sammlungen erben keine Regeln.
- Sie müssen Daten nicht mehr separat validieren (wie in Realtime Database).
- Cloud Firestore prüft Regeln, bevor eine Abfrage ausgeführt wird, um sicherzustellen, dass der Nutzer den entsprechenden Zugriff auf alle von der Abfrage zurückgegebenen Daten hat.
Verlaufsdaten zu Cloud Firestore übertragen
Nachdem Sie Ihre Daten- und Sicherheitsstrukturen den Daten- und Sicherheitsmodellen von Cloud Firestore zugeordnet haben, können Sie Ihre Daten hinzufügen. Wenn Sie nach der Migration Ihrer App von Realtime Database zu Cloud Firestore historische Daten abfragen möchten, fügen Sie Ihrer neuen Cloud Firestore-Datenbank einen Export Ihrer alten Daten hinzu. Wenn Sie sowohl Realtime Database als auch Cloud Firestore in Ihrer App verwenden möchten, können Sie diesen Schritt überspringen.
Damit neue Daten nicht mit alten überschrieben werden, sollten Sie zuerst Ihre Verlaufsdaten hinzufügen. Wenn Sie beiden Datenbanken gleichzeitig neue Daten hinzufügen, wie im nächsten Schritt beschrieben, müssen Sie darauf achten, dass neue Daten, die Cloud Firestore von Cloud Functions hinzugefügt werden, Vorrang haben.
So migrieren Sie Verlaufsdaten zu Cloud Firestore:
- Exportieren Sie Ihre Daten aus Realtime Database oder verwenden Sie ein aktuelles Back-up.
- Rufen Sie in der Firebase-Konsole den Abschnitt Realtime Database auf.
- Wählen Sie auf dem Tab Daten den Knoten auf Stammebene Ihrer Datenbank und dann im Menü JSON exportieren aus.
Erstellen Sie Ihre neue Datenbank in Cloud Firestore und fügen Sie Ihre Daten hinzu.
Berücksichtigen Sie die folgenden Strategien, wenn Sie einige Ihrer Daten zu Cloud Firestore migrieren:
- Schreiben Sie ein benutzerdefiniertes Skript, das Ihre Daten für Sie portiert. Wir können keine Vorlage für dieses Skript anbieten, da jede Datenbank individuelle Anforderungen hat. Cloud Firestore-Experten in unserem Slack-Kanal oder auf Stack Overflow können Ihr Skript prüfen oder Ratschläge für Ihre spezielle Situation geben.
- Mit den Server-SDKs (Node.js, Java, Python oder Go) können Sie Daten direkt in Cloud Firestore schreiben. Eine Anleitung zum Einrichten der Server-SDKs finden Sie unter Erste Schritte.
- Um große Datenmigrationen zu beschleunigen, verwenden Sie Batch-Schreibvorgänge und senden Sie bis zu 500 Vorgänge in einer einzigen Netzwerkanfrage.
- Um die Cloud Firestore-Ratenbeschränkungen einzuhalten, sollten Sie die Vorgänge auf 500 Schreibvorgänge pro Sekunde für jede Sammlung begrenzen.
Neue Daten zu Cloud Firestore hinzufügen
Damit Ihre Datenbanken auf dem neuesten Stand bleiben, fügen Sie beiden Datenbanken in Echtzeit neue Daten hinzu. Verwenden Sie Cloud Functions, um einen Schreibvorgang in Cloud Firestore auszulösen, wenn ein Client in Realtime Database schreibt. Achten Sie darauf, dass Cloud Firestore neuen Daten aus Cloud Functions Vorrang vor allen Schreibvorgängen einräumt, die Sie bei der Migration Ihrer Verlaufsdaten vornehmen.
Erstellen Sie eine Funktion, um neue oder sich ändernde Daten in Cloud Firestore zu schreiben, wenn ein Client Daten in Realtime Database schreibt. Weitere Informationen zu Realtime Database-Triggern für Cloud Functions
Cloud Firestore als primäre Datenbank für die migrierten Daten festlegen
Wenn Sie Cloud Firestore als primäre Datenbank für einige Ihrer Daten verwenden, müssen Sie alle von Ihnen eingerichteten Funktionen zur Datenspiegelung berücksichtigen und Ihre Cloud Firestore Security Rules validieren.
Wenn Sie Cloud Functions verwendet haben, um die Parität zwischen Ihren Datenbanken aufrechtzuerhalten, achten Sie darauf, dass Sie Schreibvorgänge nicht in einer Schleife in beiden Datenbanken duplizieren. Stellen Sie Ihre Funktion so um, dass sie in eine einzelne Datenbank schreibt, oder entfernen Sie die Funktion vollständig und beginnen Sie, die Schreibfunktion für die migrierten Daten in Apps, die noch mit Realtime Database verknüpft sind, schrittweise einzustellen. Wie Sie das für Ihre App handhaben, hängt von Ihren spezifischen Anforderungen und Ihren Nutzern ab.
Prüfen Sie, ob Ihre Daten angemessen geschützt sind. Überprüfen Sie Ihre Cloud Firestore Security Rules- oder IAM-Einrichtung.