Sie können sowohl Firebase Realtime Database als auch Cloud Firestore in Ihrer Anwendung verwenden und die Vorteile der jeweiligen Datenbanklösung nutzen, um Ihre Anforderungen zu erfüllen. Beispielsweise kannst du die Unterstützung von Realtime Database für die Anwesenheit nutzen, wie unter Anwesenheit in Cloud Firestore einrichten beschrieben.
Weitere Informationen zu den Unterschieden zwischen den Datenbanken
Daten werden nach Cloud Firestore verschoben
Wenn Sie einige Ihrer Daten von Realtime Database zu Cloud Firestore migrieren möchten, sollten Sie den folgenden Ablauf berücksichtigen. Da jede Datenbank individuelle Anforderungen und strukturelle Besonderheiten hat, gibt es keinen automatisierten Migrationspfad. Stattdessen können Sie sich an diesem allgemeinen Ablauf orientieren:
Ordnen Sie die Datenstruktur und die Sicherheitsregeln von Realtime Database zu Cloud Firestore zu. Sowohl Realtime Database als auch Cloud Firestore basieren auf Firebase Authentication. Sie müssen also die Nutzerauthentifizierung für Ihre Anwendung nicht ändern. Die Sicherheitsregeln und das Datenmodell sind jedoch unterschiedlich. Es ist wichtig, diese Unterschiede sorgfältig zu berücksichtigen, bevor Sie mit dem Verschieben von Daten nach Cloud Firestore beginnen.
Verlaufsdaten verschieben Wenn Sie Ihre neue Datenstruktur in Cloud Firestore einrichten, können Sie vorhandene Daten aus Realtime Database zuordnen und in Ihre neue Cloud Firestore-Instanz verschieben. 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. Verwenden Sie Cloud Functions, um neue Daten in Ihre neue Cloud Firestore-Datenbank zu schreiben, wenn sie zu Realtime Database hinzugefügt werden.
Cloud Firestore als primäre Datenbank für die migrierten Daten festlegen Nachdem Sie einen Teil 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 an Realtime Database gebunden sind, und wie Sie diese 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 über Dokumente, Sammlungen und Untersammlungen unterstützt. Wenn Sie einen Teil Ihrer Daten von Realtime Database nach Cloud Firestore verschieben, sollten Sie eine andere Architektur für Ihre Daten in Betracht ziehen.
Wichtige Unterschiede, die Sie berücksichtigen sollten
Wenn Sie Daten aus Ihrer vorhandenen Realtime Database-Struktur in Cloud Firestore-Dokumente und -Sammlungen verschieben, beachten Sie die folgenden wesentlichen Unterschiede zwischen den Datenbanken, die sich auf die Strukturierung der Daten in Cloud Firestore auswirken können:
- Flache Abfragen bieten mehr Flexibilität in hierarchischen Datenstrukturen.
- Komplexe Abfragen bieten mehr Granularität und reduzieren die Notwendigkeit doppelter Daten.
- Abfrage-Cursor bieten eine robustere Paginierung.
- Transaktionen erfordern keinen gemeinsamen Stamm mehr für alle Ihre Daten und 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 ausführen. Sie sollten die Anzahl der Vorgänge in Ihrer Datenbank reduzieren und unnötige Schreibvorgänge 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 Verschieben Ihrer Daten zwischen Datenbanken anstellen könnten. Sie können flache Lesevorgänge und verbesserte Abfragefunktionen für natürlichere Datenstrukturen nutzen, als Sie sie möglicherweise mit Realtime Database verwendet haben.
Stellen Sie sich eine Stadtführer-App vor, mit der Nutzer wichtige 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 auf oberster 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 verwendet 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 Untersammlung 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 Untersammlung zu speichern. So bleiben die einzelnen Stadtdokumente klein und werden nicht durch verschachtelte Listen aufgebläht.
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 City Guide-App vor, auf dem alle Hauptstädte nach Einwohnerzahl sortiert angezeigt werden.
In Realtime Database ist es am effizientesten, eine separate Liste der Hauptstädte zu führen, die Daten aus der Liste cities dupliziert, wie hier gezeigt:
{
cities: {
// ...
},
capital-cities: {
// ...
}
}
In Cloud Firestore können Sie eine Liste von Hauptstädten in der Reihenfolge ihrer Einwohnerzahl als einzelne Abfrage ausdrücken:
db.collection('cities')
.where('capital', '==', true)
.orderBy('population')
Weitere Informationen zum Cloud Firestore-Datenmodell finden Sie in unseren Lösungen. Dort finden Sie auch weitere Ideen zur Strukturierung Ihrer Cloud Firestore-Datenbank.
Daten schützen
Unabhängig davon, ob Sie Cloud Firestore Security Rules für Android-, Apple- oder Webclients oder Identity Access Management (IAM) für Server verwenden, sollten 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 also Ihre Implementierung von Authentication nicht ändern, wenn Sie Cloud Firestore verwenden.
Wichtige Unterschiede, die Sie berücksichtigen sollten
- 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, es sei denn, Sie verwenden einen Platzhalter. Dokumente und Sammlungen übernehmen ansonsten keine Regeln.
- Sie müssen die Daten nicht mehr separat validieren (wie in Realtime Database).
- Cloud Firestore prüft die Regeln vor dem Ausführen einer Abfrage, um sicherzustellen, dass der Nutzer die entsprechenden Zugriffsrechte für alle von der Abfrage zurückgegebenen Daten hat.
Verlaufsdaten in Cloud Firestore verschieben
Nachdem Sie Ihre Daten- und Sicherheitsstrukturen den Daten- und Sicherheitsmodellen von Cloud Firestore zugeordnet haben, können Sie mit dem Hinzufügen Ihrer Daten beginnen. Wenn Sie Verlaufsdaten abfragen möchten, nachdem Sie Ihre Anwendung von Realtime Database zu Cloud Firestore verschoben haben, fügen Sie einen Export Ihrer alten Daten in Ihre neue Cloud Firestore-Datenbank 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 Daten ü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 neuen Daten, die Cloud Firestore von Cloud Functions hinzugefügt werden, Vorrang geben.
So migrieren Sie Verlaufsdaten zu Cloud Firestore:
- Exportieren Sie Ihre Daten aus Realtime Database oder verwenden Sie eine aktuelle Sicherung.
- Rufen Sie in der Firebase Console Datenbanken und Speicher > Realtime Database auf.
- Wählen Sie auf dem Tab Daten den Knoten auf Stammebene Ihrer Datenbank und dann im Menü die Option 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 einen Teil Ihrer Daten zu Cloud Firestore verschieben:
- Schreiben Sie ein benutzerdefiniertes Skript, mit dem Ihre Daten übertragen werden. Da jede Datenbank individuelle Anforderungen hat, können wir keine Vorlage für dieses Skript anbieten. Cloud Firestore-Experten in unserem Slack-Kanal oder auf Stack Overflow können Ihr Skript jedoch prüfen oder Sie zu Ihrer spezifischen Situation beraten.
- Verwenden Sie die Server-SDKs (Node.js, Java, Python oder Go), um Daten direkt in Cloud Firestore zu schreiben. Eine Anleitung zum Einrichten der Server-SDKs finden Sie unter Erste Schritte.
- Wenn Sie große Datenmengen migrieren möchten, können Sie Batch-Schreibvorgänge verwenden und bis zu 500 Vorgänge in einer einzigen Netzwerkanfrage senden.
- Um die Cloud Firestore-Ratenbegrenzungen nicht zu überschreiten, sollten Sie die Vorgänge auf 500 Schreibvorgänge pro Sekunde für jede Sammlung beschränken.
Neue Daten zu Cloud Firestore hinzufügen
Damit die Datenbanken synchron bleiben, müssen Sie neue Daten in Echtzeit zu beiden Datenbanken hinzufügen. 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 aus der Migration von Verlaufsdaten gibt.
Erstellen Sie eine Funktion, die neue oder geänderte Daten in Cloud Firestore schreibt, 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öchten, müssen Sie alle von Ihnen eingerichteten Datenspiegelungsfunktionen 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 über beide Datenbanken hinweg duplizieren. Stellen Sie Ihre Funktion so um, dass sie in eine einzelne Datenbank schreibt, oder entfernen Sie die Funktion vollständig und beginnen Sie damit, die Schreibfunktion für die migrierten Daten in Apps, die noch an Realtime Database gebunden sind, auslaufen zu lassen. Wie Sie dies für Ihre App handhaben, hängt von Ihren spezifischen Anforderungen und Ihren Nutzern ab.
Prüfen Sie, ob Ihre Daten ordnungsgemäß gesichert sind. Cloud Firestore Security Rules- oder IAM-Einrichtung prüfen.