Firebase is back at Google I/O on May 10! Register now

Verwenden Sie Cloud Firestore mit Firebase Realtime Database

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Sie können sowohl Firebase Realtime Database als auch Cloud Firestore in Ihrer App verwenden und die Vorteile jeder Datenbanklösung entsprechend Ihren Anforderungen nutzen. Beispielsweise möchten Sie möglicherweise die Unterstützung von Realtime Database für Anwesenheit nutzen, wie in Erstellen von Anwesenheit in Cloud Firestore beschrieben.

Erfahren Sie mehr über die Unterschiede zwischen den Datenbanken .

Verschieben von Daten in Cloud Firestore

Wenn Sie sich entschieden haben, einige Ihrer Daten von Realtime Database zu Cloud Firestore zu migrieren, ziehen Sie den folgenden Ablauf in Betracht. Da jede Datenbank einzigartige Anforderungen und strukturelle Überlegungen hat, gibt es keinen automatisierten Migrationspfad. Stattdessen können Sie diesem allgemeinen Verlauf folgen:

  1. Ordnen Sie die Datenstruktur und Sicherheitsregeln von Realtime Database Cloud Firestore zu. Sowohl Realtime Database als auch Cloud Firestore basieren auf der Firebase-Authentifizierung, sodass Sie die Benutzerauthentifizierung für Ihre App nicht ändern müssen. Die Sicherheitsregeln und das Datenmodell sind jedoch unterschiedlich und es ist wichtig, diese Abweichungen sorgfältig zu berücksichtigen, bevor Sie mit dem Verschieben von Daten in Cloud Firestore beginnen.

  2. Verschieben Sie historische Daten. Während Sie Ihre neue Datenstruktur in Cloud Firestore einrichten, können Sie vorhandene Daten aus der Echtzeitdatenbank zuordnen und in Ihre neue Cloud Firestore-Instanz verschieben. Wenn Sie jedoch beide Datenbanken in Ihrer App verwenden, müssen Sie keine Verlaufsdaten aus der Echtzeitdatenbank verschieben.

  3. Spiegeln Sie neue Daten in Echtzeit in Firestore. Verwenden Sie Cloud Functions, um neue Daten in Ihre neue Cloud Firestore-Datenbank zu schreiben, wenn sie zur Echtzeitdatenbank hinzugefügt werden.

  4. Machen Sie Cloud Firestore zu Ihrer primären Datenbank für die migrierten Daten. Nachdem Sie einige Ihrer Daten migriert haben, verwenden Sie Cloud Firestore als Ihre primäre Datenbank und reduzieren Sie die Nutzung der Echtzeitdatenbank für die migrierten Daten. Berücksichtigen Sie Versionen Ihrer App, die für diese Daten noch an die Realtime Database gebunden sind, und überlegen Sie, wie Sie sie weiterhin unterstützen möchten.

Stellen Sie sicher, dass Sie die Abrechnungskosten sowohl für Realtime Database als auch für Cloud Firestore berücksichtigen.

Ordnen Sie Ihre Daten zu

Daten in der Echtzeitdatenbank 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 zu Cloud Firestore verschieben, sollten Sie eine andere Architektur für Ihre Daten in Betracht ziehen.

Wichtige Unterschiede zu berücksichtigen

Wenn Sie Daten aus Ihrem vorhandenen Realtime Database-Baum in Cloud Firestore-Dokumente und -Sammlungen verschieben, beachten Sie die folgenden Hauptunterschiede zwischen den Datenbanken, die sich darauf auswirken können, wie Sie Daten in Cloud Firestore strukturieren:

  • Flache Abfragen bieten mehr Flexibilität in hierarchischen Datenstrukturen.
  • Komplexe Abfragen bieten mehr Granularität und reduzieren den Bedarf an doppelten Daten.
  • Abfrage-Cursor bieten eine robustere Paginierung.
  • Transaktionen erfordern keinen gemeinsamen Stamm für alle Ihre Daten mehr 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 sich auf viele kleine Vorgänge verlassen. Erwägen Sie, die Anzahl der Vorgänge in Ihrer Datenbank zu reduzieren und unnötige Schreibvorgänge zu vermeiden. Erfahren Sie mehr über die Unterschiede bei der Abrechnung zwischen Realtime Database und Cloud Firestore.

