GH GambleHub

الصادرات المتعددة الأجزاء والتحميلات الكبيرة

1) عندما تكون هناك حاجة إلى صادرات «كبيرة» وما هو مهم

السيناريوهات: التقارير المالية، وتحميلات نشاط المستخدم، وعمليات التدقيق/المنظمين، وتحميلات الكتاب المقدس، وأدلة الشركاء، والنسخ الاحتياطية. الاحتياجات الرئيسية:
  • اتساق البيانات (لقطة/نقطة زمنية).
  • إمكانية المرور في المجلد (كتابة/قراءة موازية، تسلسل البث).
  • التسليم المتجدد والجزئي.
  • النزاهة (checksum) وإمكانية التحقق (بيان).
  • الأمن/PII (الإخفاء والتشفير والتحكم في الدخول).
  • إدارة التكاليف (الضغط، المهلات، CDN، TTL).

2) صيغ البيانات: الإيجابيات/السلبيات

CSV - مضغوط، سريع الكتابة/القراءة ؛ السلبيات: الحماية، الأنواع المفقودة. جيد للتقارير المجدولة.
JSON Lines (JSONL) - حسب الخط لكل كائن، وملائم للبث وأخذ العينات الجزئية ؛ السلبيات: الحجم.
Parquet/Avro - أشكال العمود/الدائرة، الضغط والتنبؤ بالدفع ؛ مثالية للتحليلات والبيانات الضخمة.
مختلط: JSONL لتنزيل API → تحويل غير متصل إلى Parquet.

الضغط: «gzip »/« zstd» (أفضل). للأحجام الكبيرة جدًا - أرشيفات مقسمة (~ 128-512 ميجابايت لكل جزء).

3) الاتساق: كيفية الحصول على «لقطة»

DB: قابل للتكرار اقرأ/SNAPSHOT عزلة المعاملات ؛ بالنسبة للخيوط أو فتحات التكرار المنطقية أو العلامات المائية (الحد الأقصى "محدث _ at'/النسخة).
مصادر الأحداث: التصدير حسب سجل التعويض.
الشرائح: التصدير «الكامل» + «الدلتا» (التحميلات اللاحقة للتغييرات منذ «العلامة المائية»).

4) قطع متعددة/قطع

4. 1 أنواع «متعددة الأجزاء»

تحميل (إلينا): multipart/form-data (ملفات صغيرة), S3 Multipart Upload (MPU )/GCS Restainable (كبير).
تنزيل (منا): نطاق HTTP («bytes = start-end')،» multipart/byteranges «(عدة نطاقات في استجابة واحدة)،» zip of parts'، أدلة في كومة الكائن.

4. 2 استراتيجيات التقسيم

حسب الحجم (على سبيل المثال، 256 ميجابايت لكل جزء).
حسب المفتاح/التاريخ (الشحن بواسطة 'المستأجر _ id'، 'YYYY/MM/DD').
حسب الجدول/الكيان (الملفات الفردية لكل نوع).

التوازن: يتم تنزيل أجزاء 64-512 ميجابايت جيدًا بالتوازي ولا تسخن الذاكرة.

5) بنية واجهة برمجة التطبيقات التصديرية (نموذج غير متزامن)

الخطوات:

1. وظيفة → "POST/exports' في قائمة الانتظار (البيانات الوصفية: التنسيق، المرشحات، التشفير، العمر).

2. يقوم العمال ببناء لقطات، وتدفق البيانات، وكتابة الأجزاء لتخزين الأشياء.

3. قم بإنشاء بيان (JSON) مع قائمة بالأجزاء والأحجام والكشكسوم وإصدار المخطط.

4. «GET/Exports/{ id}» حالة العوائد والربط (الربط) بأجزاء من/عنوان URL الموقع مسبقًا.

5- 'GET/Exports/{ id }/manifest. جسون - آلة الحقيقة للتحقق/إعادة التحميل.

مثال واضح:
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: يقوم العميل بتحميل «ذيل» الملف: «النطاق: بايت = 241172480-».
النطاقات المتعددة: «النطاق: البايتات = 0-9992000-2999» → «نوع المحتوى: استجابة متعددة الأطراف/byteranges».
استراتيجية العميل: موازية «العمال» في أجزاء، التحقق من «sha256» لكل منها، retrai مع تراجع أسي.
CDN: دعم النطاق، وتعطيل الاستجابة الكبيرة.

7) تنزيلات كبيرة لنا (تحميل قابل للاستئناف)

S3 Multipart Upload: يقوم العملاء بتنزيل الأجزاء (5-5000)، ويجمع الخادم "CompleteMultipartUpload'.
GCS المستأنف - جلسة واحدة، تعويضات - يمكن للعميل الاستمرار في «نطاق المحتوى».
TUS (بروتوكول) هو حمل مستقل متجدد على رأس HTTP.

النمط B2B: نرسل عنوان URL الموقع مسبقًا لتحميل الأجزاء مباشرة إلى المتجر، والبيانات الوصفية إلى واجهة برمجة التطبيقات الخاصة بنا.

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;
}
}
رؤوس الرد:
  • 'المحتوى - التصرف: المرفق ؛ اسم الملف = "export _ 2025-10-31 _ part-00000. parquet. zst"
  • 'ETag '/' If-Range' للتحميل الصحيح.
  • "Cache-Control' (على سبيل المثال،" private، max-age = 3600 ") للتحميلات الشخصية.

10) السلامة والامتثال

