In Firebase Data Connect, puoi eseguire caricamenti e aggiornamenti collettivi dei dati in modi diversi a seconda dei flussi di lavoro e degli ambienti:
Nella prototipazione locale, quando provi schemi alternativi, puoi creare e chiamare le mutazioni di seeding dei dati in un ambiente di sviluppo locale utilizzando l'estensione Data Connect VS Code, l'Data Connect emulatore Data Connect e un'istanza di database locale.
Nello sviluppo di 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 il 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 diretta dello schema del database con gli strumenti SQL può interrompere lo schema e i connettori Data Connect.
Prototipazione locale: seeding dei dati nelle istanze locali
Nella guida di avvio, hai configurato 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 sui 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 eseguire il seeding del database.
L'ambiente di prototipazione richiede codice per eseguire il seeding dei dati. Questa guida fornisce alcuni esempi che illustrano:
- Utilizzo di
_insertManye_upsertManysu singole tabelle - Utilizzo di
_insertManysu tabelle correlate
Aggiorna lo schema dell'app di recensioni sui film
Puoi utilizzare le mutazioni _insertMany e _upsertMany per aggiornare le singole tabelle del database una alla volta o aggiornare più tabelle correlate da relazioni di join. Di seguito è riportato uno schema espanso dell'app di recensioni sui film che aiuta a illustrare questi casi d'uso ed esempi. Espande 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"
}
Scrivi mutazioni per il seeding dei dati di stato zero
Durante la prototipazione, quando le query e le mutazioni devono essere testate rispetto a un intervallo di valori discreti, puoi popolare i dati con più record. Ad esempio, potresti voler aggiungere più record di film con diversi tipi di generi e valutazioni per testare confronti e filtri.
Esegui il seeding dei dati nelle tabelle Movie e Actor
A seconda della fase di prototipazione, puoi utilizzare la stessa tecnica
introdotta nella guida di avvio per inserire uno o due record: puoi
utilizzare CodeLens nell'estensione Data Connect VS Code per creare _insert mutazioni,
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 dell'app di recensioni sui film, questa operazione inserisce un insieme iniziale di dati in Movie e Actor.
Per eseguire le seguenti mutazioni, utilizzando l'estensione Data Connect VS Code, in nella visualizzazione dell'editor di file appropriata, fai clic sui pulsanti CodeLens Esegui (produzione) o Esegui (locale), a seconda che tu stia prototipando con il servizio di produzione o con 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"
}
])
}
Esegui il seeding dei dati nella tabella di join MovieActor
Per testare query e mutazioni utilizzando join e altre operazioni complesse, puoi aggiungere più record alla tabella MovieActor.
In questo caso, 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 di seeding
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 insieme di dati.
Per farlo, se il codice del prototipo non aggiunge record alle tabelle, utilizza la
_upsertMany mutazione 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 di produzione: utilizza il Admin SDK per popolare e aggiornare
Il Firebase Admin SDK è disponibile quando vuoi lavorare da ambienti con privilegi. Questo è un caso d'uso importante quando vuoi caricare migliaia di record, data la natura critica delle operazioni di dati collettivi sui dati di produzione.
Installa Firebase Admin SDK
Anche se lavori principalmente in locale, Firebase consiglia di configurare il Admin SDK in modo da poter utilizzare Firebase Data Connect da un ambiente con privilegi, incluso l'ambiente locale. Dovrai configurare l' Admin SDK per Node.js.
Puoi scoprire di più sull'utilizzo dell'SDK Admin in altri casi d'uso.Data Connect
Esegui caricamenti e aggiornamenti collettivi dei dati di produzione
L'API per la gestione dei dati collettivi 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à in locale.
Un vantaggio importante dell'API amministrativa è la possibilità di gestire e riutilizzare separatamente gli array di dati per i flussi CI/CD o di 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 di 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.
Per importare i dati, consulta la guida di Cloud SQL per PostgreSQL.
Passaggi successivi
- Scopri come integrare l'Admin SDK nei tuoi Data Connect progetti.