GH GambleHub

صادرات چند و آپلود بزرگ

1) هنگامی که صادرات «بزرگ» مورد نیاز است و مهم است

سناریوها: گزارش های مالی، آپلود فعالیت های کاربر، ممیزی/تنظیم کننده، آپلود BI، دایرکتوری های شریک، پشتیبان گیری. الزامات کلیدی:
  • سازگاری داده ها (snapshot/point in time).
  • قابلیت عبور در حجم (موازی نوشتن/خواندن، سریال سازی جریان).
  • تحویل تجدید پذیر و جزئی.
  • یکپارچگی (checksum) و قابلیت اطمینان (manifest).
  • امنیت/PII (پوشش، رمزگذاری، کنترل دسترسی).
  • مدیریت هزینه (فشرده سازی، زمان بندی، CDN، TTL).

2) فرمت های داده: جوانب مثبت/منفی

CSV - جمع و جور، سریع برای نوشتن/خواندن ؛ منفی: محافظ، انواع از دست داده است. مناسب برای گزارش های جدولی

JSON خطوط (JSONL) - توسط خط در هر شی، مناسب برای جریان و نمونه برداری جزئی ؛ منفی: حجم.
پارکت/آورو - قالب های ستون/مدار، فشرده سازی و پیش بینی فشار پایین ؛ ایده آل برای تجزیه و تحلیل و داده های بزرگ.
مخلوط: JSONL برای دانلود API → تبدیل آفلاین به پارکت.

فشرده سازی: 'gzip '/' zstd' (بهتر). برای حجم های بسیار بزرگ - آرشیو تقسیم (~ 128-512 MB در هر بخش).

3) سازگاری: چگونه می توان یک «عکس فوری» دریافت کرد

DB: انعطاف پذیری معامله قابل خواندن/SNAPSHOT قابل تکرار ؛ برای موضوعات، اسلات تکرار منطقی یا علامت (حداکثر. 'updated _ at '/version).
منابع رویداد: صادرات توسط ورود به سیستم افست.
برش ها: صادرات «کامل» + «deltas» (بارگذاری های بعدی تغییرات از زمان «علامت گذاری»).

4) چند بخش/chunking

4. 1 انواع «چند بخشی»

آپلود (به ما): چند بخش/فرم داده (فایل های کوچک)، S3 چند آپلود (MPU )/GCS Resumable (بزرگ).
Download (from us): محدوده HTTP ('bytes = start-end')، 'multipart/byteranges' (چندین محدوده در یک پاسخ)، 'zip of parts'، دایرکتوری ها در پشته شی.

4. 2 استراتژی های تقسیم

با اندازه (به عنوان مثال، 256 مگابایت در هر قسمت).
با کلید/تاریخ (sharding توسط 'tenant _ id'، 'YYYY/MM/DD').
توسط جدول/نهاد (فایل های فردی در هر نوع).

تعادل: قطعات 64-512 مگابایت به خوبی به صورت موازی دانلود می شوند و حافظه را بیش از حد گرم نمی کنند.

5) معماری صادرات API (مدل ناهمزمان)

مراحل:

1. 'POST/export' → کار در صف (ابرداده: فرمت، فیلتر، رمزگذاری، طول عمر).

2. کارگران ساخت عکس های فوری، جریان داده ها، و نوشتن قطعات به شی ذخیره سازی.

3. ایجاد یک مانیفست (JSON) با یک لیست از قطعات، اندازه، checksum، نسخه طرح.

4. 'GET/export/{ id}' وضعیت و پیوند (ها) را به قسمت هایی از/URL از پیش امضا شده باز می گرداند.

5. 'GET/صادرات/{ شناسه }/آشکار. json '- ماشین حقیقت برای تأیید/بارگیری مجدد.

به عنوان مثال آشکار:
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: مشتری «tail» فایل را بارگذاری می کند: «محدوده: بایت = 241172480-».
محدوده های چندگانه: «محدوده: بایت = 0-999، 2000-2999» → «محتوا نوع: چند بخش/byteranges» پاسخ.
استراتژی مشتری: موازی «کارگران» در قطعات، تایید «sha256» از هر، retrai با عقب نشینی نمایی.
CDN: پشتیبانی از محدوده، بافر پاسخ بزرگ غیر فعال است.