التوثيق/الإذن: إصدار الصادرات إلى المالك/الأدوار فقط ؛ تم توقيعه مسبقًا مع TTL قصير.
PII: الإخفاء/التسريح ؛ في البيان - المجالات التقنية فقط.
اللائحة العامة لحماية البيانات/المنظمون المحليون: حذف الصادرات بواسطة TTL، مراجعة عمليات التنزيل، حظر الإصدار عبر الإقليمي دون سبب.
تحديد الأسعار والحصص: الحد من عدد الصادرات المتزامنة وإجمالي الحجم في اليوم/الشهر (لكل مستأجر).
مضاد للكشط: مرشحات CAP/bot لإصدار الروابط، ونطاقات الحد (الأجزاء المتوازية القصوى).

11) إمكانية الرصد والتشغيل

المقاييس:
  • 'export _ jobs _ total {status}' (قائمة الانتظار/التشغيل/النجاح/الفشل/انتهاء الصلاحية)
  • 'export _ bytes _ total', 'export _ part _ tormation _ ms {p50, p95, p99}'
  • «download _ range _ requests _ total», «reseves _ total», «checksum _ fail _ total»
  • 'storage _ cost _ estimate' и 'ext _ bytes _ cdn'
السجلات/عمليات التدقيق:
  • من أنشأ قائمة التصدير والفلاتر والعلامة المائية والتنزيل (IP/UA/time).
  • تجزئة القطع وتسوية جانب العملاء (تأكيدات).
التعقب:
  • Spans: لقطة → تسلسل → تحميل جزء → الانتهاء.

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 (يوم/أسبوع) + دلتا كل ساعة بواسطة «محدث _ على> علامة مائية».
على جانب المستهلك، قم بتطبيق الدلتا من خلال التحقق من «version »/« seq».
احتفظ بآخر علامة مائية في المستهلك وفي البيان.

15) الأنماط المضادة

توليد الصادرات في الطلب (متزامن) - المهلة و OOM.
أحد الملفات العملاقة بدون تقسيم هو عدم القدرة على استئناف/التنزيل المتوازي.
قلة الشيكات والظهور - لا يمكنك إثبات النزاهة.
إصدار روابط عامة دائمة بالبيانات الشخصية.
تخزين SSE/CDN أو النطاق المعاق - يكسر «إعادة التحميل».
تصدير البيانات القذرة (بدون لقطة/عزل).

16) قائمة التنفيذ المرجعية

  • الشكل والضغط: CSV/JSONL/Parquet + 'zstd/gzip'.
  • الاتساق: لقطة معاملات أو علامة مائية/تعويض.
  • التقسيم: 64-512 ميجابايت من الأجزاء، التوليد والتنزيل الموازي.
  • بيان: قائمة الأجزاء، والأبعاد، SHA-256، ونسخة المخطط، والعلامة المائية.
  • التجديد: HTTP Range، دعم «multipart/byteranges»، إعادة تشغيل العملاء.
  • الأمن: عناوين URL موقعة مسبقًا، TTL، التشفير (KMS/AEAD)، قناع PII.
  • الحدود/الحصص: لكل مستأجر، والأحجام اليومية، وعدد الوظائف العاملة.
  • قابلية الملاحظة: مقاييس الوظيفة/الجزء، عمليات تدقيق التنزيل، تنبيهات فشل الشيكات.
  • التكلفة: CDN للأطقم العامة و TTL والتنظيف التلقائي في المتجر.
  • كتب التشغيل/أيام اللعبة: فواصل الشبكة، عدم توفر المتجر، ارتفاع درجة حرارة قاعدة البيانات، فشل KMS.

17) أيام اللعبة (كتب اللعب)

إسقاط الشبكة أثناء التنزيل: يجب على العميل الاستمرار في «المدى».
فشل جزء واحد في التحميل: إعادة الدفع الجزئي دون إعادة إنشاء التصدير بأكمله.
سقوط العامل: تستأنف الوظيفة مع آخر جزء غير مؤكد.
KMS غير متوفر: تدهور آمن (توقف جيل مؤقت، لا تطلق غير مشفر).
نمو البيانات × 2: التحقق من وقت التوليد، وإعادة توزيع التوازي، لا تقتل قاعدة البيانات.

18) المجاميع

التفريغ الكبير الموثوق به هو بنية غير متزامنة + تقسيم + تجديد + سلامة يمكن التحقق منها. خذ لقطة، واكتب الأجزاء بالتوازي، وانشر بيانًا مع الشيكات، ودعم HTTP Range والروابط قصيرة العمر. فكر في الأمن والحدود وقابلية الملاحظة - وستتوقف صادرات الجيجابايت عن كونها كابوسًا للفرق والمستخدمين.

Contact

اتصل بنا

تواصل معنا لأي أسئلة أو دعم.نحن دائمًا جاهزون لمساعدتكم!

Telegram
@Gamble_GC
بدء التكامل

البريد الإلكتروني — إلزامي. تيليغرام أو واتساب — اختياري.

اسمك اختياري
البريد الإلكتروني اختياري
الموضوع اختياري
الرسالة اختياري
Telegram اختياري
@
إذا ذكرت تيليغرام — سنرد عليك هناك أيضًا بالإضافة إلى البريد الإلكتروني.
WhatsApp اختياري
الصيغة: رمز الدولة + الرقم (مثال: +971XXXXXXXXX).

بالنقر على الزر، فإنك توافق على معالجة بياناتك.