כדי להעביר נתונים ממסד נתונים של מהדורת Firestore Standard למסד נתונים של מהדורת Firestore Enterprise, מומלץ להשתמש באחת מהאפשרויות הבאות:
התכונות ייבוא וייצוא. קבצי הנתונים מפעולת ייבוא תואמים למהדורות Enterprise ו-Standard.
התבנית Dataflow של
firestore-to-firestore. שירות Dataflow מאפשר לכם ליצור צינורות להעברת נתונים, והתבניתfirestore-to-firestoreיוצרת צינור להעברת נתונים בין מסדי נתונים של Cloud Firestore.
ייבוא וייצוא היא האפשרות הפשוטה יותר, עם פחות אפשרויות הגדרה.
תבנית Dataflow ניתנת להתאמה אישית יותר. אתם יכולים להרחיב את קוד התבנית כדי לבצע העברות חלקיות או להמיר נתונים. אפשר גם לשלוט במספר העובדים ובגודל שלהם.
שתי האפשרויות תומכות בהעברות בין פרויקטים ואזורים.
העברת נתונים באמצעות ייצוא וייבוא
כדי להעביר נתונים באמצעות פעולות ייצוא וייבוא, אפשר לעיין במאמר בנושא ייצוא וייבוא של נתונים. כדי להעביר נתונים למסד נתונים בפרויקט אחר, אפשר לעיין במאמר בנושא העברת נתונים בין פרויקטים.
העברת נתונים באמצעות התבנית Dataflow
כדי להעביר נתונים באמצעות התבנית firestore-to-firestore Dataflow, פועלים לפי ההוראות הבאות.
לפני שמתחילים
לפני שמתחילים בהעברת הנתונים, צריך לוודא ששחזור לנקודת זמן (PITR) מופעל במסד הנתונים של המקור. המשימה Dataflow משתמשת ב-PITR כדי לקרוא נתונים בחותמת זמן של PITR. אם PITR מושבת, העבודה נכשלת אם היא פועלת יותר משעה.
מקצים את התפקידים הנדרשים שמתוארים בקטע הבא.
התפקידים הנדרשים
כדי להעביר נתונים ממסד נתונים אחד למסד נתונים אחר, צריך להקצות את התפקידים הבאים. יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים:
- כדי לקבל את ההרשאות שנדרשות ליצירת מסד נתונים חדש ולגישה לנתונים ב-Cloud Firestore, צריך לבקש מהאדמין להקצות לכם את התפקיד בעלים של Cloud Datastore (
roles/datastore.owner) ב-IAM בפרויקט. -
כדי לתת למשימה Dataflow גישת קריאה וכתיבה למסדי הנתונים שלכם ב-Cloud Firestore, צריך להקצות לחשבון השירות של העובד Dataflow (לדוגמה,
PROJECT_NUMBER-compute@) את תפקיד ה-IAM Cloud Datastore User (roles/datastore.user) בפרויקט.מידע נוסף על אבטחה ב-Dataflow זמין במאמר Dataflow אבטחה והרשאות.
מידע נוסף על הקצאת תפקידי IAM מופיע במאמר ניהול הגישה לפרויקטים, לתיקיות ולארגונים.
1. יצירת מסד נתונים חדש במהדורת Firestore Enterprise
כדי להעביר נתונים ממסד נתונים במהדורת Standard למסד נתונים במהדורת Enterprise, צריך קודם ליצור את מסד הנתונים של היעד במהדורת Enterprise. איך יוצרים מסד נתונים
2. מריצים את התבנית Dataflow firestore-to-firestore
מגדירים ומריצים את משימת Dataflow באמצעות התבנית firestore-to-firestore.
התבניות תומכות בהעברת כל מסד הנתונים או רק קבוצות אוספים ספציפיות.
מגבלות
כדאי לשים לב למגבלות הבאות של תבנית firestore-to-firestore
Dataflow:
- מסד הנתונים של המקור חייב להיות מסד נתונים במהדורת Standard.
- ההעברה קוראת נתונים בזמן קריאה ספציפי. מומלץ להפעיל שחזור לנקודת זמן (PITR) במסד הנתונים של המקור. אם PITR לא מופעל, תוקף הנתונים פג אחרי שעה, ויכול להיות שזה לא מספיק זמן להשלמת העברת הנתונים. התכונה PITR מאריכה את משך הזמן לשמירת נתונים לשבעה ימים.
- אינדקסים לא מועברים.
המשימה Dataflow לא מעבירה הגדרות של מסד נתונים כמו מדיניות זמן החיים (TTL), גיבויים, PITR ומפתחות הצפנה בניהול הלקוח (CMEK).
צריך להגדיר את ההגדרות האלה במסד הנתונים החדש. כדי לשפר את מהירות העברת הנתונים, כדאי להמתין עד לסיום ההעברה כדי להגדיר את ה-TTL, הגיבויים וה-PITR במסד הנתונים של היעד.
בדוגמאות הבאות אפשר לראות איך מריצים את התבנית באמצעות Google Cloud CLI.
העברת כל הנתונים
כדי להעביר את כל הנתונים, משתמשים בפקודה הבאה:
gcloud dataflow flex-template run "JOB_NAME" \ --project "PROJECT" \ --template-file-gcs-location gs://dataflow-templates-REGION_NAME/VERSION/flex/Cloud_Firestore_to_Firestore \ --region REGION_NAME \ --parameters "sourceProjectId=SOURCE_PROJECT_ID" \ --parameters "sourceDatabaseId=SOURCE_DATABASE_ID" \ --parameters "destinationProjectId=DESTINATION_PROJECT_ID" \ --parameters "destinationDatabaseId=DESTINATION_DATABASE_ID" \ --parameters "readTime=READ_TIME"
מחליפים את מה שכתוב בשדות הבאים:
-
JOB_NAME: שם למשימה. -
PROJECT: המזהה של פרויקט Google Cloud. -
REGION_NAME: המיקום Google Cloud שבו רוצים להריץ את משימת Dataflow. כדאי להשתמש במיקום שקרוב למסדי הנתונים.
VERSION: הגרסה של התבנית שרוצים להשתמש בה. אפשר להשתמש בערכים הבאים:-
latestכדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית האב ללא תאריך בדלי – gs://dataflow-templates-REGION_NAME/latest/ - שם הגרסה, כמו
2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית. אפשר למצוא את שם הגרסה בתיקיית האב המתאימה עם התאריך בדלי – gs://dataflow-templates-REGION_NAME/
-
SOURCE_PROJECT_ID: המזהה של פרויקט המקור Google Cloud שמכיל את מסד הנתונים של מהדורת Firestore Standard.
SOURCE_DATABASE_ID: המזהה של מסד הנתונים של מקור Cloud Firestore.
DESTINATION_PROJECT_ID: המזהה של פרויקט היעד Google Cloud עבור מסד הנתונים החדש Cloud Firestore.
DESTINATION_DATABASE_ID: המזהה של מסד הנתונים Cloud Firestore של היעד.
READ_TIME: חותמת הזמן לקריאת נתונים ממסד הנתונים של המקור. הערך צריך להיות חותמת זמן בפורמט RFC 3339, ברמת דיוק של דקה, כמו2026-05-15T16:31:00.00Z.חותמת הזמן התקפה המוקדמת ביותר תלויה בהגדרות של השחזור לנקודת זמן (PITR). איך מקבלים את השעה של הגרסה הכי מוקדמת
העברת קבוצות אוספים ספציפיות
כדי להעביר רק קבוצות מסוימות של אוספים, משתמשים בפקודה הבאה:
gcloud dataflow jobs run "JOB_NAME" \ --project "PROJECT" \ --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/Cloud_Firestore_to_Firestore \ --region REGION_NAME \ --parameters "sourceProjectId=SOURCE_PROJECT_ID" \ --parameters "sourceDatabaseId=SOURCE_DATABASE_ID" \ --parameters "collectionGroupIds=COLLECTION_GROUP_IDS" \ --parameters "destinationProjectId=DESTINATION_PROJECT_ID" \ --parameters "destinationDatabaseId=DESTINATION_DATABASE_ID" \ --parameters "readTime=READ_TIME"
מחליפים את מה שכתוב בשדות הבאים:
-
JOB_NAME: שם למשימה. -
PROJECT: המזהה של פרויקט Google Cloud. -
REGION_NAME: המיקום Google Cloud שבו רוצים להריץ את משימת Dataflow. כדאי להשתמש במיקום שקרוב למסדי הנתונים.
VERSION: הגרסה של התבנית שרוצים להשתמש בה. אפשר להשתמש בערכים הבאים:-
latestכדי להשתמש בגרסה העדכנית של התבנית, שזמינה בתיקיית האב ללא תאריך בדלי – gs://dataflow-templates-REGION_NAME/latest/ - שם הגרסה, כמו
2023-09-12-00_RC00, כדי להשתמש בגרסה ספציפית של התבנית. אפשר למצוא את הגרסה הספציפית בתיקיית האב המתאימה עם התאריך בדלי – gs://dataflow-templates-REGION_NAME/
-
SOURCE_PROJECT_ID: מזהה פרויקט המקור Google Cloud שמכיל את מסד הנתונים של מהדורת Firestore Standard.
SOURCE_DATABASE_ID: המזהה של מסד הנתונים של מקור Cloud Firestore.
COLLECTION_GROUP_IDS: רשימה מופרדת בפסיקים של מזהי קבוצות אוספים להעברה.אוספי משנה לא נכללים באופן רקורסיבי. לדוגמה, אם מציינים את
usersקבוצת הקולקציות, ההעברה לא תכלול קולקציית משנהmessagesב-/users/userid/messages, אלא אם מציינים גם אתmessagesקבוצת הקולקציות.
DESTINATION_PROJECT_ID: המזהה של פרויקט היעד Google Cloud עבור מסד הנתונים החדש Cloud Firestore.
DESTINATION_DATABASE_ID: המזהה של מסד הנתונים Cloud Firestore של היעד.
READ_TIME: חותמת הזמן לקריאת נתונים ממסד הנתונים של המקור. הערך צריך להיות חותמת זמן בפורמט RFC 3339, ברמת פירוט של דקה, כמו2026-05-15T16:31:00.00Z.חותמת הזמן התקפה המוקדמת ביותר תלויה בהגדרות של השחזור לנקודת זמן (PITR). איך מקבלים את השעה של הגרסה הכי מוקדמת
3. הגדרת מסד הנתונים
המשימה firestore-to-firestore מעבירה רק נתונים.
אינדקסים והגדרות אחרות של מסד הנתונים לא מועברים. בנוסף להעברת הנתונים, כדאי להגדיר את ההגדרות הבאות במסד הנתונים החדש:
אינדקסים: במסדי נתונים של מהדורת Firestore Enterprise לא נדרשים אינדקסים כדי להריץ שאילתות, ולא נוצרים אינדקסים אוטומטיים כברירת מחדל. כדי ליצור אינדקסים לשאילתות:
- סקירה כללית של אינדקסים במהדורת Enterprise של Firestore.
- אופטימיזציה של ביצועי השאילתות באמצעות אינדקסים.
- אפשר להשתמש ב-Firebase CLI כדי לייצא אינדקסים ולפרוס אותם במסד הנתונים החדש.
- אפשר להשתמש בתובנות לגבי שאילתות כדי לזהות שאילתות שאפשר לבצע להן אופטימיזציה באמצעות אינדקס.
TTL: יצירת מדיניות TTL.
גיבויים: הגדרת גיבויים.
PITR: Enable PITR (הפעלת PITR).
אחרי שמגדירים את מסד הנתונים, אפשר להמשיך לבדוק את האפליקציה עם מסד הנתונים החדש. כדי לבצע העברה מלאה, צריך לעדכן את האפליקציות כך שישתמשו במסד הנתונים החדש.
פתרון בעיות
במסדי נתונים גדולים, יכול להיות שהמשימה תיכשל אם היא קוראת יותר מדי נתונים בבת אחת. כדי לפתור את הבעיה:
מגדילים את הערך של
maxNumWorkers.
המאמרים הבאים
- מידע נוסף על ביצוע שאילתות על הנתונים באמצעות פעולות בצינורות
- מידע על אופטימיזציה של שאילתות במהדורת Firestore Enterprise
- הסבר על התאמת הגודל של מסד נתונים במהדורת Enterprise.