Best Practices in Aktion

Das folgende Beispiel spiegelt einige der Überlegungen wider, die Sie möglicherweise anstellen, wenn Sie Ihre Daten zwischen Datenbanken verschieben. Sie können flache Lesevorgänge und verbesserte Abfragefunktionen für natürlichere Datenstrukturen nutzen, als Sie es möglicherweise mit Realtime Database verwendet haben.

Ziehen Sie eine Stadtführer-App in Betracht, die Benutzern hilft, bemerkenswerte Sehenswürdigkeiten in Städten auf der ganzen Welt zu finden. Da der Realtime Database flache Lesevorgänge fehlen, mussten Sie die Daten möglicherweise wie folgt 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 verfügt über flache Lesevorgänge, sodass beim Abfragen von Dokumenten in einer Sammlung keine Daten aus untergeordneten Sammlungen abgerufen werden. Folglich können Sie Orientierungspunktinformationen 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, was ein weiterer Grund dafür ist, Sehenswürdigkeiten als Untersammlung zu speichern, um jedes Stadtdokument klein zu halten, anstatt Dokumente mit verschachtelten Listen aufzublähen.

Die erweiterten Abfragefunktionen von Cloud Firestore reduzieren die Notwendigkeit, Daten für allgemeine Zugriffsmuster zu duplizieren. Stellen Sie sich beispielsweise einen Bildschirm in der Stadtführer-App vor, der alle Hauptstädte nach Einwohnerzahl geordnet anzeigt. In Realtime Database ist dies am effizientesten, eine separate Liste von Hauptstädten zu pflegen, die Daten aus der cities dupliziert, wie folgt:

{
   cities: {
    // ...
   },

   capital-cities: {
     // ...
   }
}

In Cloud Firestore können Sie eine Liste der Hauptstädte in der Reihenfolge ihrer Einwohnerzahl in einer einzigen Abfrage ausdrücken:

db.collection('cities')
    .where('capital', '==', true)
    .orderBy('population')

Lesen Sie mehr über das Cloud Firestore-Datenmodell und werfen Sie einen Blick auf unsere Lösungen für weitere Ideen zur Strukturierung Ihrer Cloud Firestore-Datenbank.

Sichern Sie Ihre Daten

Unabhängig davon, ob Sie Cloud Firestore-Sicherheitsregeln für Android-, Apple- oder Webclients oder Identity Access Management (IAM) für Server verwenden, stellen Sie sicher, dass Sie Ihre Daten in Cloud Firestore sowie in der Echtzeitdatenbank sichern. Die Benutzerauthentifizierung wird von Authentication für beide Datenbanken verarbeitet, sodass Sie Ihre Implementierung von Authentication nicht ändern müssen, wenn Sie mit der Verwendung von Cloud Firestore beginnen.

Wichtige Unterschiede zu berücksichtigen

  • Mobile und Web-SDKs verwenden Cloud Firestore-Sicherheitsregeln, während Server-SDKs Identity Access Management (IAM) verwenden, um Daten zu sichern.
  • Cloud Firestore-Sicherheitsregeln werden nicht kaskadiert, es sei denn, Sie verwenden einen Platzhalter. Dokumente und Sammlungen erben sonst keine Regeln.
  • Sie müssen Daten nicht mehr separat validieren (wie Sie es in Realtime Database getan haben).
  • Cloud Firestore überprüft die Regeln vor dem Ausführen einer Abfrage, um sicherzustellen, dass der Benutzer den entsprechenden Zugriff auf alle von der Abfrage zurückgegebenen Daten hat.

Verschieben Sie Verlaufsdaten in Cloud Firestore

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 planen, Verlaufsdaten abzufragen, nachdem Sie Ihre App von der Echtzeitdatenbank zu Cloud Firestore verschoben haben, fügen Sie einen Export Ihrer alten Daten zu Ihrer neuen Cloud Firestore-Datenbank hinzu. Wenn Sie planen, sowohl Realtime Database als auch Cloud Firestore in Ihrer App zu verwenden, können Sie diesen Schritt überspringen.

