Zwischen nativem und Datenspeichermodus wechseln

Beim Erstellen einer neuen Firestore-Datenbank können Sie die Datenbankinstanz für die Ausführung im Datastore-Modus konfigurieren, wodurch die Datenbank abwärtskompatibel mit Datastore ist. Auf dieser Seite werden die Unterschiede zwischen den folgenden Firestore-Datenbankmodi – nativer Modus und Datastore-Modus – erläutert.

Firestore im nativen Modus

Firestore ist die nächste Hauptversion von Datastore und ein Rebranding des Produkts. Firestore vereint das Beste aus Datastore und Firebase Realtime Database. Diese NoSQL-Dokumentendatenbank wurde für Autoscaling, hohe Leistung und einfache Anwendungsentwicklung konzipiert.

Firestore bietet die folgenden Funktionen:

  • Eine Speicherschicht mit strikter Konsistenz
  • Ein Datenmodell für Sammlungen und Dokumente
  • Echtzeitaktualisierungen
  • Mobil- und Web-Clientbibliotheken

Firestore ist abwärtskompatibel mit Datastore. Das gilt jedoch nicht für das neue Datenmodell, Echtzeitaktualisierungen und die Features der Mobil- und Web-Clientbibliotheken. Sie müssen Firestore im nativen Modus verwenden, um auf alle Firestore-Funktionen zugreifen zu können.

Firestore im Datastore-Modus

Im Datastore-Modus behält Firestore das Systemverhalten von Datastore bei. Dabei wird jedoch auf die Speicherschicht von Firestore zugegriffen, wodurch die folgenden Beschränkungen von Datastore entfallen:

  • Alle Datastore-Abfragen sind jetzt strikt konsistent, es sei denn, Sie fordern explizit die Eventual Consistency an.
  • Abfragen in Transaktionen müssen nicht länger Ancestor-Abfragen sein.
  • Transaktionen sind nicht mehr auf 25 Entitätengruppen beschränkt.
  • Schreibvorgänge in eine Entitätengruppe sind nicht mehr auf 1 Vorgang pro Sekunde beschränkt.

Im Datastore-Modus werden Firestore-Features deaktiviert, die nicht mit Datastore kompatibel sind:

  • Im Projekt werden Datastore API-Anfragen akzeptiert und Firestore API-Anfragen abgelehnt.
  • Im Projekt werden Datastore-Indexe anstelle von Firestore-Indexen verwendet.
  • Sie können Datastore-Clientbibliotheken, jedoch keine Firestore-Clientbibliotheken mit diesem Projekt verwenden.
  • Die Echtzeitfunktionen von Firestore stehen nicht zur Verfügung.
  • In der Google Cloud Console verwendet die Datenbank die Datastore-Ansicht.

Preise und Standorte

Für Datenbanken im nativen Modus und im Datastore-Modus gilt dieselbe Preisstruktur und sie sind an denselben Speicherorten verfügbar. Die Preise und Standorte werden auf den folgenden Seiten detailliert beschrieben:

Firestore im nativen Modus

Firestore im Datastore-Modus

Datenbankmodus auswählen

Beim Erstellen einer neuen Firestore-Datenbank müssen Sie einen Datenbankmodus auswählen. Sie können im selben Projekt sowohl Datenbanken im Datastore-Modus als auch im nativen Modus verwenden. Jede Datenbank muss jedoch denselben Typ haben. Für die Auswahl eines Datenbankmodus empfehlen wir Folgendes:

  • Firestore im Datastore-Modus für neue Serverprojekte verwenden

    Mit Firestore im Datastore-Modus können Sie etablierte Datastore-Serverarchitekturen nutzen, ohne weiter den grundlegenden Beschränkungen von Datastore zu unterliegen. Im Datastore-Modus kann automatisch auf Millionen Schreibvorgänge pro Sekunde skaliert werden.

  • Firestore im nativen Modus für neue Mobil- und Webanwendungen verwenden

    Firestore bietet Mobil- und Web-Clientbibliotheken mit Echtzeit- und Offlinefeatures. Im nativen Modus kann automatisch auf Millionen gleichzeitig ausgeführter Clients skaliert werden.

Funktionsvergleich

In der folgenden Tabelle wird das Systemverhalten der Datenbankmodi verglichen:

Firestore im
nativen Modus
Firestore im
Datastore-Modus
Datenmodell Nach Dokumenten und Sammlungen strukturierte Dokumentendatenbank Nach Arten und Entitätengruppen strukturierte Entitäten
Speicherschicht Eine Speicherschicht mit strikter Konsistenz. Eine Speicherschicht mit strikter Konsistenz.
Abfragen und Transaktionen
  • Abfragen mit strikter Konsistenz in der gesamten Datenbank
  • Hebt die früheren Beschränkungen der Konsistenz von Datastore auf
  • Abfragen mit strikter Konsistenz in der gesamten Datenbank
  • Transaktionen können auf eine beliebige Anzahl von Entitätengruppen zugreifen
