GH GambleHub

Çok parçalı ihracat ve büyük yüklemeler

1) "Büyük" ihracata ne zaman ihtiyaç duyulduğu ve neyin önemli olduğu

Senaryolar: finansal raporlar, kullanıcı etkinliği yüklemeleri, denetimler/düzenleyiciler, BI yüklemeleri, ortak dizinler, yedeklemeler. Temel gereksinimler:
  • Veri tutarlılığı (anlık görüntü/zaman noktası).
  • Hacimde geçilebilirlik (paralel yazma/okuma, akış serileştirme).
  • Yenilenebilir ve kısmi teslimat.
  • Bütünlük (sağlama toplamı) ve doğrulanabilirlik (tezahür).
  • Güvenlik/PII (maskeleme, şifreleme, erişim kontrolü).
  • Maliyet yönetimi (sıkıştırma, zaman aşımları, CDN, TTL).

2) Veri formatları: artıları/eksileri

CSV - kompakt, yazmak/okumak için hızlı; Eksileri: kalkan, kayıp türleri. Tablo raporları için iyi.
JSON Hatları (JSONL) - nesne başına satıra göre, akış ve kısmi örnekleme için uygun; eksiler: hacim.
Parke/Avro - sütun/devre formatları, sıkıştırma ve tahmin pushdown; Analitik ve büyük veriler için idealdir.
Karışık: API indirmek için JSONL - Parquet'e çevrimdışı dönüştürme.

Sıkıştırma: 'gzip'/' zstd' (daha iyi). Çok büyük hacimler için - bölünmüş arşivler (parça başına ~ 128-512 MB).

3) Tutarlılık: "Anlık görüntü" nasıl elde edilir

DB: TEKRARLANABILIR OKUMA/SNAPSHOT işlem izolasyonu; İş parçacıkları, mantıksal çoğaltma yuvaları veya filigran için (maks. 'updated _ at'/version).
Olay kaynağı: ofset log ile dışa aktarma.
Dilimler: "tam" dışa aktarma + "deltalar" ("filigrandan" sonraki değişikliklerin sonraki yüklemeleri).

4) Çok parçalı/gruplama

4. 1 "Çok parçalı" türleri

Upload (bize): multipart/form-data (küçük dosyalar), S3 Multipart Upload (MPU )/GCS Resumable (büyük).
İndirme (bizden): HTTP Aralığı ('bytes = start-end'), 'multipart/byteranges' (bir yanıtta birkaç aralık), "zip of parts", nesne yığınındaki dizinler.

4. 2 Bölme stratejileri

Boyuta göre (örneğin, parça başına 256 MB).
Anahtar/tarih ile ('tenant _ id', 'YYYY/MM/DD').
Tablo/varlığa göre (tür başına ayrı ayrı dosyalar).

Denge: 64-512 MB'lık parçalar paralel olarak iyi indirilir ve belleği aşırı ısıtmaz.

5) API mimarisini dışa aktarma (asenkron model)

Adımlar:

1. 'POST/export' - kuyruktaki iş (meta veriler: format, filtreler, şifreleme, ömür boyu).

2. Çalışanlar anlık görüntüler oluşturur, veri akışı sağlar ve nesne depolamasına parçalar yazar.

3. Parçaların, boyutların, sağlama toplamının, şema sürümünün bir listesini içeren bir manifesto (JSON) oluşturun.

4. 'GET/exports/{ id}' durumu döndürür ve önceden imzalanmış URL'nin bölümlerine bağlar.

5. 'GET/exports/{ id }/manifest. json '- doğrulama/yeniden yükleme için doğruluk makinesi.

Örnek manifesto:
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) Devam ettirilebilir

HTTP Aralığı: istemci dosyanın "kuyruğunu" yükler: 'Aralık: bayt = 241172480-'.
Çoklu aralıklar: 'Aralık: Bayt = 0-999,2000-2999' - 'İçerik Türü: çok parçalı/byteranges' yanıtı.
Müşteri stratejisi: parçalar halinde paralel "işçiler", her birinin 'sha256' doğrulanması, üstel geri tepme ile retrai.
CDN: Aralık desteği, büyük yanıt arabelleği devre dışı.

7) Bize büyük indirmeler (devam ettirilebilir yükleme)

S3 Multipart Upload: istemciler parçaları indirir (5-5000), sunucu 'CompleteMultipartUpload' toplar.
GCS Resumable - bir oturum, ofsetler - istemci 'Content-Range'ile devam edebilir.
TUS (protokol), HTTP'nin üstünde bağımsız bir yenilenebilir uygulamadır.

Desen B2B: Parçaların yüklenmesi için önceden imzalanmış URL'yi doğrudan mağazaya ve meta verileri API'mize göndeririz.

8) Sıkıştırma, şifreleme, bütünlük

Sıkıştırma: Tercih edilen 'zstd' (daha iyi oran/hız). Her parçayı ayrı ayrı sıkıştırın (yenilemek/önbelleğe almak daha uygundur).

Şifreleme:
  • Tel üzerinde: TLS 1. 2+.
  • Dinlenme: sunucu tarafı KMS (SSE-KMS) veya anahtar sarma ile istemci tarafı (AES-256-GCM).
  • Bir manifestoya asla "ham'bir anahtar koymayın.
  • Sağlama toplamı: parça başına minimum SHA-256 + tüm set için ortak. Ack'ten önce müşteriyi kontrol edin.

9) Çevre Entegrasyonu: NGINX/CDN

