W Firebase Data Connect operacje zbiorcze na danych są wykonywane za pomocą mutacji. Mimo że w projektach Data Connect dane są przechowywane w PostgreSQL, nie możesz wczytywać danych zbiorczo za pomocą instrukcji SQL ani narzędzi SQL: usługa Data Connect i jej schematy muszą być zsynchronizowane z bazą danych, a działanie bezpośrednio w PostgreSQL spowoduje zerwanie tej synchronizacji.
Dlatego Data Connect udostępnia standardowe mutacje _insertMany
, _upsertMany
i _deleteMany
do inicjowania danych i zarządzania zbiorczymi danymi.
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.
Wprowadzanie danych w wersjach lokalnych i produkcyjnych
W przewodniku po rozpoczęciu konfigurujesz aplikację, aby dodać pojedynczy rekord do pojedynczej tabeli za pomocą ad hoc insert mutation.
Aby aplikacja do recenzowania filmów była przydatna, potrzebuje danych o filmach, recenzjach i użytkownikach na potrzeby prototypowania zapytań i mutacji, które wykorzystują złączenia i inne operacje na wielu tabelach z realistycznymi danymi. Możesz rozwinąć schemat i zainicjować bazę danych.
.Środowisko prototypowania potrzebuje kodu do zasiewu danych. Ten przewodnik zawiera przykłady ilustrujące:
- Używanie funkcji
_insertMany
i_upsertMany
w poszczególnych tabelach - Używanie funkcji
_insertMany
w powiązanych tabelach
Aktualizacja schematu aplikacji do recenzowania 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. Poniżej przedstawiamy rozszerzony schemat aplikacji do recenzowania filmów, który pomoże Ci zrozumieć te przypadki użycia i przykłady. 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"
}
Tworzenie mutacji w celu zainicjowania danych stanu początkowego
Podczas prototypowania, gdy zapytania i mutacje muszą być testowane pod kątem różnych wartości dyskretnych, możesz wypełniać 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.
wprowadzić dane początkowe do tabel Movie
i Actor
,
W zależności od etapu prototypowania możesz użyć tej samej techniki opisanej w poradniku „Rozpoczynanie pracy” do wstawiania jednego lub dwóch rekordów. Oznacza to, że możesz użyć narzędzia Code Lenses w rozszerzeniu VS Code, aby tworzyć _insert
mutacje, kodować dane i uruchamiać te mutacje w 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 bazy danych lokalnej.
# 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"
}
])
}
Wczytywanie danych do tabeli złączeń MovieActor
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"
}
])
}
Tworzenie zapytania typu mutation w celu zresetowania danych początkowych
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, aby zaktualizować rekordy filmów 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 usługi Admin SDK z projektami Data Connect.