GH GambleHub

Multipart-ixrac və böyük yükləmə

1) «böyük» ixrac lazım olduqda və nə vacibdir

Ssenarilər: maliyyə hesabatları, istifadəçi fəaliyyətinin boşaldılması, audit/tənzimləyicilər, BI-boşaltmalar, tərəfdaşlıq kataloqları, ehtiyat nüsxələr. Əsas tələblər:
  • Məlumatların uyğunluğu (snapshot/vaxt nöqtəsi).
  • Həcminə görə keçid (paralel yazma/oxu, axın serializasiyası).
  • Bərpa (resumable) və qismən çatdırılma.
  • Bütövlük (checksum) və yoxlanılabilirlik (manifest).
  • Təhlükəsizlik/PII (maskalama, şifrələmə, giriş nəzarəti).
  • Dəyər idarəetməsi (kompressiya, zaman-aut, CDN, TTL).

2) Məlumat formatları: müsbət/mənfi

CSV - kompakt, tez yazmaq/oxumaq; mənfi cəhətləri: ekran, növləri itirilir. Tablo hesabatları üçün yaxşıdır.
JSON Lines (JSONL) - obyektin hər sətri üzrə, axın və qismən nümunə üçün əlverişlidir; mənfi cəhətləri: həcm.
Parquet/Avro - sütun/sxem formatları, sıxılma və predicate pushdown; analitika və böyük məlumatlar üçün idealdır.
Mixed: API download üçün JSONL → Parquet üçün offline dönüşüm.

Kompressiya: 'gzip '/' zstd' (daha yaxşı). Çox böyük həcmlər üçün - split arxivlər (hər hissəyə 128-512 MB ~).

3) Uyğunluq: «şəkil» almaq üçün necə

BD: REPEATABLE READ/SNAPSHOT əməliyyat izolyasiyası; axınlar üçün - məntiqi replikasiya yuvaları və ya 'watermark' işarəsi (max. 'updated _ at '/versiyası).
Event sourcing: offset jurnal ixrac.
Kəsiklər: «tam» ixrac + «delta» («watermark» anından sonrakı dəyişikliklər).

4) Parçalanma (multipart/chunking)

4. 1 «multipart» növləri

Upload (bizə): multipart/form-data (kiçik fayllar), S3 Multipart Upload (MPU )/GCS Resumable (böyük).
Download (bizdən): HTTP Range ('bytes = start-end'), 'multipart/byteranges' (bir cavabda bir neçə diapazon), «zip of parts», obyekt anbarında kataloqlar.

4. 2 Bölünmə strategiyaları

Ölçüsünə görə (məsələn, hər hissəyə 256 MB).
Açar/tarixə görə ('tenant _ id', 'YYYY/MM/DD').
Cədvəl/mahiyyətə görə (növlərə görə ayrı-ayrı fayllar).

Balans: 64-512 MB hissələri paralel olaraq yaxşı yüklənir və yaddaşı həddindən artıq qızdırmır.

5) API-ixrac arxitekturası (asenxron model)

Addımlar:

1. 'POST/exports' → növbədəki tapşırıq (metadata: format, filtrlər, şifrələmə, ömür).

2. Vorkers snapshot qurmaq, məlumat axını və obyekt saxlama hissələri yazmaq.

3. Hissələrin siyahısı, ölçüləri, checksum, sxem versiyası ilə manifest (JSON) yaradır.

4. 'GET/exports/{ id}' status və linki/pre-signed URL hissələrinə qaytarır.

