Ç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'
- Dışa aktarma, filtreler, filigran, indirme listesini kim oluşturdu (IP/UA/saat).
- Parça karmaları ve müşteri tarafı mutabakatı (onaylar).
- 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.