ב-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
.
כדי להפעיל את השינויים הבאים באמצעות התוסף 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",
}
…
}
מה השלב הבא?
- מידע נוסף על שילוב של Admin SDK בפרויקטים של Data Connect