7) دریافت های بزرگ برای ما (آپلود مجدد)

S3 چند آپلود: مشتریان دانلود قطعات (5-5000)، سرور جمع آوری 'CompleteMultipartUpload'.
GCS Resumable - یک جلسه، آفست - مشتری می تواند با «Content-Range» ادامه دهد.
TUS (پروتکل) یک اپلود مستقل قابل تجدید در بالای HTTP است.

الگوی B2B: ما URL از پیش امضا شده را برای apload قطعات به طور مستقیم به فروشگاه و ابرداده به API ما ارسال می کنیم.

8) فشرده سازی، رمزگذاری، یکپارچگی

فشرده سازی: 'zstd' ترجیح داده شده (نسبت بهتر/سرعت). فشرده سازی هر بخش به طور جداگانه (راحت تر برای تجدید/کش).

رمزگذاری:
  • روی سیم: TLS 1. 2+.
  • در حالت استراحت: KMS سمت سرور (SSE-KMS) یا سمت سرویس گیرنده (AES-256-GCM) با بسته بندی کلید.
  • هرگز کلید «خام» را در مانیفست قرار ندهید.
  • Checksum: حداقل SHA-256 در هر قسمت + مشترک برای کل مجموعه. بررسی در مشتری قبل از ACK.

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;
}
}
هدر های پاسخ:
  • 'محتوا-وضع: پیوست ؛ filename = "صادرات _ 2025-10-31 _ part-00000. پارکت. «زست»
  • 'ETag '/' If-Range' برای بارگذاری صحیح.
  • 'Cache-Control' (به عنوان مثال، 'خصوصی، حداکثر سن = 3600') برای آپلود شخصی.

10) ایمنی و انطباق

احراز هویت/مجوز: صدور صادرات فقط به مالک/نقش ؛ پیش امضا شده با TTL کوتاه.
PII: ماسک کردن/نام مستعار ؛ در آشکار - فقط زمینه های فنی.
GDPR/تنظیم کننده های محلی: حذف صادرات توسط TTL، ممیزی بارگیری، ممنوعیت صدور بین منطقه ای بدون دلیل.
محدود کردن نرخ و سهمیه: محدود کردن تعداد صادرات همزمان و حجم کل در روز/ماه (برای هر مستاجر).
Anti-scraping: فیلترهای CAP/bot برای صدور لینک، محدود کردن محدوده (حداکثر قطعات موازی).

11) قابلیت مشاهده و عملکرد

معیارها:
  • 'export _ jobs _ total {status}' (صف/در حال اجرا/موفق/ناموفق/منقضی شده)
  • 'export _ bytes _ total', 'export _ part _ duration _ ms {p50, p95, p99}'
  • 'download _ range _ requests _ total', 'resumes _ total', 'checksum _ fail _ total'
  • 'storage _ cost _ estimate' и 'egress _ bytes _ cdn'
سیاهههای مربوط/حسابرسی:
  • چه کسی صادرات، فیلترها، علامت گذاری، لیست دانلود (IP/UA/time) را ایجاد کرد.
  • هش قطعات و آشتی سمت مشتری (تایید).
ردیابی:
  • Spans: snapshot → serialize → بخش آپلود → finalize.

12) عملکرد و هزینه

موازی سازی: تولید چندین قسمت به طور همزمان (N کارگر)، اما محدود کردن I/O.
حافظه: سریال سازی جریان (تکرار کننده، نشانگر پایگاه داده، تکه های 4-16 مگابایت).
Dedup: برای صادرات مکرر، حافظه پنهان هوشمند قطعات توسط فیلترها/هش.
CDN: مفید برای مجموعه های عمومی «عمومی» ؛ برای شخصی - احتیاط (ایمنی/PII).

13) نمونه هایی از رابط

