← नवीनतम पेपर
💻 computer science

JEDI: Java Evaluation of Declarative and Imperative Queries

यह शोध पत्र JEDI प्रस्तुत करता है, जो एक स्वचालित रूप से जनरेट किया गया बेंचमार्क सुइट है जो डिक्लेरेटिव स्ट्रीम API कार्यान्वयन (implementations) के प्रदर्शन का इम्पैरेटिव बेसलाइन्स के विरुद्ध मूल्यांकन और तुलना करने के लिए SQL क्वेरीज़ को जावा में परिवर्तित करता है, जिसका लक्ष्य अक्षम कोड पैटर्न की पहचान करना और जावा स्ट्रीम API के अनुकूलन (optimization) को निर्देशित करना है।

मूल लेखक: Filippo Schiavio, Walter Binder

प्रकाशित 2026-05-25
📖 7 मिनट में पढ़ें🧠 गहराई से पढ़ें

मूल लेखक: Filippo Schiavio, Walter Binder

मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें

कल्पना कीजिए कि आपके पास बक्सों (डेटा) से भरा एक विशाल गोदाम है, और आपको विशिष्ट वस्तुओं को खोजना, उन्हें छाँटना और उनकी गिनती करनी है। आपके पास अपने श्रमिकों को निर्देश देने के दो तरीके हैं:

  1. "मैनेजर" दृष्टिकोण (इम्पैरेटिव/Imperative): आप व्यक्तिगत रूप से प्रत्येक श्रमिक के पास जाते हैं और कहते हैं, "यह बक्सा उठाओ। देखो क्या यह लाल है। यदि हाँ, तो इसे एक ढेर में रख दो। यदि नहीं, तो इसे फेंक दो। अब अगला वाला उठाओ।" यह बहुत सीधा और तेज़ है, लेकिन इसमें बहुत अधिक बात करने की आवश्यकता होती है और यदि आपके पास हजारों श्रमिक हैं तो यह अस्त-व्यस्त हो सकता है।

  2. "फोरमैन" दृष्टिकोण (जावा स्ट्रीम API/Java Stream API): आप एक सुंदर सा नोट लिखते हैं: "सभी बक्से लें, लाल वाले फिल्टर करें, आकार के अनुसार क्रमबद्ध करें, और उनकी गिनती करें।" आप यह नोट एक फोरमैन (फोरमैन) को सौंप देते हैं जो यह तय करता है कि श्रमिकों से काम कैसे लिया जाए। यह आपके लिखने और पढ़ने में बहुत आसान है, लेकिन फोरमैन को आपके नोट का क्रियाओं में अनुवाद करना पड़ता है, जिसमें कभी-कभी अतिरिक्त समय लगता है।

यह शोध पत्र, जिसका शीर्षक JEDI है, इस बारे में है कि "फोरमैन" (जावा स्ट्रीम API) का "मैनेजर" (पारंपरिक कोड) की तुलना में प्रदर्शन कैसा है, इसकी जांच कैसे की जाए, और फोरमैन को तेज़ बनाने के लिए क्या किया जा सकता है।

समस्या

जावा स्ट्रीम API लोकप्रिय है क्योंकि यह कोड को साफ और समझने में आसान बनाता है (जैसे फोरमैन को दिया गया नोट)। हालांकि, डेवलपर्स को संदेह है कि कोड लिखने का यह "साफ" तरीका पारंपरिक "अस्त-व्यस्त" तरीके की तुलना में धीमा है। समस्या यह है कि इस परीक्षण को निष्पक्ष रूप से करने के लिए किसी के पास एक उचित रेस ट्रैक (बेंचमार्क) नहीं था। बिना रेस ट्रैक के, जावा भाषा बनाने वाले लोग (मैकेनिक) यह नहीं जान पाते कि इंजन कहाँ अटक रहा है, और डेवलपर्स यह नहीं जान पाते कि कौन से निर्देश सबसे अच्छी गति देते हैं।

