GH GambleHub

יצוא רב ־ גוני ועליות גדולות

1) כאשר דרושים יצוא ”גדול” ומה חשוב

תרחישים: דוחות כספיים, העלאות פעילות המשתמש, ביקורות/רגולטורים, העלאות BI, ספריות שותף, גיבויים. דרישות מפתח:
  • עקביות נתונים (צילום/נקודה בזמן).
  • מעבר בנפח (כתיבה/קריאה מקבילה, הזרמת סריאליזציה).
  • משלוח מתחדש וחלקי.
  • שלמות (checksum) ואימות (מניפסט).
  • אבטחה/PII (מיסוך, הצפנה, בקרת גישה).
  • ניהול עלויות (דחיסה, פסקי זמן, CDN, TTL).

2) פורמטים נתונים: יתרונות/חסרונות

CSV - קומפקטי, מהיר לכתיבה/קריאה; חסרונות: מיגון, סוגים אבודים. טוב לדיווחים טבעיים.
קווי JSON (JSONL) - על ידי קו לכל אובייקט, נוח להזרמה ודגימה חלקית; חסרונות: נפח.
פרקט/אברו - עמודה/תבניות מעגל, דחיסה וחיזוי שכיבות סמיכה; אידיאלי לאנליטיקה ונתונים גדולים.
מעורבב: JSONL להורדת API # המרה לא מקוונת לפרקט.

דחיסה: "gzip "/" zstd' (טוב יותר). לכרכים גדולים מאוד - ארכיונים מפוצלים (~ 128-512 MB לחלק).

3) עקביות: כיצד להשיג ”צילום”

DB: Repartable Read/SNAPSHOT Transactional Division; עבור אשכולות, חריצי שכפול לוגיים או סימן מים (max. "מעודכן _ at'/גרסה).
מיקור אירועים: יצוא על ידי רישום קיזוז.
פרוסות: ”מלא” ייצוא + ”deltas” (לאחר מכן העלאות של שינויים מאז ”watermark”).

4) מולטי פארט/צ 'אנק

4. 1 סוגים של ”רב ־ חלקים” ‏

העלאה (אלינו): Multipart/form-data (קבצים קטנים), S3 Multipart Upload (MPU )/GCS Resummable (גדול).
הורדה (מאיתנו): HTTP Range ('bytes = start-end'),' multipart/byteranges '(מספר טווחים בתגובה אחת),' zip of parts ', ספריות בערימת העצם.

4. 2 אסטרטגיות פיצול

לפי גודל (לדוגמה, 256 MB לחלק).
על ידי key/date (מחודד על ידי "terant _ id'," YYYY/MM/DD ").
על ידי טבלה/ישות (קבצים בודדים לכל סוג).

שיווי משקל: חלקים של 64-512 MB מורידים היטב במקביל ולא מתחממים יתר על המידה בזיכרון.

5) ייצוא ארכיטקטורת API (מודל אסינכרוני)

צעדים:

1. 'POST/Exporting' Gob = עבודה בתור (metadata: פורמט, מסננים, הצפנה, לכל החיים).

2. עובדים בונים תמונות, מזרימים נתונים, וכותבים חלקים לאחסון אובייקטים.

3. צור מניפסט (JSON) עם רשימה של חלקים, גדלים, checksum, סכימה.

4. 'GET/Export/Yid' מחזירה מעמד וקישור (s) לחלקים של/חתומים מראש כתובת.

5. 'קבל/יצוא/& id/מניפסט. מכונת אמת לאימות/טעינה מחדש.

רשימת דוגמאות:
json
{
"export_id": "exp_2025_10_31_001",
"created_at": "2025-10-31T14:23:00Z",
"schema": "orders_v3",
"format": "parquet+zstd",
"parts": [
{"name":"part-00000. parquet. zst","size":268435456,"sha256":"...","url":"...","range":"bytes=0-268435455"},
{"name":"part-00001. parquet. zst","size":241172480,"sha256":"...","url":"..."}
],
"total_bytes": 509607936,
"encryption": {"type":"AES-256-GCM","key_id":"kms/keys/exp"},
"watermark": {"type":"updated_at","value":"2025-10-31T00:00:00Z"}
}

6) ניתן מחדש

טווח HTTP: הלקוח טוען את ”הזנב” של הקובץ: ”Range: bytes = 241172480-”.
מספר טווחים: 'Range: bytes = 0-999, 2000-2999' Content-Type: multipart/byteranges 'reservation.
אסטרטגיית הלקוח: מקביל ”עובדים” בחלקים, אימות של 'sha256' של כל אחד, retrai עם גיבוי מעריכי.
CDN: תמיכה בטווח, חיץ תגובה גדול מנוטרל.

