मुझे रिलेशनल डेटाबेस की दुनिया में DRY के साथ समस्याओं का उल्लेख करना है। डेटाबेस को सेट-आधारित लॉजिक का उपयोग करके और सरगेबल प्रश्नों के माध्यम से जल्दी और अच्छी तरह से प्रदर्शन करने के लिए डिज़ाइन किया गया है। DRY सिद्धांत अक्सर डेवलपर को गैर-सारगनीय प्रश्न लिखने या कई स्थितियों में मौजूदा कोड का लाभ उठाने के लिए रो-बाय-एगोनिजिंग-रो तर्क का उपयोग करने का कारण बनता है। DRY और प्रदर्शन अनुकूलन अक्सर बाधाओं पर होते हैं और डेटाबेस की दुनिया में, प्रदर्शन आमतौर पर बनाए रखने की तुलना में कहीं अधिक महत्वपूर्ण होता है। इसका मतलब यह नहीं है कि आपको DRY सिद्धांतों का उपयोग नहीं करना चाहिए, बस आपको इस बारे में पता होना चाहिए कि यह डेटाबेस की समग्र प्रयोज्य को कैसे प्रभावित करेगा। एप्लिकेशन डेवलपर्स बात करते हैं DRY पहले और प्रदर्शन दूसरे, डेटाबेस डेवलपर्स डेटा अखंडता पहले सोचते हैं, प्रदर्शन दूसरे, डेटा तीसरे की सुरक्षा (प्रदर्शन और सुरक्षा कुछ प्रणालियों में स्थानों को स्वैप कर सकते हैं)।
मैंने सामान्य तौर पर देखा है, कि आपने डेटाबेस में जितनी अमूर्तता की परतें डाली हैं, वे उतने ही धीमी हो जाते हैं। मैं यह नहीं कह रहा हूं कि मैं उन लोगों की कामना नहीं करता, जो स्वयं डाटाबेस कार्यक्रमों को डिजाइन करते हैं, उन्होंने डेवलपर्स को DRY का उपयोग करने की अनुमति देने का एक बेहतर काम नहीं किया, यह प्रभावित किए बिना कि डेटाबेस कितना अच्छा प्रदर्शन करता है, लेकिन मैं उस स्तर पर डेटाबेस सॉफ़्टवेयर डिज़ाइन नहीं करता हूं , इसलिए शायद डेटाबेस में अमूर्तता और प्रदर्शन के बीच संघर्ष मुझे लगता है की तुलना में ठीक करने के लिए कठिन है। हालांकि, हमें सिस्टम के साथ काम करना होगा क्योंकि वे वर्तमान में निर्मित हैं। हम भविष्य के रिलीज में DRY सिद्धांतों के बेहतर कार्यान्वयन के लिए पूछ सकते हैं जो प्रदर्शन को भी नहीं मारेंगे (और यह वर्षों से बेहतर हो गया है लेकिन अभी भी समस्याग्रस्त है), लेकिन इस बीच हमें यह विचार करना चाहिए कि क्या DRY इस डेटाबेस के लिए सही कदम है इस समय।
लेकिन अक्सर डीआरवाई सिद्धांत को पूरा करने के लिए जिन सुविधाओं का आप उपयोग करना चाहते हैं, वे पूरी होती हैं, जो डेटाबेस के लिए जबरदस्त समस्याएं पैदा करती हैं। मैं यह नहीं कह रहा कि कभी DRY का उपयोग न करें लेकिन इसके साथ ओवरबोर्ड न जाएं।
मैं किस बारे में बात कर रहा हूं इसके उदाहरण। आपको महीने में एक बार एक लाख रिकॉर्ड का डेटा आयात करने की आवश्यकता है। रिकॉर्ड पहले से ही एक संग्रहीत खरीद कॉल करने वाले उपयोगकर्ता इंटरफ़ेस के माध्यम से मैन्युअल रूप से जोड़ा जा सकता है। यह खरीद, क्योंकि यह एकल रिकॉर्ड आयात के लिए डिज़ाइन किया गया था, केवल एक समय में एक रिकॉर्ड जोड़ता है। डीआरवाई का उपयोग दो स्थानों में डालने के कोड से बचने के लिए, आप सेट-आधारित आयात लिखने के बजाय बार-बार खरीद को कॉल करने के लिए एक कर्सर लिखते हैं। आयात के लिए समय 30 मिनट से 18 घंटे तक सेट-आधारित तर्क का उपयोग करेगा। अब इस मामले में DRY का पालन करने का सही तरीका यह होगा कि mulitple रिकॉर्ड आयात को संभालने के लिए खरीदारी को ठीक किया जाए। दुर्भाग्य से, किसी सरणी को किसी प्रोक में भेजना (db बैक एंड पर निर्भर करता है) के लिए अक्सर असंभव या बहुत मुश्किल होता है और प्रोक को बदलकर आप एप्लिकेशन को तोड़ देते हैं।
स्केलर फ़ंक्शंस और टेबल-वैल्यू फ़ंक्शंस का उपयोग DRY सिद्धांतों को लागू करने के लिए किया जाता है और फिर से वे विशेष रूप से प्रदर्शन को प्रभावित कर सकते हैं खासकर यदि आपको उन्हें इस तरह से उपयोग करने की आवश्यकता होती है जो अनुक्रमणिका को उपयोगी होने से रोकता है।
DRY को लागू करने के लिए दृश्य भी अच्छे हैं। हालांकि, यदि आप उन विचारों के उपयोग के माध्यम से DRY को लागू करते हैं जो अन्य विचारों को कॉल करने वाले विचारों को कॉल करते हैं, तो आप जल्दी से उस बिंदु पर पहुंच जाएंगे जहां प्रश्न लोड के तहत टाइमआउट होंगे। वास्तव में आपको लाखों रिकॉर्ड के डेटा सेट उत्पन्न करने की आवश्यकता हो सकती है जब आपको केवल तीन की आवश्यकता होती है। तो DRY को लागू करने के लिए जॉइन के एक जटिल सेट का एक-स्तरीय दृश्य उत्कृष्ट हो सकता है (मेरे पास एक है जो हम यह सुनिश्चित करने के लिए उपयोग करते हैं कि सभी वित्तीय रिपोर्टिंग टेबल के एक ही बेस सेट और कुछ चीजों की गणना का उपयोग करती है), दो से अधिक स्तर और आपको यह विचार करने की आवश्यकता है कि क्या आप प्रदर्शन गड़बड़ कर रहे हैं।