אחת האסטרטגיות להורדת קבצים גדולים נקראת הורדות של אובייקטים בפרוסות (slice).
בהורדה כזו, נשלחות במקביל בקשות GET בטווח מסוים, והנתונים מאוחסנים בקובץ יעד זמני שהוקצה מראש. אחרי סיום ההורדה של כל הפרוסות, השם של הקובץ הזמני ישתנה לשם של קובץ היעד.
הורדות של אובייקטים בפרוסות יכולות להיות מהירות יותר באופן משמעותי אם אין הגבלה מבחינת מהירות הרשת והדיסק. עם זאת, הורדות של אובייקטים בפרוסות גורמות לפעולות מרובות של כתיבה במיקומים שונים בדיסק. לכן אסטרטגיית ההורדה הזו עלולה לפגוע בביצועים של דיסקים עם זמני איתור (seek times) איטיים, במיוחד כשמפצלים את ההורדה למספר פרוסות גדול. כדי לצמצם את הסיכוי לפגיעה בביצועים, מספר הפרוסות שכלים כמו Google Cloud CLI יוצרים יש ערכים נמוכים כברירת מחדל.
כשמורידים אובייקטים בפרוסות, אתם צריכים תמיד להשתמש בסיכום ביקורת (checksum) קומפוזבילי מהיר (CRC32C) כדי לוודא את תקינות הנתונים של הפרוסות. כדי לבצע הורדות אובייקטים בפרוסות, כלים כמו ה-CLI של gcloud דורשים גרסה מקומפלת של crcmod במכונה שמבצעת את ההורדה. אם לא תהיה גרסת crcmod שעברה הידור, ה-CLI של gcloud יוריד את האובייקטים ללא חלוקה לפרוסות.
איך להשתמש בהורדות של אובייקטים בפרוסות בכלים שונים ובממשקי API
בהתאם לאינטראקציה שלכם עם Cloud Storage, יכול להיות שהורדות של אובייקטים בפרוסות מנוהלות בשבילכם באופן אוטומטי. בקטע הזה מתוארת ההתנהגות של הורדת אובייקטים בפרוסות בכלים שונים, ומובא הסבר איך אפשר לשנות את ההתנהגות.
המסוף
אי אפשר להוריד אובייקטים בפרוסות במסוף. Google Cloud
שורת הפקודה
כברירת מחדל, gcloud storage cp מאפשר הורדות של אובייקטים בפרוסות.
כדי לקבוע איך ומתי ה-CLI של gcloud יבצע הורדות של אובייקטים בפרוסות, אתם צריכים לשנות את המאפיינים הבאים:
storage/sliced_object_download_threshold: הגודל הכולל המינימלי של הקובץ להורדת אובייקט בפרוסות. אפשר להשבית את כל הורדות האובייקטים בפרוסות על ידי הגדרת הערך הזה ל-0.
storage/sliced_object_download_max_components: מספר הפרוסות המרבי לשימוש בהורדה. כדי שלא תהיה הגבלה, אתם צריכים להגדיר את הערך ל-0. במקרה כזה, מספר הפרוסות ייקבע אך ורק על ידיstorage/sliced_object_download_component_size.
storage/sliced_object_download_component_size: גודל היעד של כל פרוסה להורדה. אם הקובץ גדול כל כך שהורדת הפרוסות בגודל שהוגדר תדרוש יותר פרוסות ממה שמותר לפי הגדרתstorage/sliced_object_download_max_components, המערכת תתעלם מהמאפיין הזה.
כדי לשנות את המאפיינים האלה אפשר ליצור תצורה בעלת שם ולהחיל אותה בכל פקודה באמצעות הדגל --configuration ברמת הפרויקט או בכל הפקודות ב-CLI של gcloud באמצעות הפקודה gcloud config set.
כשמשתמשים ב-CLI של gcloud כדי להוריד אובייקטים בפרוסות, לא נדרש עוד מקום בכונן מקומי. אם ההורדה נכשלה לפני שהסתיימה, מריצים שוב את הפקודה כדי להמשיך את הורדת הפרוסות שלא ירדו. כשמבצעים ניסיון חוזר, תתבצע הורדה מחדש של פרוסות שכבר ירדו לפני שההורדה נכשלה רק אם אובייקט המקור השתנה בין ניסיונות ההורדה.
אובייקטים זמניים שירדו מופיעים בספריית היעד עם הסיומת _.gstmp בשם הקובץ שלהם.
ספריות לקוח
Java
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage Java API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
כדי להוריד אובייקטים בפרוסות, צריך להגדיר את AllowDivideAndConquer ל-true.
לדוגמה:
Node.js
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage Node.js API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
אפשר לבצע הורדות של אובייקטים בפרוסות באמצעות השיטה downloadFileInChunks. לדוגמה:
Python
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage Python API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
אפשר לבצע הורדות של אובייקטים בפרוסות באמצעות השיטה download_chunks_concurrently. לדוגמה:
ממשקי API ל-REST
API בפורמט JSON ו-API בפורמט XML תומכים בבקשות GET בטווח מסוים, כך שאתם יכולים להשתמש בכל אחד מממשקי ה-API האלה כדי להטמיע את האסטרטגיה שלכם להורדת אובייקטים בפרוסות.
כדי להגן מפני פגיעה בנתונים כתוצאה משינוי באובייקט המקור במהלך ההורדה, אתם צריכים לציין את מספר הגנרציה של אובייקט המקור בכל בקשת הורדה של פרוסה מהאובייקט.