7) הורדות גדולות אלינו (העלאה חוזרת)

S3 Multipart Upload: לקוחות מורידים חלקים (5-5000), השרת אוסף את 'LoughtPartupload'.
GCS ניתן להחזרה - מפגש אחד, קיזוז - הלקוח יכול להמשיך עם 'Content-Range'.
פרוטוקול TUS (ראשי תיבות של TUS) הוא התקן חידוש עצמאי על גבי HTTP.

תבנית B2B: אנו שולחים את הכתובת החתומה מראש עבור כמות החלקים ישירות לחנות, ואת המטא-נתונים ל-API שלנו.

8) דחיסה, הצפנה, שלמות

דחיסה: "zstd' עדיפה (יחס טוב יותר/מהירות). דחוס כל חלק בנפרד (נוח יותר לחדש/מטמון).

הצפנה:
  • על החוט: TLS 1. 2+.
  • במנוחה: בצד השרת KMS (SSE-KMS) או בצד הלקוח (AES-256-GCM) עם עטיפת מפתחות.
  • לעולם אל תשים מפתח ”גולמי” במניפסט.
  • Checksum: מינימום SHA-256 לחלק + נפוץ עבור כל הקבוצה. בדוק על הלקוח לפני אק.

9) אינטגרציה היקפית: NGINX/CDN

NGINX (טווח + פסקי זמן ארוכים + ביטול חציצה):
nginx server {
listen 443 ssl http2;
server_name downloads. example. com;

location /exports/ {
proxy_buffering off;
proxy_request_buffering off;
proxy_read_timeout 3600s;
add_header Accept-Ranges bytes;
proxy_pass http://export-backend;
}
}
כותרות תגובה:
  • 'תוכן-נטייה: מצורף; שם קובץ = "export _ 2025-10-31 _ part-000000. פרקט. zst'"
  • 'Etag '/' If-Range' עבור טעינה נכונה.
  • 'מטמון-בקרה' (לדוגמה, 'פרטי, מקסימום גיל = 3600') עבור העלאות אישיות.

10) בטיחות וציות

אימות/אישור: הנפקת יצוא רק לבעלים/תפקידים; חתום מראש עם TTL קצר.
PII: מיסוך/כינוי; במניפסט - רק בתחומים טכניים.
GDPR/רגולטורים מקומיים: מחיקת הייצוא על ידי TTL, בחינת הורדות, איסור על הפקת סחורה חוצה-אזורית ללא סיבה.
מגביל את מספר היצוא הסימולטני והנפח הכולל ליום/חודש (לכל דייר).
אנטי-גירוד: מסנני CAP/בוט להפקת קישורים, מגבילים טווחים (חלקים מקבילים מקסימליים).

11) יכולת תצפית ותפעול

מדדים:
  • 'export _ works _ total _ status' (תור/ריצה/הצליח/נכשל/פג תוקף)
  • 'export _ bytes _ total', 'export _ part _ wardation _ ms _ p50, p95, p99'
  • 'Download _ range _ coses _ total', 'קורות חיים _ total', 'checksum _ fall _ total&fs
  • 'storage _ cost _ associate' egress _ bytes _ cdn&fose
יומנים/ביקורת:
  • מי יצר את הייצוא, המסננים, סימן המים, רשימת ההורדות (IP/UA/time).
  • חשיש חלקי ופיוס צד לקוח (אישורים).
איתור:
  • spans: snapshot = serialize = להעלות חלק = לסיים.

12) ביצועים ועלות

מקבילית: צור חלקים מרובים בו זמנית (N Workers), אך הגביל את I/O.
זיכרון: הזרמת סריאליזציה (איטרטורים, מסכי נתונים, נתחים של 4-16 MB).
דדופ: עבור יצוא חוזר ונשנה, מטמון חכם של חלקים על ידי פילטרים/חשיש.
CDN: מועיל עבור סטים ציבוריים ”גנריים”; לזהירות אישית (בטיחות/מח "ש).

13) דוגמאות של ממשקים

13. 1 צור ייצוא (מנוחה)

http
POST /exports
Content-Type: application/json
Authorization: Bearer <token>

