GH GambleHub

Multipart-eksportlar va katta yuklar

1) «Katta» eksportga ehtiyoj bo’lganda va nima muhim

Ssenariylar: moliyaviy hisobotlar, foydalanuvchilarning faolligini tushirish, audit/regulyatorlar, BI-tushirishlar, sheriklik kataloglari, zaxira nusxalari. Asosiy talablar:
  • Maʼlumotlarning muvofiqligi (snapshot/vaqt nuqtasi).
  • Hajm bo’yicha o’tish qobiliyati (parallel yozuv/o’qish, oqimli serializatsiya).
  • Qayta tiklanish (resumable) va qisman yetkazib berish.
  • Yaxlitlik (checksum) va ishonchlilik (manifest).
  • Xavfsizlik/PII (niqoblash, shifrlash, kirishni nazorat qilish).
  • Qiymatni boshqarish (siqish, taym-autlar, CDN, TTL).

2) Ma’lumotlar formatlari: ijobiy/salbiy tomonlari

CSV - ixcham, tez yozish/o’qish; kamchiliklar: ekranlash, turlari yo’qoladi. Jadval hisobotlari uchun yaxshi.
JSON Lines (JSONL) - har bir obyekt satri bo’yicha, oqim va qisman tanlash uchun qulay; kamchiliklar: hajm.
Parquet/Euro - ustunli/sxemali formatlar, siqish va predicate pushdown; tahlillar va katta ma’lumotlar uchun idealdir.
Mixed: API yuklash uchun JSONL → Parquetga oflayn konvertatsiya.

Kompresssiya:’gzip ’/’ zstd’(yaxshiroq). Juda katta hajmlar uchun - split-arxivlar (bir qismga 128-512 MB ~).

3) Muvofiqlik: «rasm» ni qanday olish kerak

DB: REPEATABLE READ/SNAPSHOT tranzaksion izolyatsiyasi; oqimlar uchun - mantiqiy replikatsiya slotlari yoki’watermark’belgisi (maksimal’updated _ at ’/versiya).
Event sourcing: jurnal offset boʻyicha eksport qilish.
Kesmalar: «to’liq» eksport + «delta» (’watermark’dan keyingi o’zgarishlarni tushirish).

4) Bo’laklarga bo’lish (multipart/chunking)

4. 1 «Multipart» turlari

Upload (bizga): multipart/form-data (kichik fayllar), S3 Multipart Upload (MPU )/GCS Resumable (katta fayllar).
Download (bizdan): HTTP Range (’bytes = start-end’),’multipart/byteranges’(bitta javobda bir nechta diapazon), «zip of parts», obʼekt storidagi kataloglar.

4. 2 Bo’lish strategiyalari

Hajmi bo’yicha (masalan, bir qismga 256 MB).
Kalit/sana bo’yicha (’tenant _ id’,’YYYY/MM/DD’bo’yicha shardalash).
Jadval/mohiyat boʻyicha (turlarga alohida fayllar).

Balans: 64-512 MB qismlari parallel ravishda yaxshi yuklab olinadi va xotirani haddan tashqari qizdirmaydi.

5) eksportning API arxitekturasi (asinxron model)

Qadamlar:

1.’POST/exports’→ navbatdagi vazifa (meta ma’lumotlar: format, filtrlar, shifrlash, umr ko’rish muddati).

2. Vorkerlar snapshot quradilar, ma’lumotlarni oqib chiqaradilar va ob’ekt omboriga qismlar yozadilar.

3. Qismlar ro’yxati, o’lchamlari, checksum, sxema versiyasi bilan manifest (JSON) yaratiladi.

4.’GET/exports/{ id}’status va havolani/pre-signed URL qismlariga qaytaradi.

