GH GambleHub

მრავალჯერადი ექსპორტი და დიდი გადმოტვირთვა

1) როდესაც საჭიროა „დიდი“ ექსპორტი და რა არის მნიშვნელოვანი

სკრიპტები: ფინანსური ანგარიშები, მომხმარებლის საქმიანობის გადმოტვირთვა, აუდიტი/რეგულატორები, BI გადმოტვირთვის, პარტნიორობის კატალოგები, სარეზერვო ასლები. ძირითადი მოთხოვნები:
  • მონაცემთა კოორდინაცია (დროულად snapshot/წერტილი).
  • ჯვარედინი მოცულობა (პარალელური ჩანაწერი/კითხვა, ნაკადის სერიალიზაცია).
  • განახლებადი და ნაწილობრივი მიწოდება.
  • მთლიანობა (checksum) და გადამოწმება (მანიფესტი).
  • უსაფრთხოება/PII (შენიღბვა, დაშიფვრა, წვდომის კონტროლი).
  • ღირებულების კონტროლი (კომპრესია, დრო, CDN, TTL).

2) მონაცემთა ფორმატები: დადებითი/დადებითი

CSV - კომპაქტურად, სწრაფად წერა/კითხვა; უარყოფითი: ადაპტაცია, ტიპები იკარგება. ეჲბპვ ჱა ეჲბპვ.
JSON ხაზები (JSONL) - ობიექტის ხაზის გასწვრივ, მოსახერხებელი ნაკადი და ნაწილობრივი ნიმუში; უარყოფითი: მოცულობა.
Parquet/Avro - სვეტების/სქემის ფორმატები, შეკუმშვა და predicate pushdown; იდეალურია ანალიტიკოსებისა და დიდი მონაცემებისთვის.
Mixed: JSONL API დატვირთვისთვის - ოფლაინ კონვერტაცია Parquet- ში.

კომპრესია: 'gzip '/' zstd' (უკეთესი). ძალიან დიდი მოცულობისთვის - დანაყოფების არქივები (ნაწილისთვის 128-512 MB).

3) თანხმობა: როგორ მივიღოთ „სურათი“

BD: REPEATABLE REABLE/SNAPSHOT გარიგების იზოლაცია; ნაკადებისთვის - რეპლიკაციის ლოგიკური სლოტები ან ნიშანი 'watermark' (მაქს 'განახლება _ at '/ვერსია).
ღონისძიების გაფართოება: ექსპორტი offset ჟურნალში.
ჭრილობები: „სრული“ ექსპორტი + „დელტა“ (ცვლილებების შემდგომი გადმოტვირთვის მომენტიდან 'watermark').

4) დაყოფა ნაწილებად

4. 1 ტიპები „მულტიპარტი“

Upload (ჩვენთვის): multipart/form data (მცირე ფაილები), S3 Multipart Upload (MPU )/GCS Resumable (დიდი).
Download (ჩვენგან): HTTP Range ('bytes = start-end'), 'multipart/byteranges' (რამდენიმე დიაპაზონი ერთ პასუხში), „zip of parts“, კატალოგები ობიექტის ნაკადში.

4. 2 დანაყოფის სტრატეგია

ზომით (მაგალითად, 256 MB თითო ნაწილზე).
გასაღები/თარიღი (შარდვა '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) განახლებადი გადმოტვირთვის (აღდგენა)

HTTP Range: კლიენტი ატვირთავს ფაილის „კუდს“: 'Range: bytes = 241172480-'.
რამდენიმე დიაპაზონი: 'Range: bytes = 0-99.2000-2999' - 'Content-Type' პასუხი: multipart/byteranges '.
კლიენტის სტრატეგია: პარალელური „ვორკერები“ დანაყოფებზე, თითოეული 'sha256' გადამოწმება, ექსპონენციალური backoff- ის რეპლიკაცია.
CDN: Range მხარდაჭერა, დიდი პასუხების გამორთული ბუფერიზაცია.

7) დიდი დატვირთვა ჩვენთვის

