GH GambleHub

Multipart-экспорт жана чоң жүктөр

1) "чоң" экспорт керек болгондо жана маанилүү

Сценарийлер: финансылык отчеттор, колдонуучулардын активдүүлүгүн жүктөө, аудит/жөнгө салуучулар, BI-жүктөөлөр, өнөктөштүк каталогдору, резервдик көчүрмөлөр. Негизги талаптар:
  • Берилиштердин ырааттуулугу (snapshot/убакыт чекити).
  • Көлөмү боюнча өтүмдүүлүк (параллелдүү жазуу/окуу, агымдык сериалдаштыруу).
  • Кайра жаралуучулук (resumable) жана жарым-жартылай жеткирүү.
  • бүтүндүгү (checksum) жана текшерүү (манифест).
  • Коопсуздук/PII (жашыруу, шифрлөө, кирүү көзөмөлү).
  • Чыгымдарды башкаруу (компрессия, убакыт, CDN, TTL).

2) Маалымат форматтары: оң/терс жактары

CSV - компакт, тез жазуу/окуу; кемчиликтери: экран, түрлөрү жоголуп жатат. таблица отчеттор үчүн жакшы.
JSON Lines (JSONL) - объект боюнча сапта, агымы жана жарым-жартылай үлгү үчүн ыңгайлуу; кемчиликтери: көлөмү.
Parquet/Euro - колонка/схема форматтары, кысуу жана predicate pushdown; аналитика жана чоң маалыматтар үчүн идеалдуу.
Mixed: JSONL үчүн API жүктөмөлөр → Паркетке оффлайн конверсия.

кысуу: 'gzip '/' zstd' (жакшы). Абдан чоң көлөмдөр үчүн - сплит-архивдер (бир бөлүккө 128-512 МБ ~).

3) ырааттуулук: кантип алуу үчүн "сүрөт"

DD: транзакциялык изоляция REPEATABLE READ/SNAPSHOT; агымдар үчүн - логикалык репликация уячалары же 'watermark' белгиси (макс. 'updated _ at '/версия).
Event sourcing: offset журнал экспорттоо.
Тилкелер: "толук" экспорт + "дельта" ("watermark" учурунан кийинки өзгөрүүлөрдү жүктөө).

4) бөлүктөргө бөлүү (multipart/chunking)

4. 1 "multipart" түрлөрү

Upload (бизге): multipart/form-data (майда файлдар), S3 Multipart Upload (MPU )/GCS Resumable (ири).
Download (бизден): HTTP Range ('bytes = start-end'), 'multipart/byteranges' (бир жооптогу бир нече диапазондор), "zip of parts", объекттин капталындагы каталогдор.

4. 2 бөлүү стратегиялары

Өлчөмү боюнча (мисалы, бир бөлүгүнө 256 МБ).
Ачкыч/дата боюнча ('tenant _ id', 'YYYY/MM/DD').
Таблица/маңыз боюнча (түрлөрү боюнча өзүнчө файлдар).

Баланс: 64-512 MB бөлүктөрү параллелдүү жүктөлөт жана эстутумду ысытпайт.

5) API-экспорттук архитектура (асинхрондук модели)

Кадамдар:

1. 'POST/exports' → кезектеги тапшырма (метадеректер: формат, чыпкалар, шифрлөө, жашоо мөөнөтү).

2. Воркерлер snapshot куруп, маалыматтарды агып, объектинин сактагычына бөлүктөрдү жазышат.

3. Манифест (JSON) бөлүктөрүнүн тизмеси, өлчөмдөрү, checksum, схеманын версиясы менен түзүлөт.

4. 'GET/exports/{ id}' статусун жана шилтемени/pre-signed URL бөлүктөрүнө кайтарат.

