W Firebase Data Connect operacje zbiorcze na danych są wykonywane za pomocą mutacji. Mimo że Twoje projekty w Data Connect przechowują dane w W PostgreSQL nie można zbiorczo wczytywać danych przy użyciu instrukcji SQL ani narzędzi SQL: Usługa Data Connect i jej schematy muszą być zsynchronizowane z i działanie bezpośrednio w PostgreSQL spowodowałoby przerwanie tej synchronizacji.
Dlatego w usłudze Data Connect dostępne są standardowe funkcje _insertMany
,
Mutacje _upsertMany
i _deleteMany
na potrzeby danych wstępnych i danych zbiorczych
i zarządzania nimi.
Podczas tworzenia prototypów aplikacji i uruchamiania przepływów CI/CD te mutacje można wywoływać w lokalnym środowisku programistycznym za pomocą rozszerzenia VS Code, emulatora Data Connect i (opcjonalnie) lokalnego wystąpienia bazy danych.
Dane wyjściowe w instancjach lokalnych i produkcyjnych
W przewodniku po rozpoczęciu konfigurujesz aplikację, aby dodać pojedynczy rekord do pojedynczej tabeli za pomocą ad hoc insert mutation.
Aby korzystać z aplikacji do recenzowania filmów, musisz podać dane o filmach, recenzjach i użytkownikach dotyczące prototypowania zapytań i mutacji, które korzystają z złączeń i innych operacji na wielu tabel z realistycznymi danymi. Możesz rozszerzyć schemat i wygenerować w bazie danych.
.Środowisko prototypowania potrzebuje kodu do zasiewania danych. Ten przewodnik przykłady, które ilustrują:
- Używanie funkcji
_insertMany
i_upsertMany
w poszczególnych tabelach - Korzystanie z tabeli
_insertMany
w powiązanych tabelach
Zaktualizuj schemat aplikacji z recenzjami filmów
Za pomocą mutacji _insertMany
i _upsertMany
możesz aktualizować poszczególne tabele bazy danych pojedynczo lub wiele tabel powiązanych za pomocą relacji złączenia. Rozszerzony schemat aplikacji z recenzjami filmów, który ilustruje te
przykłady zastosowania znajdziesz poniżej. Rozszerza ona schema.gql
poza początkowy typ Movie
, aby obejmowała typy Actor
i MovieActor
, dzięki czemu możemy tworzyć prototypy bardziej złożonych zapytań.
# 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"
}
Zapisywanie mutacji w danych stanu zerowego
Podczas prototypowania, gdy zapytania i mutacje muszą być przetestowane pod kątem zakresu dyskretnych wartości, możesz wypełnić dane wieloma rekordami. Możesz na przykład dodać wiele rekordów filmów z różnymi gatunkami i ocenami, aby przetestować porównania i filtrowanie.
Wprowadzanie danych do tabel Movie
i Actor
W zależności od etapu prototypowania możesz użyć tej samej metody
w przewodniku dla początkujących, aby wstawić jeden lub dwa rekordy:
mogą używać Obiektywy kodu w rozszerzeniu VS Code do tworzenia mutacji _insert
,
zakodować na stałe dane i uruchomić te mutacje w narzędziu VS Code.
W końcu lepszym rozwiązaniem jest dodanie wielu rekordów do tabeli za pomocą operacji _insertMany
. W przykładzie aplikacji do recenzowania filmów wstawia to początkowy zestaw danych do elementów Movie
i Actor
.
Aby wykonać te mutacje, w odpowiednim widoku edytora plików w rozszerzeniu Firebase w VS Code kliknij przycisk Uruchom (wersja produkcyjna) lub Uruchom (lokalnie) CodeLens, w zależności od tego, czy tworzysz prototyp za pomocą usługi produkcyjnej czy lokalnej bazy danych.
# 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"
}
])
}
Materiał wyjściowy do MovieActor
tabeli złączania
Aby testować zapytania i mutacje za pomocą złączeń i innych złożonych operacji, możesz dodać do tabeli MovieActor
kilka rekordów.
Gdy aktualizujesz wiele tabel w takim rodzaju relacji, możesz dodać dyrektywę @transaction
, aby mieć pewność, że aktualizacja zostanie prawidłowo ukończona.
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"
}
])
}
Napisz mutację, aby zresetować dane wyjściowe
Podczas tworzenia prototypu i wykonywania CI/CD przydatne może być zresetowanie danych do stanu zerowego w celu wykonania nowej serii testów na nowym zbiorze danych.
Jeśli kod prototypu nie dodaje rekordów do tabel, użyj mutacji _upsertMany
udostępnionej przez Data Connect.
W tym przykładzie funkcja movie_upsertMany
jest wywoływana z wartościami początkowymi
w celu zaktualizowania rekordów filmu do ich pierwotnego stanu.
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",
}
…
}
Co dalej?
- Dowiedz się więcej o integrowaniu Admin SDK w projektach Data Connect.