In Firebase Data Connect, puoi eseguire caricamenti e aggiornamenti collettivi dei dati in diversi modi a seconda dei tuoi flussi di lavoro e ambienti:
Nel prototipazione locale, quando provi schemi alternativi, le mutazioni di seeding dei dati possono essere create e chiamate in un ambiente di sviluppo locale utilizzando l'estensione VS Code, l'emulatore Data Connect e un'istanza di database locale.
Nello sviluppo della produzione, con uno schema stabile, quando esegui flussi CI/CD più grandi e gestisci i dati di produzione, hai due opzioni:
L'approccio preferito è utilizzare Firebase Admin SDK, un insieme di librerie che vengono eseguite in ambienti con privilegi.
Puoi anche utilizzare gli strumenti SQL con l'istanza Cloud SQL per eseguire caricamenti e aggiornamenti collettivi, a condizione che tu stia modificando i dati e non lo schema del database. La modifica dello schema del database direttamente con gli strumenti SQL può interrompere lo schema e i connettori di Data Connect.
Prototipazione locale: dati iniziali nelle istanze locali
Nella Guida introduttiva, configuri un'app per aggiungere un singolo record a una singola tabella utilizzando una mutazione di inserimento ad hoc.
Per essere utilizzabile, l'app di recensioni di film ha bisogno di dati per film, recensioni e utenti per prototipare query e mutazioni che utilizzano join e altre operazioni su più tabelle con dati realistici. Puoi espandere lo schema e inizializzare il database.
L'ambiente di prototipazione richiede codice per eseguire il seeding dei dati. Questa guida fornisce alcuni esempi che illustrano:
- Utilizzo di
_insertMany
e_upsertMany
nelle singole tabelle - Utilizzo di
_insertMany
nelle tabelle correlate
Aggiornare lo schema dell'app di recensioni cinematografiche
Puoi utilizzare le mutazioni _insertMany
e _upsertMany
per aggiornare singole tabelle
del database una alla volta o aggiornare più tabelle correlate da relazioni
di join. Di seguito è riportato uno schema dell'app di recensioni di film espanso che aiuta a illustrare questi
casi d'uso ed esempi. Estende schema.gql
oltre il tipo
Movie
iniziale per includere i tipi Actor
e MovieActor
, in modo da poter
prototipare query più complesse.
# 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"
}
Scrivere modifiche per inizializzare i dati dello stato zero
Durante la prototipazione, quando le query e le mutazioni devono essere testate rispetto a una gamma di valori discreti, puoi compilare i dati con più record. Ad esempio, potresti voler aggiungere più record di film con diversi tipi di generi e classificazioni per testare i confronti e i filtri.
Inserisci dati iniziali nelle tabelle Movie
e Actor
A seconda della fase di prototipazione, puoi utilizzare la stessa tecnica
introdotta nella guida Guida introduttiva per inserire uno o due record: puoi
utilizzare CodeLens nell'estensione VS Code per creare mutazioni _insert
,
codificare i dati e eseguire queste mutazioni in VS Code.
Alla fine, è più sensato aggiungere molti record a una tabella utilizzando un'operazione _insertMany
. Nell'esempio di app di recensioni di film, questo inserisce un
insieme iniziale di dati in Movie
e Actor
.
Per eseguire le seguenti mutazioni utilizzando l'estensione Firebase per VS Code, nella visualizzazione dell'editor di file appropriato, fai clic sui pulsanti CodeLens Esegui (produzione) o Esegui (locale), a seconda che tu stia prototipando con il servizio di produzione o un database locale.
# 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"
}
])
}
Inserire dati iniziali nella tabella di unione MovieActor
Per testare query e mutazioni utilizzando unioni e altre operazioni complesse, puoi
aggiungere più record alla tabella MovieActor
.
Qui, quando aggiorni più tabelle in questo tipo di relazione, puoi
aggiungere la direttiva @transaction
per assicurarti che l'aggiornamento venga completato correttamente.
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"
}
])
}
Scrivi una mutazione per reimpostare i dati iniziali
Durante la prototipazione e l'esecuzione di CI/CD, può essere utile reimpostare i dati su uno stato zero per eseguire una nuova serie di test su un nuovo set di dati.
A questo scopo, se il codice del prototipo non aggiunge record alle tabelle, utilizza la mutazione
_upsertMany
fornita da Data Connect.
Nell'esempio seguente, movie_upsertMany
viene chiamato con i valori iniziali
per aggiornare i record dei film al loro stato originale.
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",
}
…
}
Sviluppo della produzione: utilizza Admin SDK per compilare e aggiornare
Firebase Admin SDK è disponibile quando vuoi lavorare da ambienti privilegiati. Si tratta di un caso d'uso importante quando vuoi caricare migliaia di record, data la natura critica delle operazioni sui dati collettivi sui dati di produzione.
Installa Firebase Admin SDK
Anche se lavori principalmente in locale, Firebase consiglia di configurare Admin SDK per poter utilizzare Firebase Data Connect da un ambiente privilegiato, incluso il tuo ambiente locale. Dovrai configurare Admin SDK per Node.js.
Puoi scoprire di più sull'utilizzo dell'SDK Admin in altri Data Connect casi d'uso.
Esegui caricamenti e aggiornamenti collettivi dei dati di produzione
L'API per la gestione collettiva dei dati crea mutazioni GraphQL per tuo conto, anziché chiederti di creare stringhe mutation {...}
con l'API executeGraphQL
descritta in precedenza per aggiungere alcune righe qua e là localmente.
Un vantaggio importante dell'API amministrativa è la possibilità di gestire separatamente e riutilizzare array di dati per i flussi CI/CD o configurare file di dati collettivi di grandi dimensioni per i dati di produzione.
I seguenti snippet mostrano come configurare uno script di dati collettivi.
import { initializeApp } from 'firebase-admin/app';
import { getDataConnect } from 'firebase-admin/data-connect';
const app = initializeApp();
const dc = getDataConnect({ location: "us-west2", serviceId: "my-service" });
const 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",
}
];
// Methods of the bulk operations API
const resp = await dc.insert("movie" /*table name*/, data[0]);
// Or
const resp = await dc.insertMany("movie" /*table name*/, data);
// Or
const resp = await dc.upsert("movie" /*table name*/, data[0]);
// Or
const resp = await dc.upsertMany("movie" /*table name*/, data);
Sviluppo della produzione: utilizza SQL per gli aggiornamenti collettivi dei dati
Quando lavori con uno schema stabile in produzione e non lo modifichi, puoi lavorare nell'istanza Cloud SQL per gestire i caricamenti e gli aggiornamenti dei dati.
Consulta la guida di Cloud SQL per PostgreSQL per l'importazione dei dati.
Passaggi successivi
- Scopri di più sull'integrazione di Admin SDK nei tuoi progetti Data Connect.