समाधान: JEDI

लेखकों ने JEDI (Java Evaluation of Declarative and Imperative Queries) बनाया है। JEDI को एक विशाल, स्वचालित कारखाने के रूप में समझें जो मानक डेटाबेस प्रश्नों (जो SQL नामक भाषा में लिखे जाते हैं, जो एक सार्वभौमिक अनुरोध फॉर्म की तरह है) को तुरंत दो अलग-अलग निर्देशों के सेट में अनुवादित करता है:

  1. एक सेट "फोरमैन" शैली (Streams) का उपयोग करके।
  2. एक सेट "मैनेजर" शैली (Imperative loops) का उपयोग करके।

चूंकि कारखाना एक ही प्रश्न को दोनों शैलियों में अनुवादित करता है, इसलिए तुलना पूरी तरह से निष्पक्ष है। यह बिल्कुल वैसा ही है जैसे दो धावकों को एक ही रास्ता देना और यह देखने के लिए उन्हें टाइम करना कि कौन तेज़ है।

उन्होंने क्या खोजा

1. छोटे बदलाव बड़ा अंतर पैदा करते हैं ("फिल्टर फ्यूजन")
कभी-कभी फोरमैन भ्रमित हो जाता है यदि आप उसे तीन अलग-अलग नोट्स देते हैं: "लाल के लिए जाँच करें," "बड़े के लिए जाँच करें," "भारी के लिए जाँच करें।"

  • समाधान: लेखकों ने पाया कि इन तीनों को एक बड़े नोट में मिलाने से ("लाल और बड़ा और भारी के लिए जाँच करें") फोरमैन बहुत तेज़ हो जाता है। यह एक श्रमिक को तीन भ्रमित करने वाले निर्देशों के बजाय एक स्पष्ट निर्देश देने जैसा है।
  • परिणाम: इस साधारण बदलाव ने कुछ मामलों में कोड को 2.6 गुना तेज़ बना दिया।

2. "एक-से-कई" (One-to-Many) का तरीका
कभी-कभी एक अकेले बक्से के अंदर कई छोटी वस्तुएं होती हैं।

  • पुराना तरीका: फोरमैन बक्सा लेगा, उसे खोलेगा, एक वस्तु निकालेगा, उसे ढेर में रखेगा, वापस जाएगा, अगली वस्तु निकालेगा, और दोहराएगा।
  • नया तरीका: लेखकों ने पाया कि एक विशेष उपकरण (जिसे mapMulti कहा जाता है) फोरमैन को एक ही झटके में बक्सा खोलने और सभी वस्तुओं को एक साथ बाहर निकालने की अनुमति देता है।
  • परिणाम: यह पहले वाले सुझाव से भी अधिक प्रभावी था, जिसने अक्सर गति को दोगुना कर दिया।

3. पैरेललिज्म पहेली (कई श्रमिकों का उपयोग करना)
जब आपके पास एक बहुत बड़ा गोदाम होता है, तो आप एक साथ कई श्रमिकों का उपयोग करना चाहते हैं (पैरेलल प्रोसेसिंग)। पेपर ने श्रमिकों को व्यवस्थित करने के चार अलग-अलग तरीकों का परीक्षण किया:

  • "कठोर क्रम" टीम (Strict Order): हर कोई एक लाइन में काम करता है, बक्से नीचे पास करता है। व्यवस्था बनाए रखने के लिए अच्छा है, लेकिन धीमा है।
  • "अराजकता" टीम (Chaos): हर कोई बेतरतीब ढंग से बक्से उठाता है। तेज़, लेकिन प्रबंधित करना कठिन है।
  • "साझा बोर्ड" टीम (Shared Board): हर कोई अपने परिणाम एक विशाल साझा व्हाइटबोर्ड पर लिखता है।
  • "एटॉमिक" टीम (Atomic): हर कोई एक विशेष, हाई-टेक पेन का उपयोग करता है जो कभी दाग नहीं छोड़ता, भले ही दो लोग एक ही समय में लिख रहे हों।

