GH GambleHub

मल्टीपार्ट निर्यात और बड़े अपलोड

1) जब "बड़े" निर्यात की आवश्यकता होती है और क्या महत्वपूर्ण

परिदृश्य: वित्तीय रिपोर्ट, उपयोगकर्ता गतिविधि अपलोड, ऑडिट/नियामक, बीआई अपलोड, पार्टनर निर्देशिका, बैकअप। मुख्य आवश्यकताएं:
  • डेटा स्थिरता (स्नैपशॉट/समय में बिंदु)।
  • वॉल्यूम में निष्क्रियता (समानांतर लेखन/पढ़ना, धारावाहिक स्ट्रीमिंग)।
  • अक्षय और आंशिक वितरण।
  • अखंडता (चेकसम) और सत्यापन (प्रकट)।
  • सुरक्षा/पीआईआई (मास्किंग, एन्क्रिप्शन, एक्सेस कंट्रोल)।
  • लागत प्रबंधन (संपीड़न, समय समाप्ति, सीडीएन, टीटीएल)।

2) डेटा प्रारूप: पेशेवरों/विपक्ष

CSV - कॉम्पैक्ट, लिखने/पढ़ने के लिए तेज; विपक्ष: परिरक्षण, प्रकार खो गए। सारणीबद्ध रिपोर्टों के लिए अच्छा है।

JSON लाइन्स (JSONL) - प्रति ऑब्जेक्ट लाइन द्वारा, स्ट्रीमिंग और आंशिक नमूना के लिए सुविधाजनक; विपक्ष: वॉल्यूम।

पर्केट/एवरो कॉलम/सर्किट प्रारूप, संपीड़न और पूर्वानुमान पुशडाउन; एनालिटिक्स और बिग डेटा के लिए आदर्श।

मिश्रित: API के लिए JSONL Parquet में → ऑफ़ लाइन रूपांतरण डाउनलोड करें।

संपीडनः 'gzip '/' zstd' (बेहतर)। बहुत बड़ी मात्रा के लिए - विभाजित अभिलेखागार (~ 128-512 एमबी प्रति भाग)।

3) स्थिरता: "स्नैपशॉट" कैसे प्राप्त करें

DB: REPEATABLE READ/SNAPSHOT लेन-देन अलगाव; धागे के लिए, तार्किक प्रतिकृति स्लॉट या वॉटरमार्क (अधिकतम। 'अद्यतन _ at '/संस्करण)।

घटना सोर्सिंग: ऑफसेट लॉग द्वारा निर्यात।

स्लाइस: "पूर्ण" निर्यात + "डेल्टास" (बाद में 'वॉटरमार्क' के बाद से परिवर्तनों के अपलोड)।

4) मल्टीपार्ट/चंकिंग

4. 1 प्रकार का "मल्टीपार्ट"

अपलोड (हमारे लिए): मल्टीपार्ट/फॉर्म-डेटा (छोटी फ़ाइलें), S3 मल्टीपार्ट अपलोड (MPU )/GCS Resumable (बड़ा)।

डाउनलोड करें (हमसे): HTTP रेंज ('बाइट्स = स्टार्ट-एंड'), 'मल्टीपार्ट/बाइट्रेंज' (एक प्रतिक्रिया में कई रेंज), "भागों की ज़िप", ऑब्जेक्ट स्टैक में निर्देशिका।

4. 2 विभाजन रणनीतियाँ

आकार के अनुसार (उदाहरण के लिए, 256 एमबी प्रति भाग)।

कुंजी/तिथि द्वारा ('किरायेदार _ आईडी', 'YYYYY/MM/DD' द्वारा शार्टिंग)।

तालिका/इकाई द्वारा (प्रति प्रकार व्यक्तिगत फ़ाइलें)।

संतुलन: 64-512 एमबी के कुछ हिस्से समानांतर में अच्छी तरह से डाउनलोड करते हैं और स्मृति को गर्म नहीं करते हैं।

5) निर्यात एपीआई वास्तुकला (अतुल्यकालिक मॉडल)

चरण:

1. 'POST/exports' → कतार में काम (मेटाडेटा: प्रारूप, फिल्टर, एन्क्रिप्शन, जीवनकाल)।

2. श्रमिक स्नैपशॉट, स्ट्रीम डेटा का निर्माण करते हैं, और ऑब्जेक्ट स्टोरेज के लिए भागों को लि

3. भाग, आकार, चेकसम, स्कीमा संस्करण की सूची के साथ एक मेनिफेस्ट (JSON) उत्पन्न करें।

4. 'GET/exports/{ id}' का परिणाम होगा स्थिति और लिंक (s )/पूर्व-हस्ताक्षरित URL के कुछ हिस्सों में.

5. 'GET/export/{ id }/mefeest. 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 रेंज: क्लाइंट फ़ाइल की "पूंछ" को लोड करता है: 'रेंज: बाइट्स = 241172480-'।

