In Firebase Data Connect werden Bulk-Datenvorgänge mithilfe von Mutationen ausgeführt. Auch wenn Ihre Data Connect-Projekte Daten in PostgreSQL speichern, können Sie keine Bulk-Datenladungen mit SQL-Anweisungen oder SQL-Tools durchführen. Der Data Connect-Dienst und seine Schemas müssen mit Ihrer Datenbank synchronisiert bleiben. Wenn Sie direkt in PostgreSQL arbeiten, wird diese Synchronisierung unterbrochen.
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 mit Daten befüllen.
finden Sie die Beispieldaten und den Code, die in diesem Leitfaden verwendet werden.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 verbundenen Tabellen
Schema der App für Filmbewertungen 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. Damit wird schema.gql
über den ursprünglichen Typ Movie
hinaus auf die Typen Actor
und MovieActor
erweitert, damit wir Prototypen 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 schreiben, um Startdaten zu erstellen
Wenn Ihre Abfragen und Mutationen während des Prototypings anhand einer Reihe von diskreten Werten getestet werden müssen, können Sie die Daten mit mehreren Einträgen füllen. Sie können beispielsweise mehrere Filmdatensätze mit verschiedenen Genres und Altersfreigaben hinzufügen, um Vergleiche und Filterung zu testen.
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 entsprechenden Dateieditoransicht mit der Firebase-Erweiterung von VS Code 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 Erstellen von Prototypen und beim Ausführen von CI/CD kann es nützlich sein, die Daten auf den Nullzustand zurückzusetzen, um eine neue Reihe von Tests mit neuen Daten 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",
}
…
}