S3 Multipart Upload: მომხმარებლები ატვირთავენ ნაწილებს (5-5000), სერვერი აგროვებს 'CompleteMultipartUpload'.
GCS Resumable: ერთი სესია, გადაადგილება - კლიენტს შეუძლია გააგრძელოს „შინაარსი-რანგი“.
TUS (პროტოკოლი) დამოუკიდებელი განახლებადი აპლოდისმენტია HTTP თავზე.

პატრონი B2B: ჩვენ მივცეთ pre-signed URL ნაწილების პირდაპირ Apload, და მეტამონაცემები ჩვენს API- ში.

8) კომპრესია, დაშიფვრა, მთლიანობა

კომპრესია: 'zstd' სასურველია (უკეთესი ratio/სიჩქარე). შეკუმშეთ თითოეული ნაწილი ცალკე (უფრო მოსახერხებელია განახლება/ქეშირება).

დაშიფვრა:
  • მავთულზე: TLS 1. 2+.
  • დასვენების დროს: server side KMS (SSE-KMS) ან client-side (AES-256-GCM) საკვანძო პერანგით (key 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' (მაგალითად, 'პირადი კონტროლი, max-age = 3600') პირადი გადმოტვირთვისთვის.

10) უსაფრთხოება და შესაბამისობა

ავთენტიფიკაცია/ავტორიზაცია: ექსპორტის გაცემა მხოლოდ მფლობელს/როლებს; დროებითი ბმულები (pre-signed) მოკლე TTL- ით.
PII: შენიღბვა/ფსევდონიმი; მანიფესტში - მხოლოდ ტექნიკური სფეროები.
GDPR/ადგილობრივი რეგულატორები: TTL- ზე ექსპორტის მოცილება, გადმოტვირთვის აუდიტი, ჯვარედინი რეგიონალური ექსტრადიციის აკრძალვა.
Rate limiting & çtas: შეზღუდეთ ერთდროული ექსპორტის რაოდენობა და მთლიანი მოცულობა დღეში/თვეში (per-tenant).
Anti Scraping: SAR/bot ფილტრები ბმულების გაცემისთვის, დიაპაზონის შეზღუდვა (პარალელური ნაწილების მაქს.).

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/დრო).
  • ნაწილების ჰაში და კლიენტის მხარეზე შერიგება (დადასტურება).
ვაჭრობა:
  • Spans ეტაპზე: snapshot - serialize - upload part - finalize.

12) პროდუქტიულობა და ღირებულება

პარალელურობა: ერთდროულად შექმნათ რამდენიმე ნაწილი (N workers), მაგრამ შეზღუდეთ I/O.
მეხსიერება: ნაკადის სერიალიზაცია (გამეორებები, BD კურსდამთავრებულები, 4-16 MB მონეტები).
Deadup: ხშირად განმეორებითი ექსპორტისთვის, ფლოტის ჭკვიანი კაჩი ფილტრებით/ჰეშით.
CDN: სასარგებლოა „ზოგადი“ საზოგადოებრივი ნაკრებისთვის; პერსონალური - ფრთხილად (უსაფრთხოება/PII).

13) ინტერფეისის მაგალითები

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 ვორკერის ფსევდოკოდი

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) დელტას ექსპორტის ნიმუშები

სრული ექსპორტი ერთხელ N- ში (დღე/კვირა) + დელტა ყოველ საათში განახლებული _ at> watermark '.
მომხმარებლის მხარეს: დელტების გამოყენება წესრიგში, „ვერსიის “/„ სეკის“ გადამოწმება.
შეინახეთ ბოლო watermark მომხმარებელში და მანიფესტში.

15) ანტი შაბლონები

ექსპორტის წარმოება მოთხოვნით (სინქრონულად) - ტაიმაუტები და OOM.
ერთი გიგანტური ფაილი დანაყოფის გარეშე არის განახლების/პარალელური ტუმბოს შეუძლებლობა.
Checksum- ის და მანიფესტის არარსებობა არ შეიძლება დაადასტუროს მთლიანობა.
მუდმივი საზოგადოებრივი კავშირების გაცემა პერსონალურ მონაცემებზე.
SSE/CDN ბუფერიზაცია ან Range- ის გამორთვა - არღვევს „საწვავს“.
„ბინძური“ მონაცემების ექსპორტი (snapshot/იზოლაციის გარეშე).