5. `GET /exports/{id}/manifest. json’- haqiqat mashinasi.

Manifest misoli:
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) Qayta tiklanadigan yuklamalar (resumable)

HTTP Range: Mijoz’Range: bytes = 241172480-’faylini toʻldiradi.
Bir nechta bandlar:’Range: bytes = 0-999,2000-2999’→ javob’Content-Type: multipart/byteranges’.
Mijoz strategiyasi: qismlarga parallel «vorkerlar», har birining verifikatsiyasi’sha256’, eksponensial backoff bilan retralar.
CDN: Range’ni qoʻllab-quvvatlash, katta javoblarni oʻchirish.

7) Bizga katta yuklar (resumable upload)

S3 Multipart Upload: mijozlar qismlarni yuklaydi (5-5000), server’CompleteMultipartUpload’ni yigʻadi.
GCS Resumable: bitta seans, siljishlar - mijoz’Content-Range’bilan davom etishi mumkin.
TUS (protokol) - HTTP ustidagi mustaqil qayta tiklanadigan appload.

B2B patterni: qismlar uchun pre-signed URLni to’g’ridan-to’g’ri storga, meta-ma’lumotlarni esa bizning APIga beramiz.

8) Siqish, shifrlash, yaxlitlik

Kompresssiya:’zstd’afzal (yaxshiroq ratio/tezlik). Har bir qismni alohida siqib chiqaring (yangilash/kesh qilish qulayroq).

Shifrlash:
  • Simda: TLS 1. 2+.
  • Tinch holatda: server-side KMS (SSE-KMS) yoki client-side (AES-256-GCM) kalit o’ralgan (key wrapping).
  • Hech qachon «xom» kalitni manifestga qo’ymang.
  • Checksum: minimal SHA-256 bir qismga + butun toʻplam uchun umumiy. ack oldidan mijozni tekshiring.

9) Perimetr bilan integratsiya: NGINX/CDN

NGINX (Range + katta taymautlar + buferlashni oʻchirish):
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;
}
}
Javob sarlavhalari:
  • `Content-Disposition: attachment; filename="export_2025-10-31_part-00000. parquet. zst"`
  • To’g "ri yuklash uchun’ETag ’/’ If-Range’.
  • ’Cache-Control’ (masalan,’private, max-age = 3600’) shaxsiy yuklamalar uchun.

10) Xavfsizlik va komplayens

Autentifikatsiya/avtorizatsiya: eksportni faqat egasiga/rollarga berish; qisqa TTL bilan vaqtinchalik havolalar (pre-signed).
PII: niqoblash/taxalluslashtirish; manifestda - faqat texnik maydonlar.
GDPR/lokal regulyatorlar: TTL bo’yicha eksportni olib tashlash, yuklab olish auditi, asossiz kross-mintaqaviy berishni taqiqlash.
Rate limiting & quotas: bir vaqtning o’zida eksportlar sonini va kuniga/oyga umumiy hajmini cheklash (per-tenant).
Anti-skraping: havolalar berish uchun SAR/bot-filtrlar, diapazonlarni cheklash (maksimal parallel qismlar).

11) Kuzatish va foydalanish

Metriklar:
  • `export_jobs_total{status}` (queued/running/succeeded/failed/expired)
  • `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`
Logi/audit:
  • Eksport, filtrlar, watermark, yuklab olish roʻyxatini kim yaratdi (IP/UA/vaqt).
  • Qismlarning xeshalari va mijoz tomonidan solishtirish (tasdiqlash).
Treysing:
  • Snapshot → serialize → upload part → finalize.

12) Unumdorlik va qiymat

Parallellik: bir vaqtning o’zida bir nechta qismlarni (N vorker) yarating, lekin I/O.ni cheklang.
Xotira: oqimli serializatsiya (iteratorlar, DB kursorlari, 4-16 MB changlar).
Dedup: tez-tez takrorlanadigan eksport uchun aqlli cache of parts filter/xesh.
CDN: «umumiy» ommaviy toʻplamlar uchun foydalidir; shaxsiy - ehtiyotkorlik bilan (xavfsizlik/PII).

13) Interfeys namunalari

13. 1 Eksport yaratish (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"}
}
Javob:
json
{
"id":"exp_2025_10_31_001",
"status":"queued",
"estimated_parts": 12,
"manifest_url": "/exports/exp_2025_10_31_001/manifest. json"
}

13. 2 Range bilan qism berish

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

13. 3 Vorkerning soxta hujjati

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) Delta-eksport patternlari

To’liq eksport bir marta N (kun/hafta) + delta har soatda’updated _ at> watermark’bo’yicha.
Iste’molchi tomonida: «version »/« seq» verifikatsiyasini qo’llash.
Oxirgi watermarkni isteʼmolchi va manifestda saqlang.

15) Anti-patternlar

So’rovda eksport yaratish (sinxron) - taymaut va OOM.
Boʻlmasdan bitta ulkan fayl - qaytadan/parallel yuklash mumkin emas.
Checksum va manifestning yo’qligi - yaxlitligini isbotlab bo’lmaydi.
Shaxsiy ma’lumotlarga doimiy ommaviy havolalar berish.
SSE/CDN buferlash yoki oʻchirilgan Range - «yuklash» ni buzadi.
Iflos maʼlumotlarni eksport qilish (snapshot/izolyatsiyasiz).

16) Joriy etish chek-varaqasi

  • Format va siqish: CSV/JSONL/Parquet +’zstd/gzip’.
  • Muvofiqlik: tranzaksion snapshot yoki watermark/offset.
  • Bo’linish: 64-512 MB qismlar, parallel ishlab chiqarish va yuklab olish.
  • Manifest: qismlar ro’yxati, o’lchamlari, SHA-256, sxema versiyasi, watermark.
  • Qayta tiklash: HTTP Range, qoʻllab-quvvatlash’multipart/byteranges’, mijozlar retraalari.
  • Xavfsizlik: pre-signed URLs, TTL, shifrlash (KMS/AEAD), PII niqoblash.
  • Limitlar/kvotalar: per-tenant, sutkalik hajmlar, faol joblar soni.
  • Kuzatish darajasi: job/qismlar metrikasi, yuklab olish auditi, checksum-fail alertlari.
  • Narxi: ommaviy to’plamlar uchun CDN, TTL va avto-tozalash.
  • Runbooks/Game Days: tarmoqning uzilishi, oyna yetarli emas, MA haddan tashqari qizib ketgan, KMS nosozligi.

17) Game Days (pleybuklar)

Yozib olish paytida tarmoq uzilib qoldi: mijoz’Range’bilan davom etishi kerak.
Bitta qismni yuklash muvaffaqiyatsiz tugadi: butun eksportni qayta yaratmasdan retray qismi.
Vorkerning yiqilishi: job oxirgi tasdiqlanmagan changdan tiklanadi.
KMS mavjud emas: xavfsiz tanazzul (ishlab chiqarish pauzasi, shifrlanmagan holda chiqarilmasin).
Ma’lumotlarning o’sishi × 2: ishlab chiqarish vaqtini tekshirish, parallellikni qayta taqsimlash, DBni o’ldirmaslik.

18) Yakunlar

Ishonchli katta yuklar - bu asinxron arxitektura + bo’linish + qayta tiklanish + tekshiriladigan yaxlitlik. Snapshot qiling, parallel qismlarni yozing, checksum manifestini nashr qiling, HTTP Range va qisqa havolalarni qoʻllab-quvvatlang. Xavfsizlik, limitlar va kuzatuv darajasini o’ylab ko’ring - gigabayt eksportlar jamoalar va foydalanuvchilar uchun dahshatli dahshat bo’lmaydi.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Telegram
@Gamble_GC
Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.