NGINX (Aralık + uzun zaman aşımları + arabelleklemeyi devre dışı bırak):
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;
}
}
Yanıt başlıkları:
  • 'Content-Disposition: attachment; dosya adı = "export _ 2025-10-31 _ part-00000. parke. zst"'
  • Doğru yükleme için 'ETag'/' If-Range'.
  • Kişisel yüklemeler için 'Cache-Control' (örneğin, 'private, max-age = 3600').

10) Güvenlik ve uyumluluk

Kimlik doğrulama/yetkilendirme: Yalnızca sahibe/rollere dışa aktarma yapılması; Kısa TTL ile önceden imzalanmış.
PII: maskeleme/aliasing; Manifestoda - sadece teknik alanlar.
GDPR/yerel düzenleyiciler: TTL tarafından ihracatın silinmesi, indirmelerin denetlenmesi, bölgeler arası ihracın sebepsiz yere yasaklanması.
Hız sınırlaması ve kotalar: Eşzamanlı ihracat sayısını ve günlük/aylık toplam hacmi (kiracı başına) sınırlayın.
Kazıma önleyici: Bağlantılar vermek, aralıkları sınırlamak için CAP/bot filtreleri (maksimum paralel parçalar).

11) Gözlemlenebilirlik ve çalışma

Metrikler:
  • 'export _ jobs _ total {status}' (sıralı/çalışan/başarılı/başarısız/süresi dolmuş)
  • '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'
Günlükler/Denetimler:
  • Dışa aktarma, filtreler, filigran, indirme listesini kim oluşturdu (IP/UA/saat).
  • Parça karmaları ve müşteri tarafı mutabakatı (onaylar).
İzleme:
  • Spans: snapshot - serileştirin - yükleme kısmı - sonuçlandırın.

12) Performans ve maliyet

Paralellik: Aynı anda birden fazla parça üretin (N işçi), ancak I/O'yu sınırlayın.
Bellek: akış serileştirme (yineleyiciler, veritabanı imleçleri, 4-16 MB'lık parçalar).
Dedup: sık tekrarlanan dışa aktarımlar için, filtreler/hash ile parçaların akıllı önbelleği.
CDN:'genel "kamu setleri için faydalıdır; Kişisel - dikkat için (güvenlik/PII).

13) Arayüzlere örnekler

13. 1 İhracat Oluştur (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"}
}
Cevap:
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 ile parça verilmesi

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

13. 3 Vorker pseudocode

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 ihracat kalıpları

N'de bir kez tam dışa aktarma (gün/hafta) + 'updated _ at> watermark'tarafından her saat başı deltalar.
Tüketici tarafında, deltaları 'doğrulama'/' seq' doğrulayarak sırayla uygulayın.
Son filigranı tüketicide ve manifestoda tutun.

15) Anti-desenler

İstek halinde dışa aktarma üretimi (senkron) - zaman aşımları ve OOM.
Bölünmeden bir dev dosya, devam ettirme/paralel indirme yetersizliğidir.
Sağlama toplamı ve tezahür eksikliği - bütünlüğü kanıtlayamazsınız.
Kişisel verilere kalıcı halka açık bağlantıların verilmesi.
Arabelleğe alma SSE/CDN veya devre dışı Aralık - "yeniden yükleme'yi keser.
Kirli verileri dışa aktarın (anlık görüntü/izolasyon olmadan).

16) Uygulama kontrol listesi

  • Biçim ve sıkıştırma: CSV/JSONL/Parquet + 'zstd/gzip'.
  • Tutarlılık: işlemsel anlık görüntü veya filigran/ofset.
  • Bölümleme: 64-512 MB parçalar, paralel üretim ve indirme.
  • Manifest: parça listesi, boyutlar, SHA-256, şema sürümü, filigran.
  • Yenileme: HTTP Aralığı, 'multipart/byteranges' desteği, istemci retrays.
  • Güvenlik: Önceden imzalanmış URL'ler, TTL, şifreleme (KMS/AEAD), PII maskeleme.
  • Sınırlar/kotalar: kiracı başına, günlük hacimler, aktif iş sayısı.
  • Gözlemlenebilirlik: iş/parça metrikleri, indirme denetimleri, sağlama toplamı başarısız uyarıları.
  • Maliyet: Halka açık setler için CDN, TTL ve mağazada otomatik temizleme.
  • Runbooks/Oyun Günleri: ağ sonları, mağaza kullanılamaması, veritabanı aşırı ısınması, KMS arızası.

17) Oyun Günleri (oyun kitapları)

İndirme sırasında ağ düşüşü: İstemci 'Range'ile devam etmelidir.
Bir parça yüklenemedi: tüm dışa aktarmayı yeniden oluşturmadan parçanın yeniden yüklenmesi.
İşçinin düşüşü: İş, doğrulanmamış son yığın ile devam eder.
KMS kullanılamaz: güvenli bozulma (nesil duraklatma, şifrelenmemiş serbest bırakma).
Veri büyümesi × 2: üretim zamanını kontrol edin, paralelliği yeniden dağıtın, veritabanını öldürmeyin.

18) Toplam

Güvenilir büyük yük aktarımları asenkron mimari + bölümleme + yenileme + doğrulanabilir bütünlüktür. Bir anlık görüntü alın, paralel olarak parçalar yazın, sağlama toplamı ile bir manifesto yayınlayın, HTTP Aralığını ve kısa ömürlü bağlantıları destekleyin. Güvenlik, sınırlar ve gözlemlenebilirlik hakkında düşünün - ve gigabayt ihracatı ekipler ve kullanıcılar için bir kabus olmaktan çıkacak.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Telegram
@Gamble_GC
Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.