मैं जावा/हाइबरनेट एप्लिकेशन के भीतर अक्षम जुड़ने का पता लगाने और अनुकूलित करने का प्रयास कर रहा हूं। मैंने देखा है कि कुछ मामलों में, परिणामों के सेट में जुड़ने के तरीके की प्रकृति के कारण, ओवर-द-वायर डेटा प्रवाह बहुत अक्षम है।हाइबरनेट का उपयोग करके परिणाम सेट आकार को कैसे ट्रैक करें?
मुझे एक उदाहरण प्रदान करने दें। मान लीजिए आप एक HQL क्वेरी है कि इस तरह दिखता है:
select s from Store s
left join fetch s.items i
left join fetch s.employees e
left join fetch s.customers c
where s.id = :id
(एक पल है कि यह एक स्मार्ट क्वेरी नहीं है के लिए ध्यान न दें - यह सिर्फ एक सरल उदाहरण है)।
यदि आप कल्पना करते हैं कि किसी दिए गए स्टोर में 1000 आइटम और 10 कर्मचारी और 100 ग्राहक हैं, तो आप 1111 इकाइयों के साथ एक जावा ऑब्जेक्ट पेड़ वापस ले लेंगे। इससे आपको यह सोचने में कमी हो सकती है कि डेटाबेस से लगभग 1111 पंक्तियां लौटा दी गईं, जबकि वास्तव में परिणाम सेट में 1,000,000 पंक्तियां थीं!
सभी कॉलम की उपस्थिति इससे भी बदतर हो जाती है। यदि आप कल्पना करते हैं कि प्रत्येक तालिका में 5 कॉलम थे, तो आप कल्पना कर सकते हैं कि आपको लगभग 5555 "आइटम" वापस मिल गए हैं, जबकि परिणाम सेट में कक्षों (पंक्ति * कॉलम) की संख्या वास्तव में 20,000,000 थी।
स्पष्ट रूप से, यह एप्लिकेशन डेवलपर की ज़िम्मेदारी है कि इस मुद्दे से अवगत रहें और इस तरह से प्रश्न न लिखें। हालांकि, यह कभी-कभी अनजाने में होता है (और कम गंभीर तरीकों से), और यह किसी भी तरह से इन परिस्थितियों की पहचान करने के लिए आवेदन करने में सक्षम होना बहुत अच्छा होगा।
हालांकि, मैं या तो कच्चे परिणाम सेट में पंक्तियों की संख्या या स्तंभों की संख्या की गणना करने के लिए कोई रास्ता नहीं ढूंढ पाया है। न तो हाइबरनेट इंटरसेप्टर, हाइबरनेट घटनाएं, न ही हाइबरनेट आंकड़े इस जानकारी तक पहुंच प्रदान करते हैं।
कोई सुझाव? अग्रिम में धन्यवाद।
अच्छी तरह से आप हमेशा एक ही क्वेरी का उपयोग कर सकते हैं लेकिन इसे निष्पादित करने से पहले गिनती (*) के साथ :) – Apostolos
हाँ, यह काम करेगा, संभावित रूप से (संभावित रूप से) प्रत्येक क्वेरी के लिए निष्पादन समय को दोगुना करने की लागत पर, इसलिए यह निश्चित रूप से एक अपूर्ण है समाधान :) –
क्वेरी नहीं कर सकता .list() आकार() रिकॉर्ड्स की गिनती देता है? –