13. 1 ایجاد صادرات (REST)

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 (روز/هفته) + deltas هر ساعت توسط 'updated _ at> watermark'.
در طرف مصرف کننده، deltas را با تأیید «version »/« seq» اعمال کنید.
آخرین علامت را در مصرف کننده و در آشکار نگه دارید.

15) ضد الگوهای

تولید صادرات در درخواست (همزمان) - زمان بندی و OOM.
یک فایل غول پیکر بدون تقسیم عدم توانایی برای از سرگیری/دانلود موازی است.
فقدان چک سام و آشکار - شما نمی توانید صداقت را ثابت کنید.
صدور لینک های عمومی دائمی به اطلاعات شخصی.
بافر SSE/CDN یا دامنه غیرفعال - «بارگذاری مجدد» را می شکند.
صادرات داده های کثیف (بدون عکس فوری/انزوا).

16) چک لیست پیاده سازی

  • فرمت و فشرده سازی: CSV/JSONL/پارکت + 'zstd/gzip'.
  • سازگاری: عکس فوری معاملاتی یا علامت/افست.
  • پارتیشن بندی: 64-512 مگابایت قطعات، تولید موازی و دانلود.
  • Manifest: لیست قطعات، ابعاد، SHA-256، نسخه طرح، علامت.
  • تجدید: محدوده HTTP، پشتیبانی چند بخش/byteranges، مشتری retrays.
  • امنیت: URL های از پیش امضا شده، TTL، رمزگذاری (KMS/AEAD)، ماسک PII.
  • محدودیت/سهمیه: برای هر مستاجر، حجم روزانه، تعداد مشاغل فعال.
  • قابل مشاهده بودن: معیارهای شغلی/بخشی، ممیزی بارگیری، هشدارهای خرابی چک.
  • هزینه: CDN برای مجموعه های عمومی، TTL و تمیز کردن خودکار در فروشگاه.
  • Runbooks/بازی روز: شکست شبکه، در دسترس نبودن فروشگاه، پایگاه داده بیش از حد، شکست KMS.

17) روزهای بازی (کتاب های بازی)

افت شبکه در هنگام بارگیری: مشتری باید با «Range» ادامه دهد.
یک قسمت بارگیری نشد: قسمت retray بدون بازسازی کل صادرات.
سقوط کارگر: کار با آخرین قطعه تایید نشده ادامه می یابد.
KMS در دسترس نیست: تخریب امن (مکث نسل، رمزگذاری نشده را آزاد نکنید).
× رشد داده 2: زمان تولید را بررسی کنید، توزیع مجدد موازی، پایگاه داده را از بین نبرید.

18) مجموع

بارهای بزرگ قابل اعتماد معماری ناهمزمان + پارتیشن بندی + تجدید + یکپارچگی قابل اثبات است. یک عکس فوری بگیرید، قطعات را به صورت موازی بنویسید، مانیفست را با چک سام منتشر کنید، از دامنه HTTP و پیوندهای کوتاه مدت پشتیبانی کنید. از طریق امنیت، محدودیت ها و قابلیت مشاهده فکر کنید - و صادرات گیگابایت متوقف خواهد شد که یک کابوس برای تیم ها و کاربران باشد.

Contact

با ما در تماس باشید

برای هرگونه سؤال یا نیاز به پشتیبانی با ما ارتباط بگیرید.ما همیشه آماده کمک هستیم!

Telegram
@Gamble_GC
شروع یکپارچه‌سازی

ایمیل — اجباری است. تلگرام یا واتساپ — اختیاری.

نام شما اختیاری
ایمیل اختیاری
موضوع اختیاری
پیام اختیاری
Telegram اختیاری
@
اگر تلگرام را وارد کنید — علاوه بر ایمیل، در تلگرام هم پاسخ می‌دهیم.
WhatsApp اختیاری
فرمت: کد کشور و شماره (برای مثال، +98XXXXXXXXXX).

با فشردن این دکمه، با پردازش داده‌های خود موافقت می‌کنید.