5. `GET /exports/{id}/manifest. json '- текшерүү/жүктөө үчүн чындык машина.

Манифесттин мисалы:
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) Кайра жаралуучу жүктөр (resumable)

HTTP Range: кардар файлдын "куйругун" жүктөйт: 'Range: bytes = 241172480-'.
Бир нече диапазондор: 'Range: bytes = 0-999,2000-2999' → жооп 'Content-Type: multipart/byteranges'.
Кардар стратегиясы: бөлүкчөлөргө параллелдүү "воркерлер", ар бир 'sha256' текшерүү, экспоненциалдык backoff менен ретрайлер.
CDN: Range колдоо, чоң жоопторду өчүрүү.

7) Бизге чоң жүктөмөлөр (resumable upload)

S3 Multipart Upload: кардарлар бөлүктөрүн жүктөп (5-5000), Server чогултат 'CompleteMultipartUpload'.
GCS Resumable: бир сессия, жылыштар - кардар 'Content-Range' менен уланта алат.
TUS (протокол) - HTTP үстүнөн көз карандысыз кайра жаралуучу аплоад.

B2B үлгүсү: Биз түздөн-түз апплоад бөлүктөрү үчүн pre-signed URL берип, жана метадеректер - биздин API.

8) кысуу, шифрлөө, бүтүндүк

Компрессия: 'zstd' артыкчылык (жакшы ratio/ылдамдыгы). Ар бир бөлүгүн өзүнчө кысып (кайра/кэш үчүн ыңгайлуу).

Шифрлөө:
  • зымда: TLS 1. 2+.
  • Тынч: server-side KMS (SSE-KMS) же client-side (AES-256-GCM) ачкычты ороп (негизги wrapping).
  • Эч качан "чийки" ачкычты манифестке салбаңыз.
  • Checksum: бир бөлүккө минималдуу SHA-256 + бүт топтому үчүн жалпы. ack алдында кардар боюнча текшерүү.

9) периметри менен бириктирүү: NGINX/CDN

NGINX (Range + чоң убакыт + буферизацияны өчүрүү):
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;
}
}
Жооптордун аталыштары:
  • `Content-Disposition: attachment; filename="export_2025-10-31_part-00000. parquet. zst"`
  • 'ETag '/' If-Range' туура жүктөө үчүн.
  • Жеке жүктөөлөр үчүн 'Cache-Control' (мисалы, 'private, max-age = 3600').

10) Коопсуздук жана комплаенс

Аутентификация/авторизация: экспортту ээсине/ролдорго гана берүү; убактылуу шилтемелер (pre-белги) кыска TTL менен.
PII: маскировка/псевдоним; манифестте - техникалык талаалар гана.
GDPR/жергиликтүү жөнгө салуучу: TTL боюнча экспортту алып салуу, download аудит, негизсиз кросс-аймактык чыгарууну тыюу.
Rate limiting & quotas: бир эле учурда экспорттун санын жана күнүнө/айына жалпы көлөмүн чектөө (per-tenant).
Анти-скрапинг: SAR/бот чыпкалары шилтемелерди берүү, диапазондорду чектөө (максималдуу параллелдүү бөлүктөрү).

11) Байкоо жана пайдалануу

Метрикасы:
  • `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`
Логи/аудит:
  • Ким экспорт жараткан, чыпкалар, watermark, жүктөмөлөр тизмеси (IP/UA/убакыт).
  • Хеш бөлүктөрү жана кардар тарапта салыштыруу (тастыктоо).
Трейсинг:
  • этаптарында уктап: snapshot → serialize → upload part → finalize.

12) аткаруу жана наркы

Параллелдүүлүк: Бир эле учурда бир нече бөлүктөрдү түзүңүз (N workers), бирок I/O чектеңиз.
Эс: агымдык сериалдаштыруу (итераторлор, DD курсорлору, 4-16 МБ чанктар).
Дедуп: көп учурда кайталанган экспорттор үчүн акылдуу cache of parts боюнча чыпкалар/хеш.
CDN: "жалпы" коомдук топтомдор үчүн пайдалуу; жеке үчүн - этият (коопсуздук/PII).

13) Interface мисалдар

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 Range менен бөлүк берүү

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

13. 3 Worker Psevdocode

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 экспорттук үлгүлөрү

Толук экспорт N жолу (күн/жума) + delta ар бир саат 'updated _ at> watermark'.
Керектөөчү тарапта: дельталарды "version "/" seq" деп текшерүү менен колдонуу.
Акыркы суу маркасын керектөөчүдө жана манифестте сактаңыз.

15) Анти-үлгүлөрү

Суроо-талапта экспортту генерациялоо (синхрондуу) - таймауттар жана ООМ.
бөлүнбөстөн бир ири файл - жандандыруу/параллелдүү жүктөө мүмкүн эмес.
checksum жана манифесттин жоктугу - бүтүндүгүн далилдөө мүмкүн эмес.
Жеке маалыматтарга туруктуу коомдук шилтемелерди берүү.
Буферизация SSE/CDN же өчүрүлгөн Range - бузат "жүктөө".
"кир" маалыматтарды экспорттоо (snapshot/обочолонгон жок).

16) Киргизүү чек-тизмеси

  • Формат жана кысуу: CSV/JSONL/Parquet + 'zstd/gzip'.
  • ырааттуулук: бүтүм snapshot же watermark/offset.
  • Бөлүү: 64-512 MB бөлүктөрү, параллелдүү муун жана жүктөп алуу.
  • Манифест: бөлүктөрүнүн тизмеси, өлчөмдөрү, SHA-256, схема версиясы, watermark.
  • Улантуу: HTTP Range, колдоо 'multipart/byteranges', кардар retra.
  • Коопсуздук: pre-signed URLs, TTL, коддоо (KMS/AEAD), PII жашыруу.
  • Лимиттер/квоталар: per-tenant, күнүмдүк көлөмдөр, активдүү джоб саны.
  • Байкоо: Gob/бөлүктөрүнүн метрика, download аудит, checksum-fail боюнча алерт.
  • Наркы: коомдук топтомдор үчүн CDN, TTL жана auto-тазалоо.
  • Runbooks/Game Days: тармактын үзүлүшү, кол тийбестик, БДнын ысып кетиши, KMS мүчүлүштүктөрү.

17) Game Days (Playbook)

Жүктөөдө тармак үзүлүшү: кардар 'Range' менен уланышы керек.
Бир бөлүгүн жүктөө ийгиликсиз: бардык экспортту кайра түзбөстөн, тетиктер.
Worker жыгылышы: Джоба акыркы тастыкталбаган чандан кайра башталат.
KMS жеткиликсиз: коопсуз деградация (генерацияны токтотуу, шифрленбеген чыгарбоо).
Маалымат өсүшү × 2: жаралуу убактысын текшерүү, параллелизмди кайра бөлүштүрүү, DD өлтүрбөө.

18) натыйжалары

Ишенимдүү чоң жүктөр - бул асинхрондук архитектура + бөлүктөргө бөлүнүү + жаңылануу + текшерилүүчү бүтүндүк. snapshot, параллелдүү бөлүктөрүн жазуу, checksum менен манифест жарыялоо, HTTP Range жана кыска мөөнөттүү шилтемелерди колдоо. Коопсуздукту, чектөөлөрдү жана байкоону ойлонуп көрүңүз - жана гигабайт экспорттор командалар жана колдонуучулар үчүн коркунучтуу түш болбой калат.

Contact

Биз менен байланышыңыз

Кандай гана суроо же колдоо керек болбосун — бизге кайрылыңыз.Биз дайым жардам берүүгө даярбыз!

Telegram
@Gamble_GC
Интеграцияны баштоо

Email — милдеттүү. Telegram же WhatsApp — каалооңузга жараша.

Атыңыз милдеттүү эмес
Email милдеттүү эмес
Тема милдеттүү эмес
Билдирүү милдеттүү эмес
Telegram милдеттүү эмес
@
Эгер Telegram көрсөтсөңүз — Emailден тышкары ошол жактан да жооп беребиз.
WhatsApp милдеттүү эмес
Формат: өлкөнүн коду жана номер (мисалы, +996XXXXXXXXX).

Түшүрүү баскычын басуу менен сиз маалыматтарыңыздын иштетилишине макул болосуз.