ב-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
.
כדי להריץ את המוטציות הבאות באמצעות התוסף של 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, יכול להיות שיהיה שימושי לאפס את הנתונים למצב אפס כדי להריץ סדרה חדשה של בדיקות על קבוצה חדשה של נתונים.
כדי לעשות זאת, אם קוד אב הטיפוס לא מוסיף רשומות לטבלאות, אפשר להשתמש במוטציה _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",
}
…
}