Unterstützung für Datastore v1 API Nein, Anfragen werden abgelehnt Ja
Unterstützung für Firestore v1 API Ja Nein, Anfragen werden abgelehnt
Echtzeitaktualisierungen

Bietet die Möglichkeit, ein oder mehrere Dokumente auf Echtzeitaktualisierungen hin zu überwachen

Während der Überwachung eines oder mehrerer Dokumente werden Ihre Clients bei Datenänderungen informiert und versenden die neuesten Daten.

Nicht unterstützt
Offline-Datenpersistenz Die Mobil- und Web-Clientbibliotheken unterstützen Offline-Datenpersistenz. Nicht unterstützt
Clientbibliotheken Firestore-Clientbibliotheken:
  • Java
  • Python
  • PHP
  • Go
  • Ruby
  • C#
  • Node.js
  • Android
  • iOS+
  • Web
  • C++
  • Unity
Datastore-Clientbibliotheken:
  • Java
  • Python
  • PHP
  • Go
  • Ruby
  • C#
  • Node.js
  • C++
Sicherheit
  • Der Datenbankzugriff wird mit der Identitäts- und Zugriffsverwaltung (IAM) verwaltet.
  • Mit Firestore-Sicherheitsregeln werden serverlose Authentifizierung und Autorisierung für Mobil- und Web-Clientbibliotheken unterstützt.
IAM verwaltet den Datenbankzugriff
Leistung Skaliert automatisch auf mehrere Millionen Clients gleichzeitig. Skaliert automatisch auf mehrere Millionen Schreibvorgänge pro Sekunde
SLA Firestore SLA Firestore SLA
Standorte

Beide Modi unterstützen dieselben Standorte. Eine detaillierte Liste der Standorte finden Sie auf den folgenden Seiten:

Preise

Beide Modi verwenden dieselbe Preisstruktur für Entitäts- und Dokumentenvorgänge.

Firestore im Datastore-Modus erhebt keine Gebühren für kleine Vorgänge.

Für beide Modi gilt dieselbe Preisstruktur für gespeicherte Daten und Netzwerkbandbreite.

Weitere Informationen zu den Preisen finden Sie auf den folgenden Seiten:

Console Firebase Console und Firestore-Ansicht in der Google Cloud Console Datastore-Ansicht in der Google Cloud Console
Namespaces Nicht unterstützt Unterstützt
Integration der App Engine-Clientbibliothek

Nicht unterstützt in den Laufzeiten der App Engine-Standardumgebung für Python 2.7 und PHP 5.5

Unterstützt in der App Engine-Standardumgebung alle anderen Laufzeiten.

Unterstützt in allen Laufzeiten der flexiblen App Engine-Umgebung alle Laufzeiten.

In allen Laufzeiten unterstützt

Neue Datenbank erstellen

Sie können eine neue Firestore-Datenbank entweder im nativen Modus oder im Datastore-Modus erstellen. Diese Auswahl hängt nicht von den Modi vorhandener Datenbanken in Ihrem Projekt ab.

Weitere Informationen finden Sie unter Datenbanken erstellen und verwalten.

Zwischen nativem Modus und Datastore-Modus wechseln

Wenn Ihre Datenbank leer ist, können Sie zwischen dem nativen Modus und dem Datastore-Modus wechseln.

Ändern Sie die Datenbank in den nativen Modus:

gcloud

Verwenden Sie den Befehl gcloud firestore databases update, um die Datenbank in den nativen Modus zu ändern.

gcloud firestore databases update --type=firestore-native --database='DATABASE_ID'

Ersetzen Sie DATABASE_ID durch die ID Ihrer Datenbank.

REST

curl --request PATCH \
--header "Authorization: Bearer "$(gcloud auth print-access-token) \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"type":"FIRESTORE_NATIVE"}' \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/DATABASE_ID?updateMask=type"

Ersetzen Sie Folgendes:

  • PROJECT_ID: die Projekt-ID
  • DATABASE_ID: die Datenbank-ID

Datenbank in den Datastore-Modus ändern:

gcloud

Verwenden Sie den Befehl gcloud firestore databases update, um die Datenbank in den Datastore-Modus zu ändern.

 gcloud firestore databases update --type=datastore-mode --database='DATABASE_ID'

Ersetzen Sie DATABASE_ID durch die ID Ihrer Datenbank.

REST

curl --request PATCH \
--header "Authorization: Bearer "$(gcloud auth print-access-token) \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"type":"DATASTORE_MODE"}' \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/DATABASE_ID?updateMask=type"

Ersetzen Sie Folgendes:

  • PROJECT_ID: die Projekt-ID
  • DATABASE_ID: die Datenbank-ID