ב-Firebase Data Connect, פעולות על נתונים בכמות גדולה מתבצעות באמצעות מוטציות. למרות שפרויקטים של Data Connect שומרים נתונים ב-PostgreSQL, אי אפשר לטעון נתונים בכמות גדולה באמצעות משפטי SQL או כלים של SQL: השירות של Data Connect והסכמות שלו צריכים להיות מסונכרנים עם מסד הנתונים, והפעלה ישירה ב-PostgreSQL תפר את הסנכרון הזה.
לכן, Data Connect מספק מוטציות סטנדרטיות של _insertMany
, _upsertMany
ו-_deleteMany
לצורך הטמעת נתונים וניהול נתונים בכמות גדולה.
כשאתם יוצרים אב טיפוס של אפליקציות ומפעילים תהליכי CI/CD, אפשר להפעיל את המוטציות האלה בסביבת פיתוח מקומית באמצעות התוסף של VS Code, המהדר של Data Connect (אופציונלי) ומכונה מקומית של מסד נתונים.
הוספת נתוני זרע במכונות מקומיות ובמכונות ייצור
במדריך למתחילים, הגדרתם אפליקציה להוספת רשומה אחת לטבלה אחת באמצעות טרנספורמציה חד-פעמית של הוספה.
כדי שאפשר יהיה להשתמש באפליקציה של ביקורות הסרטים, נדרשים נתונים של סרטים, ביקורות ומשתמשים ליצירת אב טיפוס של שאילתות ומוטציות שמשתמשות בחיבור (join) ובפעולות אחרות במספר טבלאות עם נתונים ריאליסטיים. אפשר להרחיב את הסכימה ולהוסיף נתונים למסד הנתונים.
בסביבת האב טיפוס צריך קוד כדי לבצע הטמעת נתונים. במדריך הזה מפורטות כמה דוגמאות שממחישות:
- שימוש ב-
_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
.
כדי להריץ את המוטציות הבאות באמצעות התוסף של Firebase ל-VS Code, לוחצים על הלחצנים CodeLens Run (Production) או Run (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"
}
])
}
הוספת נתונים לטבלת המיזוג 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",
}
…
}