मल्टीपल रेंज: 'रेंज: बाइट्स = 0-999,2000-2999' → 'कंटेंट-टाइप: मल्टीपार्ट/बायटेरेंज' प्रतिक्रिया।

ग्राहक रणनीति: भागों में समानांतर "श्रमिक", प्रत्येक के 'sha256' का सत्यापन, घातीय बैकऑफ के साथ रेट्राई।

सीडीएन: रेंज समर्थन, बड़ी प्रतिक्रिया बफरिंग अक्षम.

7) हमारे लिए बड़े डाउनलोड (फिर से अपलोड करने योग्य)

S3 मल्टीपार्ट अपलोड: क्लाइंट पार्ट्स (5-5000) डाउनलोड करते हैं, सर्वर ' MultipartUpload' एकत्र करता है।

GCS Resumable - एक सत्र, ऑफसेट - क्लाइंट 'कंटेंट-रेंज' के साथ जारी रख सकता है।

TUS (प्रोटोकॉल) HTTP के शीर्ष पर एक स्वतंत्र अक्षय एप्लोड है।

पैटर्न बी 2 बी: हम सीधे स्टोर में भागों के एप्लोड के लिए पूर्व-हस्ताक्षरित यूआरएल भेजते हैं, और हमारे एपीआई को मेटाडेटा।

8) संपीड़न, एन्क्रिप्शन, अखंडता

संपीडनः 'zstd' पसंदीदा (बेहतर अनुपात/गति)। प्रत्येक भाग को अलग से संपीड़ित करें (यह नवीकरण/कैश के लिए अधिक सुविधाजनक है)।

एनक्रिप्शन:
  • तार पर: टीएलएस 1। 2+.
  • आराम पर: सर्वर-साइड KMS (SSE-KMS) या कुंजी रैपिंग के साथ क्लाइंट-साइड (AES-256-GCM)।
  • घोषणापत्र में कभी "कच्ची" कुंजी न डालें।
  • चेकसम: पूरे सेट के लिए न्यूनतम SHA-256 प्रति भाग + सामान्य। ack से पहले क्लाइंट पर जाँच करें।

9) परिधि एकीकरण: NGINX/CDN

NGINX (रेंज + लॉन्ग टाइमआउट + डिसेबल बफरिंग):
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;
}
}
प्रतिक्रिया शीर्षिका:
  • 'सामग्री-विवाद: लगाव; फ़ाइलनाम = "निर्यात _ 2025-10-31 _ भाग-00000। parquet। zst"'
  • 'ETag '/' If-Range' for सही लोडिंग।
  • व्यक्तिगत अपलोड के लिए 'कैश-कंट्रोल' (उदाहरण के लिए, 'निजी, अधिकतम आयु = 3600')।

10) सुरक्षा और अनुपालन

प्रमाणीकरण/प्राधिकरण: केवल मालिक/भूमिकाओं को निर्यात जारी करना; लघु टीटीएल के साथ पूर्व हस्ताक्षर किए।

PII: मास्किंग/अलियासिंग; प्रकट - केवल तकनीकी क्षेत्रों में।

जीडीपीआर/स्थानीय नियामक: टीटीएल द्वारा निर्यात को हटाना, डाउनलोड का ऑडिट, बिना कारण के क्रॉस-क्षेत्रीय जारी करने पर प्रतिबंध।

दर सीमित और कोटा: एक साथ निर्यात की संख्या और प्रति दिन/महीने (प्रति-किरायेदार) कुल मात्रा को सीमित करें।

एंटी-स्क्रैपिंग: लिंक जारी करने के लिए सीएपी/बॉट फिल्टर, सीमित रेंज (अधिकतम समानांतर भागों)।

11) अवलोकन और संचालन

मेट्रिक्स:
  • 'एक्सपोर्ट _ जॉब्स _ टोटल {स्टेटस}' (कतारबद्ध/रनिंग/सफल/असफल/समाप्त)
  • 'export _ bytes _ tomal', 'export _ parte _ dation _ ms {p50, p95, p99}'
  • 'download _ range _ requests _ tomal', 'resemment _ total', 'checksum _ fail _ total'
  • 'storage _ cost _ stastate' и 'egress _ bytes _ cdn'
लॉग/लेखा परीक्षा:
  • किसने निर्यात, फिल्टर, वॉटरमार्क, डाउनलोड सूची (आईपी/यूए/समय) बनाई।
  • पार्ट्स हैश और ग्राहक पक्ष सामंजस्य (पुष्टि)।
ट्रेसिंग:
  • स्पैन: स्नैपशॉट क्रमबद्ध अपलोड भाग - अंतिम रूप।

12) प्रदर्शन और लागत

समानतावाद: एक साथ कई भागों को उत्पन्न करें (एन श्रमिक), लेकिन I/O को सीमित करें।

मेमोरी: स्ट्रीमिंग क्रमांकन (पुनरावृत्ति, डेटाबेस कर्सर, 4-16 एमबी के चंक)।

