העברה ממהדורת Standard למהדורת Enterprise

כדי להעביר נתונים ממסד נתונים של מהדורת Firestore Standard למסד נתונים של מהדורת Firestore Enterprise, מומלץ להשתמש באחת מהאפשרויות הבאות:

  • התכונות ייבוא וייצוא. קבצי הנתונים מפעולת ייבוא תואמים למהדורות Enterprise ו-Standard.

  • תבנית Dataflow‏ firestore-to-firestore. שירות Dataflow מאפשר לכם ליצור צינורות עיבוד נתונים, והתבנית firestore-to-firestore יוצרת צינור עיבוד נתונים בין מסדי נתונים של Firestore.

ייבוא וייצוא היא האפשרות הפשוטה יותר, עם פחות אפשרויות הגדרה.

תבנית Dataflow ניתנת להתאמה אישית יותר. אתם יכולים להרחיב את קוד התבנית כדי לבצע העברות חלקיות או להמיר נתונים. אפשר גם לשלוט במספר העובדים ובגודל שלהם.

שתי האפשרויות תומכות בהעברות בין פרויקטים ואזורים.

העברת נתונים באמצעות ייצוא וייבוא

כדי להעביר נתונים באמצעות פעולות ייצוא וייבוא, אפשר לעיין במאמר בנושא ייצוא וייבוא של נתונים. כדי להעביר נתונים למסד נתונים בפרויקט אחר, אפשר לעיין במאמר בנושא העברת נתונים בין פרויקטים.

העברת נתונים באמצעות תבנית Dataflow

כדי להעביר נתונים באמצעות תבנית firestore-to-firestore Dataflow, פועלים לפי ההוראות הבאות.

לפני שמתחילים

  1. לפני שמתחילים בהעברת הנתונים, צריך לוודא ששחזור לנקודת זמן (PITR) מופעל במסד הנתונים של המקור. משימת Dataflow משתמשת ב-PITR כדי לקרוא נתונים בחותמת זמן של PITR. אם PITR מושבת, העבודה נכשלת אם היא פועלת יותר משעה.

  2. כדי להשתמש בתבנית הזו, צריך להפעיל את datastore.googleapis.com API.

  3. מקצים את התפקידים הנדרשים שמתוארים בקטע הבא.

התפקידים הנדרשים

כדי להעביר נתונים ממסד נתונים אחד למסד נתונים אחר, צריך להקצות את התפקידים הבאים. יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים:

  1. כדי לקבל את ההרשאות שנדרשות ליצירת מסד נתונים חדש ולגישה לנתוני Firestore, צריך לבקש מהאדמין להקצות לכם את התפקיד בעלים של Cloud Datastore (roles/datastore.owner) ב-IAM בפרויקט.
  2. כדי לתת למשימת Dataflow גישת קריאה וכתיבה למסדי הנתונים שלכם ב-Firestore, צריך להקצות לחשבון השירות של עובד Dataflow (לדוגמה, PROJECT_NUMBER-compute@developer.gserviceaccount.com) את התפקיד Cloud Datastore User (roles/datastore.user) ב-IAM בפרויקט.

    מידע נוסף על אבטחה ב-Dataflow זמין במאמר אבטחה והרשאות ב-Dataflow.

מידע נוסף על הקצאת תפקידי IAM מופיע במאמר ניהול הגישה לפרויקטים, לתיקיות ולארגונים.

‫1. יצירת מסד נתונים חדש במהדורת Firestore Enterprise

כדי להעביר נתונים ממסד נתונים במהדורת Standard למסד נתונים במהדורת Enterprise, צריך קודם ליצור את מסד הנתונים של היעד במהדורת Enterprise. איך יוצרים מסד נתונים

2. הפעלת תבנית Dataflow firestore-to-firestore

מגדירים ומריצים את משימת Dataflow באמצעות התבנית firestore-to-firestore. התבניות תומכות בהעברת כל מסד הנתונים או רק קבוצות אוספים ספציפיות.

מגבלות

חשוב להביא בחשבון את המגבלות הבאות של תבנית Dataflow:firestore-to-firestore

  • מסד הנתונים של המקור חייב להיות מסד נתונים במהדורת 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: המזהה של מסד הנתונים של Firestore כמקור.

  • DESTINATION_PROJECT_ID: המזהה של פרויקט היעד ב- Google Cloud למסד הנתונים החדש של Firestore.

  • DESTINATION_DATABASE_ID: המזהה של מסד הנתונים של היעד ב-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: המזהה של מסד הנתונים של Firestore כמקור.

  • COLLECTION_GROUP_IDS: רשימה מופרדת בפסיקים של מזהי קבוצות אוספים להעברה.

    אוספי משנה לא נכללים באופן רקורסיבי. לדוגמה, אם מציינים את users קבוצת אוספים, ההעברה לא תכלול קולקציית משנה messages ב-/users/userid/messages, אלא אם מציינים גם את messages קבוצת אוספים.

  • DESTINATION_PROJECT_ID: המזהה של פרויקט היעד ב- Google Cloud למסד הנתונים החדש של Firestore.

  • DESTINATION_DATABASE_ID: המזהה של מסד הנתונים של היעד ב-Firestore.

  • READ_TIME: חותמת הזמן לקריאת נתונים ממסד הנתונים של המקור. הערך צריך להיות חותמת זמן בפורמט RFC 3339, ברמת פירוט של דקה, כמו 2026-05-15T16:31:00.00Z.

    חותמת הזמן התקפה המוקדמת ביותר תלויה בהגדרות של השחזור לנקודת זמן (PITR). איך מקבלים את השעה של הגרסה הכי מוקדמת

3. הגדרת מסד הנתונים

המשימה firestore-to-firestore מעבירה רק נתונים. אינדקסים והגדרות אחרות של מסד הנתונים לא מועברים. בנוסף להעברת הנתונים, כדאי להגדיר את ההגדרות הבאות במסד הנתונים החדש:

אחרי שמגדירים את מסד הנתונים, אפשר להמשיך לבדוק את האפליקציה עם מסד הנתונים החדש. כדי לבצע העברה מלאה, צריך לעדכן את האפליקציות כך שישתמשו במסד הנתונים החדש.

פתרון בעיות

במסדי נתונים גדולים, יכול להיות שהמשימה תיכשל אם היא קוראת יותר מדי נתונים בבת אחת. כדי לפתור את הבעיה:

המאמרים הבאים