Multipart-Aleksands և մեծ արտանետումներ
1) Երբ անհրաժեշտ են «մեծ» օրինակներ, և ինչն է կարևոր։
Սցենարներ ՝ ֆինանսական հաշվետվություններ, օգտագործողների գործունեության ծանրաբեռնվածություն, աուդիտ/կարգավորիչներ, BI-արտանետումներ, գործընկերային հետազոտություններ և, պահեստային պատճեններ։ Հիմնական պահանջները
Տվյալների համաձայն (ժամանակի apshot/dot)։
Անցումը ծավալի միջոցով (զուգահեռ գրառում/ընթերցում, հոսքի շարականացում)։
Վերականգնումը (resumable) և մասնակի առաքումը։
Ամբողջականությունը (www.ksum) և հավատարմությունը (մանիֆեստ)։
Անվտանգություն/PII (դիմակավորում, կոդավորում, մուտքի վերահսկում)։
Արժեքի կառավարում (ագրեսիա, թայմ-աուտներ, CDN, TTL)։
2) Տվյալների ցանկը 'պլյուսներ/մինուսներ
CSV - կոմպակտ, արագ գրել/կարդալ; մինուսներ 'էկրանավորումը, տեսակները կորչում են։ Լավ է պլաստիկ պարամետրերի համար։
JSON Lines (JSONL) - օբյեկտի տողի վրա, հարմար է սթրիմինգի և մասնակի նմուշների համար։ մինուսներ 'ծավալը։
Parquet/Avro - գաղութային/սխեմատիկական միացություններ, սեղմում և dicate pushdown; իդեալական է վերլուծաբանների և մեծ տվյալների համար։
Mixed: JSONL-ը API բեռնման համար Parquet-ի օֆլինի փոխարկումը։
Սպիտակուցիա ՝ «gzip »/« zstd» (ավելի լավ)։ Շատ մեծ կղզիների համար 'սպլիտ արխիվներ (71-512 ՄԲ-ով մի մասի վրա)։
3) Համաձայնություն. Ինչպե՞ ս ստանալ «նկարը»
BD 'REPEATABLE READ/MSAPSHOT գործարքային մեկուսացում; հոսքերի համար 'ռեակտիվության տրամաբանական արցունքները կամ «watermark» նշանը (մակս' edonated _ at/տարբերակը)։
Event sourcing: էքսպորտը www.set ամսագրի վրա։
Կտրվածքներ ՝ «ամբողջական» էքսպորտը + «դելտա» (հաջորդ փոփոխությունները «watermark» -ից)։
4) Բաժանումը մասերի վրա (multipart/chunking)
4. 1 տեսակի «multipart»
Upload (մեզ): multipart/form-105 (փոքր ֆայլեր), S3 Multipart Upload (MPU )/GCS Resumable (մեծ)։
Download (մեզանից): HTTP Range («bytes = start-end»), «multipart/byteranges» (մի քանի միջակայք մեկ պատասխանով), «zip of parance», ռուսական և օբյեկտի մեջ։
4. 2 Քայքայման ռազմավարություն
Չափի (օրինակ, 256 ՄԲ)։
Բանալին/ամսաթիվը (շարդինգը '«tenrone _ id», «YYYY/MM/DD»)։
Աղյուսակի/էության (առանձին ֆայլեր տեսակների վրա)։
Հավասարակշռություն '64-512 ՄԲ մասերը լավ են ցատկում զուգահեռ և չեն տաքացնում հիշողությունը։
5) API-ճարտարապետությունը (ասինխրոն մոդել)
Քայլերը
1. «POST/export.ru» առաջադրանքը հերթում է (մետատվյալներ ՝ ձևաչափ, ֆիլտրեր, կոդավորում, կյանքի ժամանակահատվածը)։
2. Workers կառուցում են wwww.apshot, սթրիմ տվյալները և գրում մասեր օբյեկտի պահեստում։
3. Արտադրում են մանիֆեստ (JSON) մասերի ցուցակով, չափսերով, www.ksum, սխեմայի տարբերակով։
4. 'GET/express/code id code "վերադարձնում է կարգավիճակը և հղումը (և )/pre-signed URLL-ում։
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)
HTTRANGE: Հաճախորդը յուրացնում է ֆայլի "պոչը" ՝ "Range: bytes = 1172470- ը։
Մի քանի միջակայքներ ՝ «Range: bytes = 0-99,2,000-4999» - պատասխանը ՝ «Entent-Type: multipart/byteranges»։
Հաճախորդի ռազմավարությունը 'զուգահեռ «գողերը» մասերի վրա, «sha256» յուրաքանչյուրը, էքսպոնենցիալ backoff։
CDN 'Range-ի աջակցությունը, անջատված մեծ պատասխանների բուֆերիզացիան։
7) Մեծ բեռնումը մեզ մոտ (resumable upload)
S3 Multipart Upload: հաճախորդները բեռնում են մասերը (5-5000), սերվերը հավաքում է «CompleteMultipartUpload»։
GCS Resumable: մեկ նստաշրջան, ռուսական հաճախորդը կարող է շարունակել «Content-Range» -ի հետ։
TUS (արձանագրություն) - անկախ վերականգնվող apload HTTP-ի վերևում։
Pattern B2B: Մենք տալիս ենք pre-signed URL-ը մասերը ուղղակիորեն պատնեշի մեջ, իսկ մետատվյալները 'մեր API-ում։
8) Սպիտակուցիա, կոդավորում, ամբողջականություն, ամբողջականություն
Ֆինլանդիա '«zstd» նախընտրելի է (ավելի լավ է ratio/արագություն)։ Սեղմեք յուրաքանչյուր մասը առանձին (ավելի հարմար է վերսկսել/կանխել)։
Կոդավորումը
Լարման վրա ՝ TFC 1։ 2+.
Հանգիստ 'KSA (SSE-KMS) կամ client-side (AES-256-GCM) բանալին (key wrapping)։
Երբեք մի տեղադրեք մանիֆեստի «հում» բանալին։
Noksum: առնվազն 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-Corl» (օրինակ ՝ «private, max-age = 2400») անձնական բեռնման համար։
10) Անվտանգություն և բաղադրիչներ
Վավերացում/հեղինակային արտահայտություն. Օրինագծերի թողարկումը միայն սեփականատիրոջ/դերերի։ ժամանակավոր հղում (pre-signed) կարճ TTL-ով։
PII 'դիմակավորում/կեղծանունացում; մանիֆեստում միայն տեխնոլոգիական դաշտերն են։
GDPR/տեղական կարգավորիչները 'TTL-ի վրա ածխաջրածինների հեռացում, ներբեռնման աուդիտ, քրոս-տարածաշրջանային կարգավորման արգելք առանց հիմքի։
Rate limiting & windtas: Սահմանափակել միաժամանակ ածխաջրածինների քանակը և ընդհանուր ծավալը օրական/ամիս (per-tenae)։
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/ժամանակը)։
Հեշի մասերը և հավաքումը հաճախորդի կողմում (հաստատումը)։
Թրեյսինգը
Քնած են փուլերի վրա ՝ wwww.apshot no serialize diupload part pinalize։
12) Արտադրողականությունը և արժեքը
Զուգահեռ 'ստեղծեք մի քանի մասեր միաժամանակ (N worker), բայց սահմանեք I/O.
Հիշողությունը 'հոսքի շարքը (iterators, BD կուրսորներ, 4-16 MB)։
Dedup: Հաճախ կրկնվող օրինակների համար խելացի cache of parts ֆիլտրերի/հեշի միջոցով։
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-ում (օր/շաբաթ) + 108 դու ամեն ժամ «delated _ at> watermark»։
Սպառողի կողմում 'կիրառեք դելտաները ըստ կարգի' հավատալով «version »/« seq»։
Պահեք վերջին watermark սպառողի և մանիֆեստի մեջ։
15) Anti-patterna
Էքսպորտը (սինխրոն) - թայմաուտներ և OFC։
Մի հսկա ֆայլ առանց ապամոնտաժման անհնար է։
Noksum-ի և մանիֆեստի բացակայությունը չի կարող ապացուցել ամբողջականությունը։
Մշտական հանրային հղում անձնական տվյալների վրա։
Buferization SSE/CDN կամ անջատված Range-ը կոտրում է «ավելցուկը»։
«Կեղտոտ» տվյալների արտահանումը (առանց www.apshot/մեկուսացման)։
16)
- Ձևաչափը և թեմը ՝ CSV/JSONL/Parquet + 'zstd/gzip "։
- Համաձայնություն 'գործարքային intapshot կամ watermark/www.set։
- Բաժանումը '64-512 ՄԲ մասեր, զուգահեռ արտադրություն և արագացում։
- Մանիենկո 'մասերի ցանկը, չափսերը, SHA-256, սխեմայի տարբերակը, watermark։
- Վերականգնումը 'HTTRANGE, աջակցություն' multipart/byteranges ", հաճախորդների ռետրեր։
- Անվտանգություն: pre-signed CORS, TTL, կոդավորումը (KFC/AEAD), PII դիմակավորում։
- Limits/քվոտաներ ՝ per-ten.ru, ամենօրյա ծավալները, ակտիվ ջոյի քանակը։
- Դիտարկումը 'ջո/մասերի չափումներ, ներբեռնման աուդիտ, ալտերտեր www.ksum-fail-ում։
- Արժեքը 'CDN հանրային հավաքածուի համար, TTL և auto-cleanup։
- Runbooks/Game Days: Ցանցի բեկորները, սթորի անհասանելիությունը, կոտրելով BD-ն, KFC-ի ձախողումը։
17) Game Days (պլեյբուսներ)
Ցանցի փլուզումը, երբ պտտվում է, հաճախորդը պետք է շարունակի «Range» -ի հետ։
Մեկ մասի բեռնման ձախողումը 'հատվածի հոսքը առանց ամբողջ արտահանման փոխպատվաստման։
Գողերի անկումը 'ջոբան վերականգնվում է վերջին չհաստատված չանկից։
KFC-ն անհասանելի է. Անվտանգ դեգրադացիա (դադար), չթողարկվել)։
Տվյալների աճը 242: Ստուգել մրցույթի ժամանակը, վերաբաշխել զուգահեռականությունը, չսպանել BD-ը։
18) Արդյունքները
Հուսալի մեծ արտանետումները ասինխրոն ճարտարապետություն են + բաժանումը մասերի վրա + վերականգնում + ստուգված ամբողջականությունը։ Արեք apshot, գրեք մասեր զուգահեռ, հրապարակեք մանիֆեստ, աջակցեք HTTP Range-ին և կարճ հղումներին։ Մտածեք անվտանգության, սահմանների և դիտողությունների մասին, և հսկա օրինագծերը կդադարեն գիշերային մղձավանջը թիմերի և օգտագործողների համար։