ב-Firebase Data Connect, פעולות על נתונים בכמות גדולה מבוצעות באמצעות מוטציות. למרות שפרויקטים של Data Connect שומרים נתונים ב-PostgreSQL, אי אפשר לטעון נתונים בכמות גדולה באמצעות משפטי SQL או כלים של SQL: השירות של Data Connect והסכמות שלו צריכים להיות מסונכרנים עם מסד הנתונים, והפעלה ישירה ב-PostgreSQL תפר את הסנכרון הזה.
לכן, Data Connect מספק מוטציות סטנדרטיות של _insertMany
, _upsertMany
ו-_deleteMany
לצורך הטמעת נתונים וניהול נתונים בכמות גדולה.
כשאתם יוצרים אב טיפוס של אפליקציות ומפעילים תהליכי CI/CD, אפשר להפעיל את המוטציות האלה בסביבת פיתוח מקומית באמצעות התוסף של VS Code, המהדר של Data Connect (אופציונלי) ומכונה מקומית של מסד נתונים.
נתוני מקור במכונות מקומיות ובמכונות בסביבת ייצור
במדריך למתחילים, הגדרתם אפליקציה להוספת רשומה אחת לטבלה אחת באמצעות טרנספורמציה חד-פעמית של הוספה.
כדי שאפשר יהיה להשתמש באפליקציה של ביקורות הסרטים, נדרשים נתונים של סרטים, ביקורות ומשתמשים ליצירת אב טיפוס של שאילתות ומוטציות שמשתמשות במיזוגים ובפעולות אחרות במספר טבלאות עם נתונים מציאותיים. אפשר להרחיב את הסכימה ולהוסיף נתונים למסד הנתונים.
.בסביבת האב טיפוס צריך קוד כדי לבצע הטמעת נתונים. המדריך הזה מספק כמה דוגמאות, כולל המחשה:
- שימוש ב-
_insertMany
וב-_upsertMany
בטבלאות ספציפיות - שימוש ב-
_insertMany
בטבלאות קשורות
עדכון הסכימה של אפליקציית ביקורות הסרטים
אפשר להשתמש במוטציות _insertMany
ו-_upsertMany
כדי לעדכן טבלאות נפרדות של מסדי נתונים אחת אחרי השנייה, או לעדכן כמה טבלאות שקשורות ביחסי צירוף. בהמשך מוצגת הסכימה המורחבת של אפליקציה לסקירות סרטים, שבעזרתה אפשר להמחיש את התרחישים לדוגמה ואת הדוגמאות האלה. הוא מרחיב את schema.gql
מעבר לסוג ההתחלתי Movie
כך שיכלול את הסוגים Actor
ו-MovieActor
, כדי שנוכל ליצור אב טיפוס לשאילתות מורכבות יותר.
# 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"
}
כתיבת מוטציות כדי ליצור נתונים של מצב אפס
במהלך תהליך היצירה של אב טיפוס, כשצריך לבדוק את השאילתות והמוטציות בטווח של ערכים נפרדים, אפשר לאכלס את הנתונים בכמה רשומות. לדוגמה, תוכלו להוסיף מספר רשומות סרטים עם סוגים שונים של ז'אנרים ודירוגים, כדי לבדוק השוואות וסינון.
הוספת נתונים ראשוניים לטבלאות Movie
ו-Actor
בהתאם לשלב שבו אתם נמצאים בתהליך היצירה של אב-הטיפוס, תוכלו להשתמש באותה טכניקה שהוצגה במדריך למתחילים כדי להוסיף רשומה אחת או שתיים: כלומר, תוכלו להשתמש ב-Code Lenses בתוסף של VS Code כדי ליצור מוטציות של _insert
, להטמיע נתונים בקוד ולהפעיל את המוטציות האלה ב-VS Code באמצעות Run.
בסופו של דבר, כדאי יותר להוסיף הרבה רשומות לטבלה באמצעות הפעולה _insertMany
. בדוגמה של אפליקציית ביקורות הסרטים, הפעולה הזו תוסיף קבוצת נתונים ראשונית ב-Movie
וב-Actor
.
כדי להפעיל את השינויים הבאים באמצעות התוסף VS Code Firebase, בתצוגה המתאימה של עורך הקבצים לוחצים על Run (Production) או על Run (Local) CodeLens, בהתאם לאפשרות ליצור אב טיפוס לשירות הייצור או למסד נתונים מקומי.
# 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"
}
])
}
הוספת נתונים לטבלת המיזוג MovieActor
כדי לבדוק שאילתות ומוטציות באמצעות צירופי טבלאות ופעולות מורכבות אחרות, אפשר להוסיף כמה רשומות לטבלה MovieActor
.
במקרה כזה, כשמעדכנים כמה טבלאות ביחס כזה, אפשר להוסיף את ההנחיה @transaction
כדי לוודא שהעדכון יושלם כראוי.
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"
}
])
}
כתיבת מוטציה כדי לאפס את נתוני המקור
במהלך יצירת אב טיפוס וביצוע CI/CD, יכול להיות שיהיה שימושי לאפס את הנתונים למצב אפס כדי להריץ סדרה חדשה של בדיקות על קבוצה חדשה של נתונים.
כדי לעשות זאת, אם קוד האב טיפוס לא מוסיף רשומות לטבלאות, צריך להשתמש ב-mutation _upsertMany
שסופק על ידי Data Connect.
בדוגמה הבאה, movie_upsertMany
נקרא עם הערכים הראשוניים כדי לעדכן את רשומות הסרטים למצב המקורי שלהן.
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",
}
…
}