Verwenden Sie Cloud Firestore mit Firebase Realtime Database

Sie können in Ihrer App sowohl Firebase Realtime Database als auch Cloud Firestore verwenden und die Vorteile jeder Datenbanklösung entsprechend Ihren Anforderungen nutzen. Beispielsweise möchten Sie möglicherweise die Präsenzunterstützung von Realtime Database nutzen, wie unter „Präsenz in Cloud Firestore erstellen“ beschrieben.

Erfahren Sie mehr über die Unterschiede zwischen den Datenbanken .

Daten in Cloud Firestore verschieben

Wenn Sie sich entschieden haben, dass Sie einige Ihrer Daten von Realtime Database zu Cloud Firestore migrieren möchten, 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 Fortschritt folgen:

  1. Ordnen Sie die Datenstruktur und Sicherheitsregeln von der Echtzeitdatenbank dem 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. Allerdings sind die Sicherheitsregeln und das Datenmodell unterschiedlich und es ist wichtig, diese Unterschiede sorgfältig zu berücksichtigen, bevor Sie mit der Verschiebung 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 historische Daten nicht 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, während diese zur Echtzeitdatenbank hinzugefügt werden.

  4. Machen Sie Cloud Firestore zu Ihrer primären Datenbank für die migrierten Daten. Sobald Sie einige Ihrer Daten migriert haben, verwenden Sie Cloud Firestore als Ihre primäre Datenbank und reduzieren Sie die Nutzung Ihrer Echtzeitdatenbank für die migrierten Daten. Berücksichtigen Sie Versionen Ihrer App, die für diese Daten noch an die Echtzeitdatenbank gebunden sind, und überlegen Sie, wie Sie diese 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 in Cloud Firestore verschieben, möchten Sie möglicherweise eine andere Architektur für Ihre Daten in Betracht ziehen.

Wichtige Unterschiede, die es zu berücksichtigen gilt

Wenn Sie Daten aus Ihrer vorhandenen Echtzeitdatenbankstruktur in Cloud Firestore-Dokumente und -Sammlungen verschieben, beachten Sie die folgenden Hauptunterschiede zwischen den Datenbanken, die sich auf die Strukturierung von Daten in Cloud Firestore auswirken können:

  • Flache Abfragen bieten mehr Flexibilität in hierarchischen Datenstrukturen.
  • Komplexe Abfragen bieten eine höhere Granularität und reduzieren den Bedarf an doppelten Daten.
  • Abfragecursor 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 auf viele kleine Vorgänge angewiesen sind. 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.

Denken Sie über eine Stadtführer-App nach, mit der Benutzer wichtige Sehenswürdigkeiten in Städten auf der ganzen Welt finden können. Da es in der Echtzeitdatenbank an flachen Lesevorgängen mangelt, 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 bei der Abfrage von Dokumenten in einer Sammlung keine Daten aus Untersammlungen 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. Dies ist ein weiterer Grund, 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 gängige Zugriffsmuster zu duplizieren. Stellen Sie sich beispielsweise einen Bildschirm in der Stadtführer-App vor, der alle Hauptstädte nach Bevölkerungszahl geordnet anzeigt. In der Echtzeitdatenbank lässt sich dies am effizientesten erreichen, indem man eine separate Liste der Hauptstädte verwaltet, 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 Bevölkerung als einzelne 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 , um weitere Ideen zur Strukturierung Ihrer Cloud Firestore-Datenbank zu erhalten.

Sichern Sie Ihre Daten

Unabhängig davon, ob Sie Cloud Firestore-Sicherheitsregeln für Android-, Apple- oder Web-Clients oder Identity Access Management (IAM) für Server verwenden, stellen Sie sicher, dass Sie Ihre Daten sowohl in Cloud Firestore als auch in der Echtzeitdatenbank schützen. Die Benutzerauthentifizierung wird für beide Datenbanken von der Authentifizierung übernommen, sodass Sie Ihre Implementierung der Authentifizierung nicht ändern müssen, wenn Sie Cloud Firestore verwenden.

Wichtige Unterschiede, die es zu berücksichtigen gilt

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

Verschieben Sie historische Daten in den Cloud Firestore

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

Um zu vermeiden, dass neue Daten durch alte Daten überschrieben werden, möchten Sie möglicherweise 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 den neuen Daten, die von Cloud Functions zu Cloud Firestore hinzugefügt werden, Vorrang einräumen.

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

  1. Exportieren Sie Ihre Daten aus der Echtzeitdatenbank oder verwenden Sie ein aktuelles Backup .
    1. Gehen Sie in der Firebase-Konsole zum Abschnitt „Echtzeitdatenbank“ .
    2. Wählen Sie auf der Registerkarte „Daten“ den Stammknoten 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. Wir können zwar keine Vorlage für dieses Skript anbieten, da jede Datenbank individuelle Anforderungen hat, aber Cloud Firestore-Experten auf unserem Slack-Kanal oder auf Stack Overflow können 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 die Migration großer Datenmengen zu beschleunigen, verwenden Sie Batch-Schreibvorgänge und senden Sie bis zu 500 Vorgänge in einer einzigen Netzwerkanforderung.
    • Um die Ratenbegrenzungen von Cloud Firestore einzuhalten, begrenzen Sie die Vorgänge für jede Sammlung auf 500 Schreibvorgänge/Sekunde.

Neue Daten zum 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 neue oder sich ändernde Daten in Cloud Firestore zu schreiben, wenn ein Client Daten in die Echtzeitdatenbank schreibt. Erfahren Sie mehr über Echtzeitdatenbank-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 zur Aufrechterhaltung der Parität zwischen Ihren Datenbanken verwendet haben, stellen Sie sicher, 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 damit, die Schreibfunktion für die migrierten Daten in Apps, die noch an die Echtzeitdatenbank gebunden sind, auslaufen zu lassen. Wie Sie damit für Ihre App umgehen, 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.