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. Sie können beispielsweise die Unterstützung von Realtime Database für die Anwesenheitserkennung nutzen, wie unter Anwesenheitserkennung in Cloud Firestore beschrieben.
Weitere Informationen zu den Unterschieden zwischen den Datenbanken.
Daten zu Cloud Firestore verschieben
Wenn Sie einige Ihrer Daten aus Realtime Database zu Cloud Firestore migrieren möchten, sollten Sie den folgenden Ablauf in Betracht ziehen. Da jede Datenbank individuelle Anforderungen und strukturelle Überlegungen hat, gibt es keinen automatisierten Migrationspfad. Stattdessen können Sie dieser allgemeinen Abfolge folgen:
Datenstruktur und Sicherheitsregeln von Realtime Database zu Cloud Firestore zuordnen. Sowohl Realtime Database als auch Cloud Firestore verwenden 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 verschieben.
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 verschieben. Wenn Sie jedoch beide Datenbanken in Ihrer App verwenden, müssen Sie keine Verlaufsdaten aus der Realtime Database verschieben.
Neue Daten in Echtzeit zu Firestore spiegeln Mit Cloud Functions können Sie neue Daten in Ihre neue Cloud Firestore Datenbank schreiben, sobald sie der Realtime Databasehinzugefügt werden.
Als primäre Datenbank für die migrierten Daten festlegenCloud Firestore Nachdem Sie einige Ihrer Daten migriert haben, verwenden Sie Cloud Firestore als primäre Datenbank und reduzieren Sie die Realtime Database Nutzung für die migrierten Daten. Berücksichtigen Sie Versionen Ihrer App, die für diese Daten noch mit der Realtime Database verknüpft sind, und wie Sie sie weiterhin unterstützen möchten.
Berücksichtigen Sie die Abrechnungskosten für die 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 aus Realtime Database zu Cloud Firestore verschieben, sollten Sie eine andere Architektur für Ihre Daten in Betracht ziehen.
Wichtige Unterschiede
Wenn Sie Daten aus Ihrem vorhandenen Realtime Database Baum zu Cloud Firestore Dokumenten und Sammlungen verschieben, sollten Sie die folgenden wichtigen Unterschiede zwischen den Datenbanken berücksichtigen, 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 mehr Granularität und reduzieren den Bedarf an doppelten Daten.
- Abfragecursor bieten eine robustere Paginierung.
- Für Transaktionen ist keine gemeinsame Root 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 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önnen. Sie können flache Lesevorgänge und verbesserte Abfragefunktionen für natürlichere Datenstrukturen nutzen, als Sie es möglicherweise mit Realtime Database getan haben.
Stellen Sie sich eine App für einen Reiseführer vor, mit der Nutzer bemerkenswerte 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 unterstützt flache Lesevorgänge. Wenn Sie also nach Dokumenten in einer Sammlung suchen, 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 haben eine maximale Größe von 1 MB. Das ist ein weiterer Grund, Sehenswürdigkeiten als Untersammlung zu speichern, damit jedes Stadtdokument klein bleibt und Dokumente nicht mit verschachtelten Listen überladen werden.
Cloud Firestores erweiterte Abfragefunktionen reduzieren den Bedarf an
doppelten Daten für gängige Zugriffsmuster. Stellen Sie sich beispielsweise einen Bildschirm in
der App für den Reiseführer vor, auf dem alle Hauptstädte nach Einwohnerzahl sortiert sind.
In Realtime Database, die effizienteste Methode hierfür ist, eine separate
Liste von Hauptstädten zu führen, die Daten aus der cities Liste dupliziert:
{
cities: {
// ...
},
capital-cities: {
// ...
}
}
In Cloud Firestore, können Sie eine Liste von Hauptstädten nach Einwohnerzahl sortiert mit einer einzigen Abfrage ausdrücken:
db.collection('cities')
.where('capital', '==', true)
.orderBy('population')
Weitere Informationen zum Cloud FirestoreDatenmodell und weitere Ideen zur Strukturierung Ihrer Cloud FirestoreDatenbank finden Sie in unseren Lösungen.
Daten schützen
Unabhängig davon, ob Sie Cloud Firestore Security Rules für Android-, Apple- oder Web-Clients oder die Identitäts- und Zugriffsverwaltung (Identity and 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 verwaltet, Sie müssen Ihre Implementierung von Authentication also nicht ändern, wenn Sie verwenden Cloud Firestore.
Wichtige Unterschiede
- Mobile und Web-SDKs verwenden Cloud Firestore Security Rules, während Server SDKs die Identitäts- und Zugriffsverwaltung (Identity and Access Management, IAM) verwenden, um Daten zu schützen.
- Cloud Firestore Security Rules werden nur kaskadiert, wenn Sie einen Platzhalter verwenden. Andernfalls werden Regeln nicht von Dokumenten und Sammlungen übernommen.
- 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 Daten hat, die von der Abfrage zurückgegeben werden.
Verlaufsdaten zu Cloud Firestore verschieben
Nachdem Sie Ihre Daten- und Sicherheitsstrukturen den Cloud Firestore's Daten- und Sicherheitsmodellen zugeordnet haben, können Sie Ihre Daten hinzufügen. Wenn Sie Verlaufsdaten abfragen möchten, nachdem Sie Ihre App von Realtime Database zu Cloud Firestore verschoben haben, fügen Sie einen Export Ihrer alten Daten Ihrer neuen 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.
Um zu vermeiden, dass neue Daten 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 einräumen.
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 Konsole den Realtime Database Bereich auf.
- Wählen Sie auf dem Tab Daten den Knoten der obersten Ebene Ihrer Datenbank aus und wählen Sie JSON exportieren im Menü 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 verschieben:
- Schreiben Sie ein benutzerdefiniertes Skript, das Ihre Daten für Sie portiert. Da jede Datenbank individuelle Anforderungen hat, können wir keine Vorlage für dieses Skript anbieten. Cloud Firestore Experten in unserem Slack-Channel oder auf Stack Overflow können Ihr Skript jedoch überprüfen oder Sie in 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.
- 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 Ratenlimits nicht zu überschreiten, beschränken Sie die Vorgänge auf 500 Schreibvorgänge pro Sekunde für jede Sammlung.
Neue Daten zu Cloud Firestore hinzufügen
Um die Parität zwischen Ihren Datenbanken aufrechtzuerhalten, fügen Sie beiden Datenbanken in Echtzeit neue Daten hinzu. Mit Cloud Functions können Sie einen Schreibvorgang in Cloud Firestore auslösen, wenn ein Client in die 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 von Verlaufsdaten ausführen.
Erstellen Sie eine Funktion, um neue oder sich ändernde Daten in Cloud Firestore zu schreiben, wenn ein Client Daten in die Realtime Databaseschreibt. 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 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 dies für Ihre App handhaben, hängt von Ihren spezifischen Anforderungen und Ihren Nutzern ab.
Prüfen Sie, ob Ihre Daten ordnungsgemäß geschützt sind. Validieren Sie Ihre Cloud Firestore Security Rules oder Ihre IAM-Einrichtung.