5. `GET /exports/{id}/manifest. json '- doğrulama/yükləmə üçün həqiqət maşını.

Manifest nümunəsi:
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) Bərpa olunan boşaltma (resumable)

HTTP Range: Müştəri faylın «quyruğunu» yükləyir: 'Range: bytes = 241172480-'.
Bir neçə diapazon: 'Range: bytes = 0-999,2000-2999' → cavab 'Content-Type: multipart/byteranges'.
Müştəri strategiyası: parça-parça paralel «işçilər», hər biri doğrulama 'sha256', eksponent backoff ilə retrai.
CDN: Range dəstəyi, böyük cavabların buferləşdirilməsi.

7) Bizə böyük yükləmələr (resumable upload)

S3 Multipart Upload: müştərilər hissələri yükləyir (5-5000), server 'CompleteMultipartUpload' toplayır.
GCS Resumable: bir seans, yerdəyişmə - müştəri 'Content-Range' ilə davam edə bilər.
TUS (protokol) - HTTP üzərindən müstəqil bərpa olunan appload.

B2B patterni: Parçalar üçün əvvəlcədən işarələnmiş URL-ləri birbaşa qapıya, metadata isə API-yə veririk.

8) Sıxılma, şifrələmə, bütövlük

Sıxılma: 'zstd' üstünlük (daha yaxşı ratio/sürət). Hər hissəni ayrı-ayrılıqda sıxın (yeniləmək/cache etmək daha rahatdır).

Şifrələmə:
  • Teldə: TLS 1. 2+.
  • Dinc: server-side KMS (SSE-KMS) və ya client-side (AES-256-GCM) açar sarğısı ilə (key wrapping).
  • Heç vaxt «xam» açarı manifestə qoymayın.
  • Checksum: hissə başına minimum SHA-256 + bütün dəst üçün ümumi. ack əvvəl müştəri yoxlayın.

9) Perimetrlə inteqrasiya: NGINX/CDN

NGINX (Range + Böyük Taymaut + Buferləşdirmə Devre):
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;
}
}
Cavab başlıqları:
  • `Content-Disposition: attachment; filename="export_2025-10-31_part-00000. parquet. zst"`
  • 'ETag '/' If-Range' düzgün yükləmə üçün.
  • Şəxsi boşaltmalar üçün 'Cache-Control' (məsələn, 'private, max-age = 3600').

10) Təhlükəsizlik və uyğunluq

Autentifikasiya/avtorizasiya: yalnız sahibinə/rollara ixrac verilməsi; qısa TTL ilə müvəqqəti linklər (pre-signed).
PII: maskalanma/təxəllüs; manifestdə - yalnız texniki sahələr.
GDPR/lokal tənzimləyicilər: TTL ixracının silinməsi, download auditi, heç bir səbəb olmadan xaç-regional emissiyanın qadağan edilməsi.
Rate limiting & quotas: Eyni zamanda ixracların sayını və gündə/ayda ümumi həcmini (per-tenant) məhdudlaşdırın.
Anti-scraping: SAR/bot filtrləri linklərin verilməsi, diapazonların məhdudlaşdırılması (maksimum paralel hissələr).

11) Müşahidə və istismar

Metriklər:
  • `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`
Log/audit:
  • Kim ixrac, filtrələr, watermark, download siyahısı (IP/UA/vaxt) yaratdı.
  • Hash hissələri və müştəri tərəfində yoxlama (təsdiq).
Treysinq:
  • snapshot → serialize → upload part → finalize.

12) Performans və dəyəri

Paralellik: eyni anda bir neçə parça (N worker) yaradın, lakin I/O-nu məhdudlaşdırın.
Yaddaş: axın serializasiyası (iteratorlar, BD kursorları, 4-16 MB çantalar).
Dedup: tez-tez təkrar ixrac üçün ağıllı cache of parts filter/hash.
CDN: «ümumi» ictimai dəstlər üçün faydalıdır; şəxsi - ehtiyatlı (təhlükəsizlik/PII).

13) Interfeys nümunələri

13. 1 İxracın yaradılması (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"}
}
Cavab:
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 ilə hissə verilməsi

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

13. 3 Worker psevdokodu

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 ixrac nümunələri

Tam ixrac N dəfə (gün/həftə) + delta hər saat 'updated _ at> watermark'.
İstehlakçı tərəfində: deltaları ardıcıl olaraq 'version '/' seq' təsdiqləyərək tətbiq edin.
Son watermark-ı istehlakçı və manifestdə saxlayın.

15) Anti-nümunələr

Sorğuda ixracın generasiyası (sinxron) - taymaut və OOM.
Parçalanmadan bir nəhəng fayl - bərpa/paralel yükləmənin mümkünsüzlüyü.
Yoxlama və manifestin olmaması - bütövlüyü sübut edə bilməzsiniz.
Şəxsi məlumatlara daimi ictimai linklərin verilməsi.
Tamponlama SSE/CDN və ya off Range - «yükləmə» pozur.
«Çirkli» məlumatların ixracı (snapshot/izolyasiya olmadan).

16) Giriş çek siyahısı

  • Format və sıxılma: CSV/JSONL/Parquet + 'zstd/gzip'.
  • Uyğunluq: əməliyyat snapshot və ya watermark/offset.
  • Bölünmə: 64-512 MB hissələri, paralel nəsil və yükləmə.
  • Manifest: hissələri siyahısı, ölçüləri, SHA-256, sxem versiyası, watermark.
  • Yeniləmə: HTTP Range, dəstək 'multipart/byteranges', müştəri retrası.
  • Təhlükəsizlik: pre-signed URLs, TTL, şifrələmə (KMS/AEAD), PII maskalama.
  • Limitlər/kvotalar: per-tenant, gündəlik həcmlər, aktiv cob sayı.
  • Müşahidə: gob/hissələrin metrikası, download auditi, checksum-fail-də alertlər.
  • Qiymət: ictimai dəsti, TTL və auto-cleanup üçün CDN.
  • Runbooks/Game Days: şəbəkə qırılmaları, sızma, həddindən artıq isti, KMS uğursuzluğu.

17) Game Days (playbook)

Yükləmə zamanı şəbəkənin kəsilməsi: müştəri 'Range' ilə davam etməlidir.
Bir hissənin yüklənməsinin uğursuzluğu: bütün ixracın yenidən qurulması olmadan retraj hissələri.
Worker düşməsi: Job son təsdiqlənməmiş çantadan bərpa olunur.
KMS mövcud deyil: təhlükəsiz deqradasiya (nəsil fasiləsi, şifrəsiz buraxmayın).
Data artımı × 2: nəsil vaxtını yoxlayın, paralelliyi yenidən bölüşdürün, DB öldürməyin.

18) Nəticələr

Etibarlı böyük boşaltmalar asenxron arxitektura + parçalanma + bərpa + yoxlanıla bilən bütövlüydür. Snapshot edin, parçaları paralel yazın, checksum manifestini dərc edin, HTTP Range və qısamüddətli linkləri dəstəkləyin. Təhlükəsizlik, limitlər və müşahidə qabiliyyətini düşünün - və gigabayt ixrac komandalar və istifadəçilər üçün kabus olmayacaq.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

Telegram
@Gamble_GC
İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.