Dedup: अक्सर बार-बार निर्यात के लिए, फ़िल्टर/हैश द्वारा भागों का स्मार्ट कैश।

सीडीएन: "जेनेरिक" सार्वजनिक सेट के लिए फायदेमंद; व्यक्तिगत सावधानी के लिए (सुरक्षा/पीआईआई)।

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 जारी करने वाला हिस्सा

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> वाटरमार्क' द्वारा प्रत्येक घंटे।

उपभोक्ता पक्ष पर, 'version '/' seq' को सत्यापित करके डेल्टा को लागू करें।

उपभोक्ता में और स्पष्ट रूप से अंतिम जलमार्क रखें।

15) एंटी-पैटर्न

निवेदन में निर्यात उत्पादन (तुल्यकालिक) - टाइमआउट और OOM।

विभाजन के बिना एक विशाल फ़ाइल फिर से शुरू/समानांतर डाउनलोड करने में असमर्थता है।

चेकसम और प्रकट की कमी - आप ईमानदारी साबित नहीं कर सकते।

व्यक्तिगत डेटा के लिए स्थायी सार्वजनिक लिंक जारी कर

बफरिंग एसएसई/सीडीएन या अक्षम रेंज - "पुनः लोड" को तोड़ ता है।

गंदा डाटा निर्यात करें (बिना स्नैपशॉट/अलगाव के)।

16) कार्यान्वयन चेकलिस्ट

  • प्रारूप और संपीड़न: CSV/JSONL/Parquet + 'zstd/gzip'।
  • स्थिरता: लेन-देन स्नैपशॉट या वॉटरमार्क/ऑफसेट।
  • विभाजन: 64-512 एमबी भागों, समानांतर पीढ़ी और डाउनलोड।
  • मेनिफेस्ट: भागों की सूची, आयाम, SHA-256, स्कीमा संस्करण, वॉटरमार्क।
  • नवीनीकरण: HTTP रेंज, 'मल्टीपार्ट/बायटेरेंज' समर्थन, क्लाइंट रेट्रे।
  • सुरक्षा: पूर्व-हस्ताक्षरित URL, TTL, एन्क्रिप्शन (KMS/AEAD), PII मास्किंग।
  • सीमाएं/कोटा: प्रति-किरायेदार, दैनिक संस्करणों, सक्रिय नौकरियों की संख्या।
  • अवलोकन: नौकरी/भाग मैट्रिक्स, डाउनलोड ऑडिट, चेकसम-फेल अलर्ट।
  • लागत: स्टोर में सार्वजनिक सेट, टीटीएल और ऑटो-सफाई के लिए सीडीएन।
  • रनबुक/गेम डेज़: नेटवर्क ब्रेक, स्टोर अनुपलब्धता, डेटाबेस ओवरहीटिंग, केएमएस विफलता।

17) गेम डेज़ (प्लेबुक)

डाउनलोड के दौरान नेटवर्क ड्रॉप: क्लाइंट को 'रेंज' के साथ जारी रखना होगा।

एक भाग लोड करने में विफल: पूरे निर्यात को फिर से बनाए बिना पार्ट रिट्रे।

कार्यकर्ता का पतन: नौकरी अंतिम अपुष्ट हिस्से के साथ फिर से शुरू होती है।

केएमएस अनुपलब्ध: सुरक्षित गिरावट (जनरेशन ठहराव, अनएनक्रिप्टेड जारी न करें)।

डेटा वृद्धि × 2: चेक जनरेशन टाइम, पुनर्वितरण समानतावाद, डेटाबेस को नहीं मारते हैं।

18) कुल

विश्वसनीय बड़े ऑफलोड अतुल्यकालिक वास्तुकला + विभाजन + नवीकरण + सत्यापित अखंडता हैं। एक स्नैपशॉट लें, समानांतर में भागों को लिखें, चेकसम के साथ एक प्रकट करें, HTTP रेंज और अल्पकालिक लिंक का समर्थन करें। सुरक्षा, सीमा और अवलोकन के माध्यम से सोचें - और गीगाबाइट निर्यात टीमों और उपयोगकर्ताओं के लिए एक बुरा सपना बनकर रह जाएगा।

Contact

हमसे संपर्क करें

किसी भी प्रश्न या सहायता के लिए हमसे संपर्क करें।हम हमेशा मदद के लिए तैयार हैं!

Telegram
@Gamble_GC
इंटीग्रेशन शुरू करें

Email — अनिवार्य है। Telegram या WhatsApp — वैकल्पिक हैं।

आपका नाम वैकल्पिक
Email वैकल्पिक
विषय वैकल्पिक
संदेश वैकल्पिक
Telegram वैकल्पिक
@
अगर आप Telegram डालते हैं — तो हम Email के साथ-साथ वहीं भी जवाब देंगे।
WhatsApp वैकल्पिक
फॉर्मैट: देश कोड और नंबर (उदा. +91XXXXXXXXXX)।

बटन दबाकर आप अपने डेटा की प्रोसेसिंग के लिए सहमति देते हैं।