16) განხორციელების შემოწმების სია

  • ფორმატი და კომპრესია: CSV/JSONL/Parquet + 'zstd/gzip'.
  • კოორდინაცია: გარიგების snapshot ან watermark/offset.
  • დანაყოფი: 64-512 MB ნაწილები, პარალელური თაობა და ჩამოტვირთვა.
  • მანიფესტი: ნაწილების სია, ზომები, SHA-256, სქემის ვერსია, watermark.
  • განახლება: HTTP Range, მხარდაჭერა 'multipart/byteranges', კლიენტის შენიშვნები.
  • უსაფრთხოება: pre-signed VNUs, TTL, დაშიფვრა (KMS/AEAD), შენიღბვა PII.
  • ლიმიტები/კვოტები: per-tenant, ყოველდღიური მოცულობა, აქტიური ჯობის რაოდენობა.
  • დაკვირვება: ჯობ/ნაწილების მეტრიკა, გადმოტვირთვის აუდიტი, ალერტები checksum-fail.
  • ღირებულება: CDN საზოგადოებრივი კომპლექტებისთვის, TTL და მანქანების ბლოკში.
  • Runbooks/Game Days: ქსელის კლდეები, ნაკადის მიუწვდომლობა, BD- ის გადახურება, KMS- ის მარცხი.

17) თამაშის დღეები (playbuks)

ქსელის დაშლა გადმოტვირთვის დროს: კლიენტმა უნდა გააგრძელოს 'Range' - ით.
ერთი ნაწილის დატვირთვის უკმარისობა: ნაწილის გადატვირთვა მთელი ექსპორტის გადაადგილების გარეშე.
ვორკერის დაცემა: ჯობა განახლებულია ბოლო დაუდასტურებელი ჩანკიდან.
KMS მიუწვდომელია: უსაფრთხო დეგრადაცია (თაობის პაუზა, არ გამოუშვათ დაშიფრული).
მონაცემთა ზრდა × 2: შეამოწმეთ თაობის დრო, გადაანაწილეთ პარალელიზმი, არ მოკლა BD.

18) შედეგები

საიმედო დიდი გადმოტვირთვაა ასინქრონული არქიტექტურა + ნაწილებად დაყოფა + განახლება + დადასტურებული მთლიანობა. გააკეთეთ snapshot, დაწერეთ ნაწილები პარალელურად, გამოაქვეყნეთ მანიფესტი checksum- ით, მხარი დაუჭირეთ HTTP Range- ს და მოკლე ბმულებს. იფიქრეთ უსაფრთხოებაზე, ლიმიტებზე და დაკვირვებაზე - და გიგაბაიტიანი ექსპორტები შეწყვეტს ღამის კოშმარს გუნდებისა და მომხმარებლებისთვის.

Contact

დაგვიკავშირდით

დაგვიკავშირდით ნებისმიერი კითხვის ან მხარდაჭერისთვის.ჩვენ ყოველთვის მზად ვართ დაგეხმაროთ!

Telegram
@Gamble_GC
ინტეგრაციის დაწყება

Email — სავალდებულოა. Telegram ან WhatsApp — სურვილისამებრ.

თქვენი სახელი არასავალდებულო
Email არასავალდებულო
თემა არასავალდებულო
შეტყობინება არასავალდებულო
Telegram არასავალდებულო
@
თუ მიუთითებთ Telegram-ს — ვუპასუხებთ იქაც, დამატებით Email-ზე.
WhatsApp არასავალდებულო
ფორმატი: ქვეყნის კოდი და ნომერი (მაგალითად, +995XXXXXXXXX).

ღილაკზე დაჭერით თქვენ ეთანხმებით თქვენი მონაცემების დამუშავებას.