אחת הדרכים להעלות קבצים גדולים נקראת העלאות מורכבות מקבילות. בהעלאה כזו, הקובץ מחולק ל-32 מקטעים לכל היותר ואת כל המקטעים מעלים במקביל לאובייקטים זמניים. לאחר מכן יוצרים מחדש את האובייקט הסופי מהאובייקטים הזמניים ומוחקים את האובייקטים הזמניים.
העלאות מורכבות מקבילות יכולות להיות מהירות משמעותית מהעלאה רגילה, בתנאי שמהירות הרשת ומהירות הכתיבה לדיסק לא מהוות גורם מגביל. יחד עם זאת, האובייקט הסופי שיאוחסן בקטגוריה יהיה אובייקט מורכב עם גיבוב crc32c בלבד (ללא גיבוב MD5). המשמעות היא שאם תורידו את האובייקט באמצעות אפליקציות של Python, תצטרכו להשתמש ב-crcmod כדי לבצע בדיקות תקינוּת. אפשר להשתמש בהעלאות מורכבות מקבילות רק כשהתנאים הבאים מתקיימים:
אם אתם לא צריכים שהאובייקטים שהעליתם יהיו עם גיבוב MD5.
אם google-crc32c או crcmod מותקנים אצל המשתמשים שצריכים להוריד את האובייקטים באמצעות Python, כולל משתמשי gsutil.
לדוגמה, אם אתם משתמשים ב-Python כדי להעלות נכסי וידאו שמוצגים רק באפליקציית Java, אפשר להשתמש בהעלאות מורכבות מקבילות כי ב-Java יש הטמעות יעילות של CRC32C.
איך להשתמש בהעלאות מורכבות מקבילות בכלים שונים ובממשקי API
יכול להיות שההעלאות המקבילות של אובייקטים מורכבים מנוהלות בשבילכם באופן אוטומטי בהתאם לאינטראקציה שלכם עם Cloud Storage. בקטע הזה מתוארת ההתנהגות של העלאה מקבילה של קובץ מורכב בכלים שונים, ומובא הסבר איך אפשר לשנות את ההתנהגות.
המסוף
מסוף Google Cloud לא מבצע העלאות מורכבות מקבילות.
שורת הפקודה
כדי להגדיר איך ומתי הפקודה gcloud storage cp תבצע העלאות מורכבות מקבילות, משנים את המאפיינים הבאים:
storage/parallel_composite_upload_enabled: זהו המאפיין להפעלת העלאות מורכבות מקבילות. אם הערך שלו מוגדר ל-False, ההעלאות המורכבות המקבילות מושבתות. אם הוא מוגדר ל-Trueאו ל-None, ההעלאות המורכבות המקבילות יופעלו לאובייקטים שעומדים בקריטריונים שמוגדרים במאפיינים האחרים. ערך ברירת המחדל הואNone.
storage/parallel_composite_upload_compatibility_check: זהו המאפיין שמפעיל את בדיקות האבטחה. אם הערך שלו הואTrue, הפקודהgcloud storageתבצע העלאות מורכבות מקבילות רק כשכל התנאים הבאים מתקיימים:- סוג האחסון (storage class) של האובייקט שמעלים הוא
STANDARD. - אין מדיניות שמירת נתונים בקטגוריית היעד.
- ברירת מחדל להחזקות אובייקטים לא מופעלת בקטגוריית היעד.
שימו לב: כדי לבדוק את התנאים האלה, ה-CLI של gcloud מאחזר את המטא-נתונים של קטגוריית היעד כחלק מפקודת ההעלאה.
אם הערך שלו הוא
False, הפקודהgcloud storageלא תבצע את הבדיקות. ערך ברירת המחדל הואTrue.- סוג האחסון (storage class) של האובייקט שמעלים הוא
storage/parallel_composite_upload_threshold: הגודל הכולל המינימלי של הקובץ לביצוע העלאה מורכבת מקבילה. הגדרת ברירת המחדל היא 150MiB.
storage/parallel_composite_upload_component_size: הגודל המקסימלי של כל אובייקט זמני. אם הקובץ הכולל גדול כל כך עד שנדרשים יותר מ-32 מקטעים בגודל הזה, המערכת מתעלמת מהמאפיין הזה.
storage/parallel_composite_upload_component_prefix: התחילית שמשמשת למתן שמות לאובייקטים זמניים. המאפיין הזה יכול להכיל נתיב מוחלט או נתיב יחסי לאובייקט הסופי. למידע נוסף, ראו תיאור של מאפיינים. ברירת המחדל לתחילית של השם היא הנתיב המוחלט/gcloud/tmp/parallel_composite_uploads/see_gcloud_storage_cp_help_for_details.
כדי לשנות את המאפיינים האלה אפשר ליצור תצורה בעלת שם ולהחיל אותה בכל פקודה באמצעות הדגל --configuration ברמת הפרויקט או בכל הפקודות ב-CLI של gcloud באמצעות הפקודה gcloud config set.
כשמשתמשים ב-CLI של gcloud כדי לבצע העלאות מורכבות מקבילות לא נדרש עוד מקום בכונן מקומי. אם העלאה מורכבת מקבילה נכשלה לפני שהושלמה, מריצים שוב את הפקודה ב-CLI של gcloud כדי לנצל את ההעלאות שניתן להמשיך לאובייקטים הזמניים שנכשלו. האובייקטים הזמניים שהועלו לפני שההעלאה נכשלה, לא יועלו מחדש כשממשיכים את ההעלאה.
השמות של האובייקטים הזמניים נקבעים באופן הבא:
TEMPORARY_PREFIX/RANDOM_VALUE_HEX_DIGEST_COMPONENT_ID
כאשר:
-
TEMPORARY_PREFIXנקבע על ידי המאפייןstorage/parallel_composite_upload_component_prefix. -
RANDOM_VALUEהוא ערך מספרי אקראי. -
HEX_DIGESTהוא גיבוב (hash) שנגזר מהשם של משאב המקור. -
COMPONENT_IDהוא המספר הרציף של המקטע.
כעיקרון, האובייקטים הזמניים נמחקים בסוף העלאה מורכבת מקבילה. אבל, כדי שלא יישארו אובייקטים זמניים בסביבה, צריך לבדוק את סטטוס היציאה של הפקודה ב-CLI של gcloud ולמחוק באופן ידני את כל האובייקטים הזמניים שהועלו כחלק מהעלאה שבוטלה.
ספריות לקוח
Java
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage Java API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
כדי לבצע העלאות מורכבות במקביל, צריך להגדיר את הערך AllowParallelCompositeUpload ל-true.
לדוגמה:
Node.js
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage Node.js API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
ספריית הלקוח Node.js לא תומכת בהעלאות מורכבות מקבילות. במקום זאת, צריך להשתמש בהעלאות מרובות חלקים באמצעות API בפורמט XML.
Python
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage Python API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
ספריית הלקוח Python לא תומכת בהעלאות מורכבות מקבילות. במקום זאת, צריך להשתמש בהעלאות מרובות חלקים באמצעות API בפורמט XML.
ממשקי API ל-REST
גם API בפורמט JSON וגם API בפורמט XML תומכים בהעלאה מקבילה של מקטעי אובייקטים והרכבה שלהם לאובייקט אחד באמצעות הפעולה compose.
כשמתכננים את הקוד להעלאות מורכבות מקבילות כדאי לקחת בחשבון את הנושאים הבאים:
הפעולה
composeלא משפיעה על האובייקטים במקור.כלומר, אם אתם מתכוונים שהם ישמשו כאובייקטים זמניים, אתם צריכים למחוק אותם באופן מפורש בסיום הרכבת האובייקט השלם. אחרת, הם יישארו במקור ויחויבו בהתאם.
כדי להגן מפני שינויים באובייקטים במקור בין בקשות ההעלאה לבקשות ההרכבה, צריך לציין את מספר דור המצופה לכל אובייקט במקור.