बिग डेटा के लिए Rust: Python से तेज़ी से लाखों पंक्तियों का प्रसंस्करण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

क्यों Rust बड़े डेटा प्रसंस्करण का नया राजा है?

\n\n

क्या आपने कभी 20 मिनट तक इंतजार किया है जब Python स्क्रिप्ट 10-गीगाबाइट CSV फ़ाइल को प्रोसेस कर रही हो? और फिर 10 मिनट और, क्योंकि मेमोरी खत्म हो गई और सिस्टम स्वैप में चला गया? परिचित लगता है?

\n\n

बड़े डेटा की दुनिया लंबे समय तक Python और उसके इकोसिस्टम: Pandas, NumPy, Dask की थी। लेकिन एक समस्या है — Python धीमा है। बहुत धीमा। और जब डेटा टेराबाइट्स में मापा जाता है, तो हर अतिरिक्त मिलीसेकंड घंटों के डाउनटाइम में बदल जाता है।

\n\n

यहाँ पर Rust मंच पर आता है। एक सिस्टम भाषा जो C++ का प्रदर्शन और मेमोरी सुरक्षा देती है, लेकिन एक सिंटैक्स के साथ जिसे (स्पॉयलर) पसंद किया जा सकता है। और हाँ, यह बड़े डेटा के प्रसंस्करण के लिए एकदम सही है।

\n\n

इस लेख में, हम देखेंगे कि कैसे Rust आपको विशाल डेटा वॉल्यूम को तेज़ी से, सुरक्षित रूप से और कम मेमोरी खपत के साथ प्रोसेस करने की अनुमति देता है। कोई जादू नहीं — केवल कोड और माप।

\n\n

Big Data के लिए Rust vs Python: अंदर क्या है?

\n\n

चलिए सीधे आंकड़ों पर आते हैं। यहाँ एक सरल परीक्षण है: 500 MB CSV फ़ाइल पढ़ें, शर्त के अनुसार पंक्तियों को फ़िल्टर करें और योग की गणना करें।

\n\n\n\n\n\n\n
पैरामीटरPython (Pandas)Rust (Polars)
निष्पादन समय12.4 सेकंड0.8 सेकंड
पीक RAM खपत2.1 GB380 MB
पंक्तियों की संख्या5 मिलियन5 मिलियन
\n\n

15 गुना तेज़ और मेमोरी में 5 गुना अधिक किफ़ायती। और यह सीमा नहीं है। Rust हर बाइट, हर आवंटन पर नियंत्रण देता है। यह गलतियों को माफ नहीं करता, लेकिन वह गति देता है जिसे Python कभी हासिल नहीं कर पाएगा।

\n\n

Big Data के लिए Rust टूलकिट

\n\n

कोड लिखने से पहले, आइए देखें कि शस्त्रागार में क्या है। Rust स्थिर नहीं है — डेटा के साथ काम करने के लिए इकोसिस्टम सक्रिय रूप से बढ़ रहा है।

\n\n

मुख्य लाइब्रेरीज़

\n
    \n
  • Polars — Pandas का एनालॉग, लेकिन Rust पर। Lazy-गणना, समानांतर प्रसंस्करण का समर्थन करता है और उस डेटा के साथ काम करता है जो मेमोरी में फिट नहीं होता।
  • \n
  • Apache Arrow — कॉलम-आधारित डेटा प्रारूप जो बिना कॉपी किए विभिन्न भाषाओं के बीच डेटा साझा करने की अनुमति देता है।
  • \n
  • DataFusion — Rust पर SQL इंजन जो सीधे Arrow डेटा पर क्वेरी निष्पादित कर सकता है।
  • \n
  • rayon — समानांतर पुनरावृत्तियों के लिए लाइब्रेरी। किसी भी प्रसंस्करण को आसानी से समानांतर करने की अनुमति देता है।
  • \n
  • csv — न्यूनतम आवंटन के साथ तेज़ CSV फ़ाइल पार्सर।
  • \n
  • serde — सीरियलाइज़ेशन/डीसीरियलाइज़ेशन। JSON, YAML, TOML के साथ काम करने के लिए अनिवार्य।
  • \n
\n\n

हम Polars और rayon का उपयोग करेंगे, क्योंकि यह Rust पर बड़े डेटा के प्रसंस्करण के लिए डी-फैक्टो मानक है।

\n\n

व्यावहारिक उदाहरण: वेब सर्वर लॉग का प्रसंस्करण

\n\n

कल्पना करें कि आपके पास Nginx लॉग के 100 मिलियन रिकॉर्ड हैं। आपको चाहिए:

\n
    \n
  1. केवल 5xx त्रुटियों को फ़िल्टर करना
  2. \n
  3. IP पते के अनुसार समूहित करना
  4. \n
  5. प्रति IP त्रुटियों की संख्या गिनना
  6. \n
  7. शीर्ष 10 हमलावरों को प्रदर्शित करना
  8. \n
\n\n

Python और Pandas पर इसमें लगभग 2-3 मिनट लगेंगे और सारी RAM खत्म हो जाएगी। Rust पर — 15-20 सेकंड।

\n\n

डेटा संरचना

\n

मान लें कि प्रत्येक लॉग इस तरह दिखता है:

\n
192.168.1.1 - - [10/Oct/2023:13:55:36 +0000] "GET /api/data HTTP/1.1" 500 1234 "-" "Mozilla/5.0"
\n\n

हमें स्ट्रिंग को पार्स करना, IP और प्रतिक्रिया कोड निकालना होगा। Rust में यह एक कस्टम स्ट्रक्चरल प्रकार के माध्यम से किया जाता है:

\n\n
use serde::Deserialize;\n\n#[derive(Debug, Deserialize)]\nstruct LogEntry {\n    ip: String,\n    status_code: u16,\n    method: String,\n    path: String,\n    user_agent: String,\n}
\n\n

Polars के साथ CSV पार्सिंग

\n

Polars वह है जिसके लिए इसे आज़माना उचित है

ब्लॉग

पुस्तक अनुशंसाएँ