En Firebase Data Connect, las operaciones de datos masivas se realizan con mutaciones. Aunque tus proyectos Data Connect almacenan datos en PostgreSQL, no puedes cargar datos de forma masiva mediante instrucciones de SQL o herramientas de SQL: tu servicio Data Connect y sus esquemas deben mantenerse sincronizados con tu base de datos, y operar directamente en PostgreSQL interrumpiría esta sincronización.
Es por eso que Data Connect proporciona mutaciones _insertMany
, _upsertMany
y _deleteMany
estándar para la inserción de datos y la administración de datos masivos.
Cuando creas prototipos de apps y ejecutas flujos de CI/CD, se puede llamar a estas mutaciones en un entorno de desarrollo local con la extensión de VS Code, el emulador de Data Connect y, de manera opcional, una instancia de base de datos local.
Cómo crear datos de origen en instancias locales y de producción
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 poder usarse, la app de reseñas de películas necesita datos de películas, opiniones y usuarios para el prototipado de consultas y mutaciones que usan uniones y otras operaciones en varias tablas con datos realistas. Puedes expandir el esquema y propagar la base de datos.
Tu entorno de prototipado necesita código para realizar la propagación de datos. En esta guía, se proporcionan algunos ejemplos que ilustran lo siguiente:
- Uso de
_insertMany
y_upsertMany
en tablas individuales - Uso de
_insertMany
en tablas relacionadas
Actualiza el esquema de la app de opiniones sobre películas
Puedes usar las mutaciones _insertMany
y _upsertMany
para actualizar tablas de bases de datos individuales, una a la vez, o actualizar varias tablas relacionadas por relaciones de unión. A continuación, se muestra un esquema expandido de la app de opiniones 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 crear datos de estado cero
Durante el prototipado, cuando tus consultas y mutaciones deben probarse en 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 las comparaciones y el filtrado.
Cómo generar datos en las tablas Movie
y Actor
Según la etapa de prototipado, puedes usar la misma técnica
introducida en la guía de Introducción para insertar uno o dos registros: es decir, puedes
usar Code Lenses en la extensión de VS Code para crear mutaciones _insert
,
codificar datos y ejecutar esas mutaciones en VS Code.
En última instancia, tiene más sentido agregar muchos registros a una tabla con una operación _insertMany
. En el ejemplo de la app de opiniones de películas, esto inserta un conjunto inicial de datos en Movie
y Actor
.
Para ejecutar las siguientes mutaciones, usa la extensión de Firebase para VS Code y, en la vista del editor de archivos correspondiente, haz clic en los botones Run (Production) o Run (Local) de CodeLens, según si estás creando 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"
}
])
}
Propagar datos en la tabla de unión MovieActor
Para probar consultas y mutaciones con uniones y otras operaciones complejas, puedes
añadir 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 de origen
Durante el prototipado 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 el código de tu prototipo no agrega registros a tus tablas, usa la mutación _upsertMany
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",
}
…
}
Próximos pasos
- Obtén información para integrar Admin SDK en tus proyectos de Data Connect.