In Firebase Data Connect werden Bulk-Datenvorgänge mithilfe von Mutationen ausgeführt. Obwohl Ihre Data Connect-Projekte Daten in PostgreSQL speichern, können Sie keine Daten im Bulk mit SQL-Anweisungen oder SQL-Tools laden: Der Data Connect-Dienst und seine Schemas müssen mit Ihrer Datenbank synchronisiert bleiben. Wenn Sie direkt in PostgreSQL arbeiten, funktioniert diese Synchronisierung nicht.
Aus diesem Grund bietet Data Connect standardmäßige _insertMany
-, _upsertMany
- und _deleteMany
-Mutationen für das Seeding von Daten und die Bulk-Datenverwaltung.
Wenn Sie Apps prototypisieren und CI/CD-Abläufe ausführen, können diese Mutationen in einer lokalen Entwicklungsumgebung mithilfe der VS Code-Erweiterung, des Data Connect-Emulators und (optional) einer lokalen Datenbankinstanz aufgerufen werden.
Seed-Daten in lokalen und Produktionsinstanzen
Im Einstiegsleitfaden haben Sie eine App eingerichtet, um einer einzelnen Tabelle mithilfe einer Ad-hoc-Insert-Mutation einen einzelnen Datensatz hinzuzufügen.
Damit die Filmbewertungs-App nutzbar ist, benötigt sie Daten zu Filmen, Rezensionen und Nutzern für Prototyping-Abfragen und ‑Mutationen, die Joins und andere Vorgänge auf mehreren Tabellen mit realistischen Daten verwenden. Sie können Ihr Schema erweitern und Ihre Datenbank per Seed übertragen.
Ihre Prototyping-Umgebung benötigt Code, um Daten zu erzeugen. Dieser Leitfaden enthält einige Beispiele, die Folgendes veranschaulichen:
- Verwendung von
_insertMany
und_upsertMany
in einzelnen Tabellen - Verwendung von „
_insertMany
“ in ähnlichen Tabellen
Schema der App für Filmrezensionen aktualisieren
Mithilfe von _insertMany
- und _upsertMany
-Mutationen können Sie einzelne Datenbanktabellen einzeln oder mehrere Tabellen aktualisieren, die durch Join-Beziehungen miteinander verknüpft sind. Unten sehen Sie ein erweitertes Schema für eine Filmbewertungs-App, das diese Anwendungsfälle und Beispiele veranschaulicht. Sie erweitert schema.gql
über den Ausgangstyp Movie
hinaus um Actor
- und MovieActor
-Typen, damit wir einen Prototyp für komplexere Abfragen erstellen können.
# Actors
# Suppose an actor can participate in multiple movies and movies can have multiple actors
# Movie - Actors (or vice versa) is a many to many relationship
type Actor @table {
id: UUID!
imageUrl: String!
name: String! @col(name: "name", dataType: "varchar(30)")
}
# Join table for many-to-many relationship for movies and actors
# The 'key' param signifies the primary key(s) of this table
# In this case, the keys are [movieId, actorId], the generated fields of the reference types [movie, actor]
type MovieActor @table(key: ["movie", "actor"]) {
# @ref creates a field in the current table (MovieActor) that holds the primary key of the referenced type
# In this case, @ref(fields: "movieId", references: "id") is implied
movie: Movie!
# movieId: UUID! <- this is created by the implied @ref
actor: Actor!
# actorId: UUID! <- this is created by the implied @ref
role: String! # "main" or "supporting"
}
Mutationen in Seed-Null-Zustandsdaten schreiben
Wenn Ihre Abfragen und Mutationen beim Prototyping anhand eines Bereichs diskreter Werte getestet werden müssen, können Sie Daten mit mehreren Datensätzen füllen. Beispielsweise können Sie zum Testen und Filtern mehrere Datensätze für Filme mit unterschiedlichen Arten von Genres und Bewertungen hinzufügen.
Start- oder Testdaten in die Tabellen Movie
und Actor
einfügen
Je nach Phase des Prototyping können Sie dieselbe Methode verwenden, die im Leitfaden „Einstieg“ beschrieben wurde, um ein oder zwei Einträge einzufügen. Sie können also Code Lenses in der VS Code-Erweiterung verwenden, um _insert
Mutationen zu erstellen, Daten zu hartcodieren und diese Mutationen in VS Code auszuführen.
Es ist jedoch sinnvoller, viele Datensätze mit einem _insertMany
-Vorgang in eine Tabelle einzufügen. Im Beispiel für die Filmrezensions-App wird dadurch ein erster Datensatz in Movie
und Actor
eingefügt.
Um die folgenden Mutationen auszuführen, klicken Sie in der VS Code-Datei-Editoransicht mit der Firebase-Erweiterung auf die CodeLens-Schaltflächen Ausführen (Produktion) oder Ausführen (lokal), je nachdem, ob Sie einen Prototyp mit Ihrem Produktionsdienst oder einer lokalen Datenbank erstellen.
# insertMany for Movie
# 2 records shown
mutation {
movie_insertMany(data: [
{
id: "550e8400-e29b-41d4-a716-446655440000",
title: "Inception",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
genre: "sci-fi",
},
{
id: "550e8400-e29b-41d4-a716-446655440001",
title: "The Matrix",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
genre: "action",
}
])
}
# insertMany for Actor
# 2 records shown
mutation {
actor_insertMany(data: [
{
id: "123e4567-e89b-12d3-a456-426614174000",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdicaprio.jpeg?alt=media&token=452e030a-efa5-4ef4-bb81-502b23241316",
name: "Leonardo DiCaprio"
},
{
id: "123e4567-e89b-12d3-a456-426614174001",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fkeanu.jpg?alt=media&token=6056520c-ef3e-4823-aad0-108aab163115",
name: "Keanu Reeves"
}
])
}
Daten in die MovieActor
-Join-Tabelle einfügen
Wenn Sie Abfragen und Mutationen mit Joins und anderen komplexen Vorgängen testen möchten, können Sie der Tabelle MovieActor
mehrere Datensätze hinzufügen.
Wenn Sie mehrere Tabellen in dieser Art von Beziehung aktualisieren, können Sie die Anweisung @transaction
hinzufügen, damit die Aktualisierung ordnungsgemäß abgeschlossen wird.
mutation @transaction {
movie_insertMany(data: [
{
id: "550e8400-e29b-41d4-a716-446655440000",
title: "Inception",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
genre: "sci-fi",
},
{
id: "550e8400-e29b-41d4-a716-446655440001",
title: "The Matrix",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
genre: "action",
}
])
actor_insertMany(data: [
{
id: "123e4567-e89b-12d3-a456-426614174000",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdicaprio.jpeg?alt=media&token=452e030a-efa5-4ef4-bb81-502b23241316",
name: "Leonardo DiCaprio"
},
{
id: "123e4567-e89b-12d3-a456-426614174001",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fkeanu.jpg?alt=media&token=6056520c-ef3e-4823-aad0-108aab163115",
name: "Keanu Reeves"
}
])
}
Mutation zum Zurücksetzen der Startdaten schreiben
Beim Prototyping und Ausführen von CI/CD kann es hilfreich sein, die Daten auf einen Nullzustand zurückzusetzen, um eine neue Reihe von Tests für einen neuen Datensatz auszuführen.
Wenn Ihr Prototypcode Ihren Tabellen keine Einträge hinzufügt, verwenden Sie dazu die von Data Connect bereitgestellte _upsertMany
-Mutation.
Im folgenden Beispiel wird movie_upsertMany
mit den Anfangswerten aufgerufen, um Filmdatensätze in ihren ursprünglichen Zustand zu versetzen.
mutation {
# Execute an upsertMany operation to update the Movie table
movie_upsertMany(data: [
{
id: "550e8400-e29b-41d4-a716-446655440000",
title: "Inception",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
genre: "sci-fi",
},
{
id: "550e8400-e29b-41d4-a716-446655440001",
title: "The Matrix",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
genre: "action",
}
…
}