{
"format": "parquet+zstd",
"filters": {"date_from":"2025-10-01","date_to":"2025-10-31","tenant":"acme"},
"split_size_mb": 256,
"encryption": {"mode":"server-side-kms","key_id":"kms/keys/exp"}
}
תשובה:
json
{
"id":"exp_2025_10_31_001",
"status":"queued",
"estimated_parts": 12,
"manifest_url": "/exports/exp_2025_10_31_001/manifest. json"
}

13. 2 הנפקת חלק עם טווח

http
GET /exports/exp_.../part-00003. parquet. zst
Range: bytes=1048576-

13. 3 פסאודוקודה של וורקר

pseudo snapshot = db. begin_snapshot()
for shard in plan_shards(snapshot):
part_stream = encode_stream(shard. rows, format="parquet", compress="zstd")
url = object_store. upload_stream(part_stream, part_name, encryption=KMS)
manifest. add(part_name, size, sha256, url)
write_manifest(manifest)

14) דפוסי ייצוא דלתא

יצוא מלא פעם אחת ב- N (יום/שבוע) + דלתות כל שעה על ידי 'עדכון _ at> סימן מים'.
בצד הצרכני, ליישם את הדלתות על ידי אימות 'version '/' seq'.
שמור את סימן המים האחרון בצרכן ובמניפסט.

15) אנטי דפוסים

יצוא דור בקשת (סינכרוני) - פסקי זמן ו-OOM.
קובץ ענק אחד ללא פיצול הוא חוסר היכולת לחדש/להקביל הורדה.
היעדר צ 'קסום וגילוי - אתה לא יכול להוכיח יושרה.
הוצאה של קישורים ציבוריים קבועים למידע אישי.
חציצה של SSE/CDN או טווח מנוטרל - שוברת את ה ”טעינה מחדש”.
ייצוא מידע מלוכלך (ללא צילום/בידוד).

16) רשימת מימושים

[ ] פורמט ודחיסה: CSV/JSONL/Parquet + zstd/gzip.
[ ] עקביות: תמונת מעבר או סימן מים/קיזוז.
[ ] מחיצה: 64-512 חלקי MB, דור מקביל והורדה.
[ ] מניפסט: רשימת חלקים, ממדים, SHA-256, סכימה, סימן מים.
[ חידוש ]: HTTP Range, 'מולטי-פארט/בייטרנג' תמיכה, מגשים מחדש לקוח.

אבטחה: כתובות חתומות מראש, TTL, הצפנה (KMS/AEAD), מיסוך PII.
גבולות/מכסות: לכל דייר, כרכים יומיים, מספר עבודות פעילות.

[ תצפית ]: מטרי עבודה/חלק, ביקורת הורדה, התראות צ 'קסום-כשל.
[ עלות ]: CDN עבור סטים ציבוריים, TTL וניקוי אוטומטי בחנות.
[ ] Runbooks/Game Days: רשת נשברת, חנות לא זמינה, מסד נתונים מתחמם יתר על המידה, כשל KMS.

17) ימי משחק (חוברות משחק)

הורדת רשת במהלך ההורדה: הלקוח חייב להמשיך עם 'Range'.
חלק אחד לא הצליח לטעון: חלק המגש מחדש מבלי לשחזר את כל היצוא.
העבודה מתחדשת עם החתיכה האחרונה שלא אושרה.
KMS לא זמין: ביטול מאובטח (הפוגה בדור, אל תשחרר לא מוצפן).
צמיחת נתונים x2: לבדוק את זמן הדור, לחלק מקביליות מחדש, לא להרוג את מסד הנתונים.

18) סיכומים

פריקות גדולות אמינות הן ארכיטקטורה אסינכרונית + החלקה + חידוש + שלמות ניתנת לאימות. קחו תצלום, כתבו חלקים במקביל, פרסמו מניפסט עם checksum, תמכו ב HTTP Range וקישורים קצרים. תחשוב דרך ביטחון, גבולות ויכולת תצפית - ויצוא ג 'יגה בייט יחדל להיות סיוט עבור צוותים ומשתמשים.

Contact

צרו קשר

פנו אלינו בכל שאלה או צורך בתמיכה.אנחנו תמיד כאן כדי לעזור.

Telegram
@Gamble_GC
התחלת אינטגרציה

Email הוא חובה. Telegram או WhatsApp — אופציונליים.

השם שלכם לא חובה
Email לא חובה
נושא לא חובה
הודעה לא חובה
Telegram לא חובה
@
אם תציינו Telegram — נענה גם שם, בנוסף ל-Email.
WhatsApp לא חובה
פורמט: קידומת מדינה ומספר (לדוגמה, +972XXXXXXXXX).

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