निर्णय: कोई एक "सर्वश्रेष्ठ" टीम नहीं है।

  • यदि आपके पास वस्तुओं को छाँटने के लिए बहुत कम समूह हैं (जैसे केवल 4 प्रकार के फल छाँटना), तो "कठोर क्रम" या "अराजकता" टीमें सबसे तेज़ होती हैं क्योंकि "साझा बोर्ड" बहुत भीड़भाड़ वाला हो जाता है (इस बात पर बहस होती है कि पहले कौन लिखेगा)।
  • यदि आपके पास हजारों समूह हैं (जैसे 10,000 अलग-अलग फलों के प्रकार छाँटना), तो "साझा बोर्ड" टीम जीतती है क्योंकि बहस रुक जाती है, और हर कोई बिना किसी टकराव के अपना हिस्सा लिख सकता है।

4. गति का अंतर (Speed Gap)
बड़ा सवाल यह है: क्या "फोरमैन" (Stream) "मैनेजर" (Imperative) से धीमा है?

  • हाँ। पारंपरिक "मैनेजर" कोड लगातार तेज़ होता है, आमतौर पर लगभग 30% से 40% तक।
  • क्यों? फोरमैन को आपके सुंदर नोट को क्रियाओं में अनुवाद करने में समय बिताना पड़ता है। मैनेजर सीधे काम करता है।
  • अच्छी खबर: अंतर उतना बड़ा नहीं है जितना कि अतीत में लोगों को लगता था। जावा टीम इंजन को बेहतर बना रही है। हालांकि, पूर्णतम प्रदर्शन के लिए, "मैनेजर" शैली अभी भी जीतती है।

5. ट्रेड-ऑफ: गति बनाम मानसिक शांति (Speed vs. Sanity)
पेपर ने यह भी देखा कि कोड को पढ़ना कितना कठिन है।

  • "मैनेजर" कोड (सबसे तेज़) एक घने, भ्रमित करने वाले निर्देश मैनुअल की तरह है। इसे पढ़ना कठिन है और इसमें गलतियाँ होने की संभावना अधिक है।
  • "फोरमैन" कोड (धीमा) एक स्पष्ट, छोटी कहानी की तरह है। इसे समझना बहुत आसान है और इसमें त्रुटियों की संभावना कम है।
  • सबक: आपको चुनना होगा। क्या आप चाहते हैं कि कोड 30% तेज़ चले, या आप चाहते हैं कि यह मनुष्यों के लिए पढ़ने और बनाए रखने में 2.5 गुना आसान हो? पेपर सुझाव देता है कि अधिकांश लोगों के लिए, "फोरमैन" शैली उस मामूली गति की कमी के बावजूद सार्थक है क्योंकि यह डिबगिंग और रखरखाव में समय बचाती है।

सारांश

JEDI एक नया टूल है जो डेवलपर्स को आधुनिक, आसानी से पढ़े जाने वाले जावा स्ट्रीम API का उपयोग करने की "लागत" समझने में मदद करता है। यह साबित करता है कि हालांकि आसानी से पढ़े जाने वाले कोड पुराने-स्कूल के कोड की तुलना में थोड़े धीमे हैं, फिर भी आप विशिष्ट ट्रिक्स (जैसे फिल्टर को मिलाना) का उपयोग करके उन्हें बहुत तेज़ बना सकते हैं। यह डेवलपर्स को यह भी बताता है कि उनके पास कितना डेटा है उसके आधार पर उन्हें अपने श्रमिकों (पैरेलल रणनीतियों) को कैसे व्यवस्थित करना चाहिए। अंततः, यह डेवलपर्स को ऐसा कोड लिखने का रोडमैप देता है जो पठनीय भी हो और उचित रूप से तेज़ भी।

अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?

आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।

Digest आज़माएँ →