Crea i dati iniziali ed esegui operazioni collettive sui dati

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 _insertMany e _upsertMany su singole tabelle
  • Utilizzo di _insertMany su 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