In Firebase Data Connect werden Bulk-Datenvorgänge mit der folgenden Methode ausgeführt: Mutationen. Auch wenn Ihre Data Connect-Projekte Daten in PostgreSQL können Sie keine Daten im Bulk mit SQL-Anweisungen oder SQL-Tools laden: Der Data Connect-Dienst und seine Schemas müssen mit Ihrem und direkt in PostgreSQL arbeiten würde, würde diese Synchronisierung zerstört werden.
Aus diesem Grund bietet Data Connect die standardmäßige _insertMany
,
Mutationen _upsertMany
und _deleteMany
für Seeding-Daten und Bulk-Daten
zu verstehen.
Wenn Sie Prototyping für Anwendungen erstellen und CI/CD-Abläufe ausführen, können diese Mutationen in einer lokalen Entwicklungsumgebung mit der VS Code-Erweiterung aufgerufen, Data Connect-Emulator und (optional) eine lokale Datenbankinstanz.
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 Datenbank.
Ihre Prototyping-Umgebung benötigt Code, um Daten zu erzeugen. Dieser Leitfaden finden Sie einige Beispiele:
- Verwendung von
_insertMany
und_upsertMany
für einzelne Tabellen - Verwendung von
_insertMany
in verbundenen 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. Er erweitert schema.gql
über den ursprünglichen Movie
-Typ hinaus auf die Typen Actor
und MovieActor
, 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 in Seed-Null-Zustandsdaten schreiben
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. Für können Sie z. B. mehrere Filmdatensätze mit verschiedenen Genres und Bewertungen zum Testen und Filtern.
Seed-Daten 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.
Führen Sie die folgenden Mutationen mit der VS Code Firebase-Erweiterung in Öffnen Sie die entsprechende Dateieditoransicht, klicken Sie auf Run (Production) oder Run (Local) für CodeLens, je nachdem, ob Sie für ein Prototyping mit in Ihrem Produktionsdienst oder in einer lokalen Datenbank.
# 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 Datensätze hinzufügt, verwenden Sie dazu die Methode
Die Mutation _upsertMany
wurde von Data Connect bereitgestellt.
Im folgenden Beispiel wird movie_upsertMany
mit den Anfangswerten aufgerufen
, um Filmdatensätze auf ihren ursprünglichen Zustand zu aktualisieren.
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",
}
…
}