En Firebase Data Connect, puedes realizar cargas y actualizaciones de datos masivas de diferentes maneras, según tus flujos de trabajo y entornos:
En la creación de prototipos locales, cuando pruebas esquemas alternativos, se pueden crear y llamar mutaciones de propagación de datos en un entorno de desarrollo local con la extensión de Data Connect para VS Code, el Data Connect emulador y una instancia de base de datos local.
En el desarrollo de producción, con un esquema estable, cuando realizas flujos de IC/EC más grandes y administras datos de producción, tienes dos opciones:
El enfoque preferido es usar el Firebase Admin SDK, un conjunto de bibliotecas que se ejecutan en entornos con privilegios.
También puedes usar herramientas de SQL con tu instancia de Cloud SQL para realizar cargas y actualizaciones masivas, siempre que modifiques datos y no tu esquema de base de datos. Si modificas el esquema de tu base de datos directamente con herramientas de SQL, puedes dañar tu Data Connect esquema y conectores.
Creación de prototipos locales: Propaga datos en instancias locales
En la guía de introducción, configuraste una app para agregar un solo registro a una sola tabla con una mutación de inserción ad hoc.
Para que se pueda usar, la app de reseñas de películas necesita datos de películas, reseñas y usuarios para crear prototipos de consultas y mutaciones que usen uniones y otras operaciones en varias tablas con datos realistas. Puedes expandir tu esquema y propagar tu base de datos.
Tu entorno de creación de prototipos necesita código para realizar la propagación de datos. En esta guía, se proporcionan algunas muestras que ilustran lo siguiente:
- Uso de
_insertManyy_upsertManyen tablas individuales - Uso de
_insertManyen tablas relacionadas
Actualiza el esquema de la app de reseñas de películas
Puedes usar las mutaciones _insertMany y _upsertMany para actualizar tablas de bases de datos individuales de a una por vez o actualizar varias tablas relacionadas por relaciones de unión. A continuación, se muestra un esquema expandido de la app de reseñas de películas que ayuda a ilustrar estos casos de uso y ejemplos. Expande schema.gql más allá del
tipo Movie inicial para incluir los tipos Actor y MovieActor, de modo que podamos
crear prototipos de consultas más complejas.
# 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"
}
Escribe mutaciones para propagar datos de estado cero
Durante la creación de prototipos, cuando tus consultas y mutaciones deben probarse con un rango de valores discretos, puedes propagar datos con varios registros. Por ejemplo, es posible que desees agregar varios registros de películas con diferentes tipos de géneros y calificaciones para probar comparaciones y filtros.
Propaga datos en las tablas Movie y Actor
Según la etapa de creación de prototipos, puedes usar la misma técnica
que se presenta en la guía de introducción para insertar uno o dos registros. Es decir, puedes
usar CodeLenses en la extensión de Data Connect para VS Code para crear mutaciones _insert,
codificar datos de forma rígida y ejecutar esas mutaciones en VS Code.
Con el tiempo, tiene más sentido agregar muchos registros a una tabla con una operación
_insertMany. En el ejemplo de la app de reseñas de películas, se inserta un conjunto inicial de datos en Movie y Actor.
Para ejecutar las siguientes mutaciones, con la extensión de Data Connect para VS Code, en la vista adecuada del editor de archivos, haz clic en los botones CodeLens Ejecutar (producción) o Ejecutar (local), según si creas prototipos con tu servicio de producción o una base de datos local.
# 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"
}
])
}
Propaga datos en la tabla de unión MovieActor
Para probar consultas y mutaciones con uniones y otras operaciones complejas, puedes agregar varios registros a la tabla MovieActor.
Aquí, cuando actualizas varias tablas en este tipo de relación, puedes agregar la directiva @transaction para asegurarte de que la actualización se complete correctamente.
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"
}
])
}
Escribe una mutación para restablecer los datos propagados
Durante la creación de prototipos y la realización de CI/CD, puede ser útil restablecer los datos a un estado cero para ejecutar una nueva serie de pruebas en un conjunto de datos nuevo.
Para ello, si tu código de prototipo no agrega registros a tus tablas, usa la
_upsertMany mutación que proporciona Data Connect.
En el siguiente ejemplo, se llama a movie_upsertMany con los valores iniciales para actualizar los registros de películas a su estado original.
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",
}
…
}
Desarrollo de producción: Usa el Admin SDK para propagar y actualizar
El Firebase Admin SDK está disponible cuando deseas trabajar desde entornos con privilegios. Este es un caso de uso importante cuando deseas cargar miles de registros, dada la naturaleza crítica de las operaciones de datos masivas en tus datos de producción.
Instala el Firebase Admin SDK
Incluso si trabajas principalmente de forma local, Firebase recomienda configurar el Admin SDK para que puedas usar Firebase Data Connect desde un entorno con privilegios, incluido tu entorno local. Deberás configurar el Admin SDK para Node.js.
Puedes obtener más información para usar el SDK de Admin en otros Data Connect casos de uso.
Realiza cargas y actualizaciones masivas de datos de producción
La API para la administración de datos masivos compila mutaciones de GraphQL en tu nombre, en lugar de pedirte que compiles cadenas mutation {...} con la API de executeGraphQL que se describió antes para agregar algunas filas aquí y allá de forma local.
Un beneficio importante de la API administrativa es la capacidad de administrar y reutilizar por separado los arrays de datos para los flujos de IC/EC, o configurar archivos de datos masivos grandes para los datos de producción.
En los siguientes fragmentos, se muestra cómo configurar una secuencia de comandos de datos masivos.
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);
Desarrollo de producción: Usa SQL para actualizaciones de datos masivas
Cuando trabajas con un esquema estable en producción y no lo modificas, puedes trabajar en tu instancia de Cloud SQL para administrar las cargas y actualizaciones de datos.
Consulta la guía de Cloud SQL para PostgreSQL para importar datos.
Próximos pasos
- Obtén información para integrar el Admin SDK en tus Data Connect proyectos.