Um zu vermeiden, dass neue Daten mit alten Daten überschrieben werden, sollten Sie zuerst Ihre historischen Daten hinzufügen. Wenn Sie, wie im nächsten Schritt beschrieben, gleichzeitig neue Daten zu beiden Datenbanken hinzufügen, stellen Sie sicher, dass Sie neuen Daten, die von Cloud Functions zu Cloud Firestore hinzugefügt werden, Vorrang einräumen.

Führen Sie die folgenden Schritte aus, um Verlaufsdaten zu Cloud Firestore zu migrieren:

  1. Exportieren Sie Ihre Daten aus der Echtzeitdatenbank oder verwenden Sie eine aktuelle Sicherung .
    1. Gehen Sie in der Firebase-Konsole zum Abschnitt Realtime Database .
    2. Wählen Sie auf der Registerkarte Daten den Knoten auf Stammebene Ihrer Datenbank aus, und wählen Sie im Menü die Option JSON exportieren aus.
  2. 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 in Cloud Firestore verschieben:

    • Schreiben Sie ein benutzerdefiniertes Skript, das Ihre Daten für Sie portiert. Obwohl wir keine Vorlage für dieses Skript anbieten können, da jede Datenbank eigene Anforderungen hat, können Cloud Firestore-Experten in unserem Slack-Kanal oder auf Stack Overflow Ihr Skript überprüfen oder Ratschläge für Ihre spezifische Situation geben.
    • Verwenden Sie die Server-SDKs (Node.js, Java, Python oder Go), um Daten direkt in Cloud Firestore zu schreiben. Anweisungen 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 Netzwerkanforderung.
    • Um die Ratenlimits von Cloud Firestore einzuhalten , begrenzen Sie die Vorgänge für jede Sammlung auf 500 Schreibvorgänge/Sekunde.

Neue Daten zu Cloud Firestore hinzufügen

Um die Parität zwischen Ihren Datenbanken aufrechtzuerhalten, fügen Sie in Echtzeit neue Daten zu beiden Datenbanken hinzu. Verwenden Sie Cloud Functions, um einen Schreibvorgang in Cloud Firestore auszulösen, wenn ein Client in die Echtzeitdatenbank schreibt. Stellen Sie sicher, dass Cloud Firestore neuen Daten aus Cloud Functions Vorrang vor allen Schreibvorgängen einräumt, die Sie aus Ihrer historischen Datenmigration vornehmen.

Erstellen Sie eine Funktion, um jedes Mal, wenn ein Client Daten in die Echtzeitdatenbank schreibt, neue oder sich ändernde Daten in Cloud Firestore zu schreiben. Erfahren Sie mehr über Realtime Database-Trigger für Cloud Functions.

Machen Sie Cloud Firestore zu Ihrer primären Datenbank für die migrierten Daten

Wenn Sie sich entschieden haben, Cloud Firestore als primäre Datenbank für einige Ihrer Daten zu verwenden, stellen Sie sicher, dass Sie alle von Ihnen eingerichteten Datenspiegelungsfunktionen berücksichtigen und Ihre Cloud Firestore-Sicherheitsregeln validieren.

  1. Wenn Sie Cloud Functions verwendet haben, um die Parität zwischen Ihren Datenbanken aufrechtzuerhalten, stellen Sie sicher, dass Sie keine Schreibvorgänge in beiden Datenbanken in einer Schleife duplizieren. Stellen Sie Ihre Funktion so um, dass sie in eine einzelne Datenbank schreibt, oder entfernen Sie die Funktion vollständig und beginnen Sie mit der schrittweisen Einstellung der Schreibfunktion für die migrierten Daten in Apps, die noch an die Echtzeitdatenbank gebunden sind. Wie Sie dies für Ihre App handhaben, hängt von Ihren spezifischen Anforderungen und Ihren Benutzern ab.

  2. Stellen Sie sicher, dass Ihre Daten ordnungsgemäß gesichert sind. Validieren Sie Ihre Cloud Firestore-Sicherheitsregeln oder Ihr IAM-Setup.